Xcode 8 使用 TeamCity 代码签名的 Fastlane 构建失败,退出代码为 1

Xcode 8 Fastlane build with TeamCity codesign failed with exit code 1

我在 macOS Sierra 上使用 Xcode 8.3.2 时遇到了一个奇怪的严重问题。我可以使用 fastlane 或手动执行命令在构建机器上本地构建应用程序。开发和临时构建都可以在本地创建。

 $ fastlane <lane_name>

但是当从 TeamCity 尝试相同的操作时,它会抛出以下错误。

 [exec]/usr/bin/codesign --force --sign 5609CEE02FBF256EDBF60DB28C1A2995A2153B5B --entitlements /Users/<username>/Library/Developer/Xcode/DerivedData/<AppName>-frpvxgdtafatrrgbjqbbepgfzvak/Build/Intermediates/ArchiveIntermediates/SabaMeeting/IntermediateBuildFilesPath/<AppName>.build/Release-iphoneos/<AppName>.build/<AppName>.app.xcent --timestamp=none /Users/<username>/Library/Developer/Xcode/DerivedData/<AppName>-frpvxgdtafatrrgbjqbbepgfzvak/Build/Intermediates/ArchiveIntermediates/SabaMeeting/InstallationBuildProductsLocation/Applications/<AppName>.app
 [exec] /Users/<username>/Library/Developer/Xcode/DerivedData/SabaMeeting-frpvxgdtafatrrgbjqbbepgfzvak/Build/Intermediates/ArchiveIntermediates/SabaMeeting/InstallationBuildProductsLocation/Applications/<AppName>.app: unknown error -1=ffffffffffffffff
 [exec] Command /usr/bin/codesign failed with exit code 1
 [exec] 
 [exec] ** ARCHIVE FAILED **
 [exec] 
 [exec] 
 [exec] The following build commands failed:
 [exec]     CodeSign /Users/<username>/Library/Developer/Xcode/DerivedData/SabaMeeting-frpvxgdtafatrrgbjqbbepgfzvak/Build/Intermediates/ArchiveIntermediates/<AppName>/InstallationBuildProductsLocation/Applications/SabaMeeting.app
 [exec] (1 failure)

TeamCity 提取代码甚至执行命令但失败。 构建步骤:命令行设置了带有自定义脚本的 TeamCity。 尝试了以下方法但不起作用:

  1. Xcode 首选项->账户->删除已经添加的账户并重新添加
  2. 生成了新的分发和开发人员证书并安装在 KeyChain 中。新的配置文件并安装在 Xcode.
  3. 通过 "Allow all applications to access this item" 验证了对私钥的钥匙串访问。将证书从登录移动到系统,并对所有人进行访问控制。
  4. 重装xcode8.3.2,重启机器
  5. 已安装 Apple 全球开发者关系证书颁发机构。
  6. 应用程序和派生数据目录中不允许存在已验证的资源分叉、查找器信息或类似碎屑。 https://developer.apple.com/library/content/qa/qa1940/_index.html
  7. 该项目没有使用 CocoaPods。
  8. 已尝试清除 DerivedData。

还有更多的研发。任何帮助将不胜感激。

你的车道在你的 fastfile 上看起来如何?请分享...

我的猜测;

3 "Allow all applications to access this item" 验证了对私钥的钥匙串访问。将证书从登录移动到系统,并对所有人进行访问控制。

Teamcity 可能无法访问您的证书并失败。

试试这个;

  1. 将证书移回系统登录。
  2. 在您的 gym 或正在构建 .ipa 的任何 fastlane 命令之前添加以下内容。这将使 teamcity 解锁并访问钥匙串。

车道:测试版|选项|

  unlock_keychain(path:"login.keychain", password:"yoursystempassword") 
  sh "security set-keychain-settings -t 3600 -l ~/Library/Keychains/login.keychain"   
  gym(scheme: "yourapp", workspace:"probably you dont have a wokrspace so no need")   
end