【问题标题】:Codesign returned unknown error -1=ffffffffffffffff代码设计返回未知错误 -1=ffffffffffffffff
【发布时间】:2017-10-25 17:02:26
【问题描述】:

我尝试对 iOS 应用程序进行代码签名, 这些是我遵循的步骤

    security create-keychain -p password ${KEYCHAIN}
    security set-keychain-settings -u -t 300 ${KEYCHAIN}
    security list-keychains -d user -s login.keychain ${KEYCHAIN}
    security import "$1" -k ${KEYCHAIN} -A -P "${PASSPHRASE}" -A >/dev/null
    security unlock-keychain -p password ${KEYCHAIN}

    /usr/bin/codesign -f -s $IDENTITY --keychain $KEYCHAIN --entitlements $ENTITLEMENTS Payload/Test.app

这返回了我 Codesign 通过 ssh 返回了未知错误 -1=ffffffffffffffff。

如果我直接在机器上执行代码签名命令,则签名成功。

该问题仅存在于 Mac OS Sierra 中。

【问题讨论】:

标签: ios xcode code-signing code-signing-certificate


【解决方案1】:

即使我们在钥匙串中安装了正确的证书,并在 ~/Library/MobileDevices/Provisioning Profiles 下安装了正确的 Provisioning Profile。

我们也可以看到

unknown error -1=ffffffffffffffff

对于这个错误,我尝试了以下步骤来解决这个问题:

  1. 重启机器,使用“安全解锁钥匙串”解锁钥匙串,再次锁定钥匙串
  2. 删除 ~/Library/Developer/Xcode/DerivedData 文件夹。
  3. 运行 carthage bootstrap --platform iOS
  4. 打开源代码同步下工作区,运行“xattr -rc”。然后在 xcode 中打开 .xcodeproject 文件。
  5. 为每个目标启用自动签名。需要使用有效凭据登录。
  6. 单击签名下的配置文件。
  7. 再次解锁钥匙串
  8. 将构建设备更改为通用设备,在 Product --> Clean 下,然后 Product --> Archive
  9. 将显示钥匙串访问允许,单击“始终允许”。
  10. 您应该确保存档成功,然后再次触发 Jenkins 作业。

【讨论】:

    【解决方案2】:

    这发生在无头构建中,因为无法显示或响应密钥访问提示。解决方案是通过提前授予对密钥的访问权限来防止显示该提示。

    打开 Keychain Access,找到您的签名证书的密钥(登录-> 证书,然后展开证书以显示其密钥)。右键单击该键并选择:获取信息 -> 访问控制,然后选择“允许所有应用程序访问此项目”。

    【讨论】:

      【解决方案3】:

      除了这里提到的之外,我还要尝试更多的东西:问题是钥匙串不喜欢 SSH 会话。我必须在我的会话中执行这些来修复它:

      security unlock-keychain -p MY_PASS ~/Library/Keychains/login.keychain
      security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k MY_PASS ~/Library/Keychains/login.keychain
      security set-keychain-settings ~/Library/Keychains/login.keychain
      

      我还通过从 XCode 中删除我的帐户来删除我当前的证书系统/帐户证书(我使用 fastlane 进行构建),但我怀疑这不应该影响它。

      【讨论】:

      • 有趣。这解决了我的代码签名问题,但它破坏了我的 Git 客户端。我的 Mac 是 Jenkins 奴隶,现在它无法从 Git 中签出源代码。关于为什么会发生这种情况的任何线索?
      • 如果可以的话,请解释一下如何反转这个命令。
      • 好吧,我猜您更改了您的密钥库凭据 (MY_PASS) 并且 git 客户端不能再使用密钥库/钥匙串了。但是,我无法解释如何解决这个问题,因为我使用 MacOS 只是为了设置该代理,所以我在这里的经验相当......有限。
      • 感谢@TadasŠubonis。注意:如果提示用户名或密码不正确,请尝试运行不带 -p 参数的命令,然后在提示时输入密码。
      【解决方案4】:

      您可能从 KeyChain 导出了一些文件,例如 p12,当操作系统询问您的 root 密码时,您拒绝了它,然后 Xcode 将使用此信息编码签名错误。

      如果是这样的话,你应该重复上面的操作,输入你的密码并点击允许,然后代码签名就可以了。

      【讨论】:

        【解决方案5】:

        在直接从 Xcode 归档时遇到了同样的问题。 分享解决方案以防万一。

        有时,钥匙串似乎最终处于损坏状态。也使用 MacOS Sierra。

        症状:

        重启 Xcode 后需要重新登录才能访问帐户

        在使用钥匙串访问进行某些操作时提示输入密码

        钥匙串访问 - 通过更改钥匙串设置访问登录钥匙串时出错...

        对我来说解决方法是锁定和解锁(需要密码)涉及的钥匙串,在我的情况下是登录

        【讨论】:

        • 锁定和解锁钥匙串访问对我有用.. 我使用的是 macOS High Sierra 10.13.1.. 未知错误 -1=fffffff 对 Apple 没有意义:|
        • 奇怪的错误。我不记得解锁我的钥匙链,但它已解锁。锁定它,它又好了。
        • 这是帮助我解决问题并为我节省大量时间的最佳答案。谢谢你,罗马诺。
        • 一张图片胜过千言万语。工作。
        • 非常感谢。我被这个问题困扰了一段时间。 KeyChain 中的锁定/解锁工作。我正在使用 Xcode 9.2、MacOS Sierra 10.12.6
        【解决方案6】:

        @madhu 我一直在尝试解决相同的问题,发现与相关证书关联的密钥的访问控制设置为“在允许访问之前确认”,这在 Jenkins 中不起作用。我将它(通过 Keychain Access gui - Get Info, Access Control)修改为“允许所有应用程序访问此项目”,我的构建成功了。

        【讨论】:

        • 谢谢,这对我有用。请注意,仍然会出现一个对话框要求输入密码,但您可以说“总是”。
        【解决方案7】:

        我已经尝试了网络上几乎所有现有的建议,但都没有帮助...

        最后只重新生成配置文件(用于 AdHoc),重新下载并将其放置到 ~/Library/MobileDevice/Provisioning Profiles/ 覆盖现有的文件救了我的命。

        顺便说一句,AppStore 构建一直都是成功的,所以问题肯定出在 AdHoc 配置文件本身(很奇怪,因为它看起来很不错)。

        【讨论】:

        • 您是否遇到了与我发布的相同的问题??
        • 是的,通过 ssh 的 error -1=ffffffffffffffff 完全相同,没有明显的原因(我有 macOS Sierra 10.12.6)。
        • 嘿,我今天再次浏览了所有这些东西,发现了以下内容:1)~/Library/MobileDevice/Provisioning\ Profiles/ 目录中的 *.mobileprovision 文件不能具有com.apple.quarantine 扩展属性。通过 Safari 从 Mac 下载时默认添加。这就是为什么上次重新下载对我有帮助的原因,因为我尝试从 Windows 下载并通过 WinSCP 放到 Mac 上。 2)答案中的security 命令也必须运行。上次我在第 1 步之前这样做但没有帮助,这次运行它对我有帮助(因为我已经正确地完成了第 1 步)。
        • 顺便说一句,这个属性的存在可以通过ls -l@检查并且可以通过xattr -d com.apple.quarantine /path/to/file.mobileprovision删除
        • 我对您的情况一无所知,但是对于我发布的问题对您的解决方案没有任何影响,这可能是其他解决方案
        【解决方案8】:

        前段时间遇到同样的问题,补充

        security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k password ${KEYCHAIN}

        帮我解决了。

        【讨论】:

        • 您能否详细说明问题所在?这段代码是如何解决的?
        • 根据我当时的研究,我认为问题与钥匙串权限有关,这就是该命令修复的问题:它告诉系统相关钥匙串适合代码签名。
        • 当时我打开了一个关于 fastlane 的 github 问题,github.com/fastlane/fastlane/issues/8797 - 即使你没有运行 fastlane,那里的一些信息可能会有所帮助。
        • 感谢您的信息,但他们都没有帮助,从本地机器它能够正确签名,但通过 ssh 它向我抛出了这个错误
        • 如果您不知道 ${KEYCHAIN} 是什么,请输入 security list-keychains 并选择一个(应该是登录和系统钥匙串文件的路径)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多