一些背景资料: 分发证书存储在私有 Git 存储库中。 在本地运行时 - fastlane match 安装证书以登录 Keystore,fastlane release 构建应用程序存档(IPA)并使用分发证书对其进行签名。
然而,在 CircleCI 中运行时,相同的过程无法找到分发证书:
error: No signing certificate "iOS Distribution" found: No "iOS Distribution" signing certificate matching team ID "**********" with a private key was found. (in target 'APPNAME' from project 'APPNAME')
快车道配置:
version: 2.1
workflows:
testing:
jobs:
- ios-build
jobs:
ios-build:
macos:
xcode: 14.2
steps:
- checkout
- run: rbenv install 2.7.5
- run: bundler install
- run: yarn install
- run: gem install fastlane
- run: gem install cocoapods
- run: cd ios && pod install
- run: cd ios && fastlane match && fastlane release
Fastlane 匹配成功安装证书,但构建无法找到它并且归档失败。
通过 SSH 连接到正在运行的实例并发现以下奇怪的事情 - 当寻找代码签名证书时证书安装在默认登录密钥库中 - 返回 0:
$ security find-identity -p codesigning
Policy: Code Signing
Matching identities
0 identities found
Valid identities only
0 valid identities found
当运行相同的命令指定密钥库的完整路径时 - 它找到证书:
$ security find-identity -p codesigning /Users/distiller/Library/Keychains/login.keychain-db
Policy: Code Signing
Matching identities
1) 006F6D751DD7B096DCD94270F0588D1D70BE1DF3 "Apple Distribution: Island Pay Group Ltd (Q2UH3KHT9C)"
1 identities found
Valid identities only
1) 006F6D751DD7B096DCD94270F0588D1D70BE1DF3 "Apple Distribution: Island Pay Group Ltd (Q2UH3KHT9C)"
1 valid identities found
接下来我检查了 Keystore 是默认的 ketchain:
$ security default-keychain "/Users/distiller/Library/Keychains/login.keychain-db"
我不知道下一步该做什么。我发现了为 Jenkins/fastlane 描述的类似问题: Jenkins/fastlane - 没有找到本地代码签名身份
如果在 Jenkins 或 CircleCI 中运行的虚拟容器无法访问登录密钥库——那么我看不出 fastlane 版本如何适用于任何人的 IOS 应用程序。
也试图获得 CircleCI 的支持。最终找到解决方案时将报告解决方案,因为多个团队成员在这个问题上浪费了很多时间。它不应该这么难。