Xcode 9手动签名导出IPA失败,Jenkins iOS持续集成求助
解决Jenkins iOS CI归档成功但导出IPA失败的问题
我之前在做iOS项目Jenkins持续集成时,也碰到过一模一样的情况——归档明明显示ARCHIVE SUCCEEDED,但一到导出IPA就报EXPORT FAILED。结合你给出的手动签名命令,咱们从几个常见的点来排查解决:
1. 导出命令未同步签名参数
归档阶段你指定了完整的手动签名参数,但导出IPA时如果没带上这些配置,Jenkins所在的环境可能无法自动匹配到正确的签名信息。你需要在导出命令里也加上相同的签名参数,示例命令如下:
/usr/bin/xcodebuild -exportArchive \ -archivePath build/Project.xcarchive \ -exportPath build/ExportedIPA \ -exportOptionsPlist ExportOptions.plist \ CODE_SIGN_STYLE=Manual \ PROVISIONING_PROFILE="CompanyNameQAAdhocDistribution" \ CODE_SIGNING_IDENTITY="iPhone Developer: xxxxxxx xxxx (xxxxxxxxxx)"
2. 检查Jenkins代理机器的配置文件权限
归档成功不代表导出时能访问到配置文件,因为Jenkins通常是以jenkins系统用户运行的,和你本地登录的用户环境可能不一样:
- 登录Jenkins所在的Mac机器,切换到
jenkins用户(可以用sudo su - jenkins命令),打开Xcode的Preferences -> Accounts,确认你的Apple ID已登录,并且CompanyNameQAAdhocDistribution配置文件已经下载。 - 或者手动把配置文件放到
~/Library/MobileDevice/Provisioning Profiles/目录下,注意配置文件的文件名需要是它的UUID(可以用security find-provisioning-profile -name "CompanyNameQAAdhocDistribution"命令查看UUID)。
3. 确认签名证书的访问权限
有时候Jenkins进程没有权限访问你的签名证书,导致导出失败:
- 打开Keychain Access,找到你用的
iPhone Developer: xxxxxxx xxxx (xxxxxxxxxx)证书,右键选择Get Info。 - 在
Access Control标签页,点击+按钮,添加xcodebuild和jenkins进程;测试环境下也可以直接选择Allow all applications to access this item(生产环境建议严格控制权限)。
4. 检查ExportOptions.plist的配置
如果你的导出命令用到了ExportOptions.plist,一定要确保它的配置和手动签名逻辑匹配:
- 对于Ad-hoc导出,
method要设为ad-hoc signingStyle必须是manual,同时在provisioningProfiles里对应你的项目Bundle ID和配置文件名称,示例plist内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>method</key> <string>ad-hoc</string> <key>signingStyle</key> <string>manual</string> <key>provisioningProfiles</key> <dict> <key>com.yourcompany.projectTest</key> <string>CompanyNameQAAdhocDistribution</string> </dict> <key>teamID</key> <string>YOUR_TEAM_ID</string> </dict> </plist>
你可以先从检查导出命令的签名参数开始,这是最常见的问题点。如果还是失败,可以查看Jenkins的导出日志,里面会有更详细的错误信息,比如配置文件找不到、证书权限不足等,根据日志再针对性解决。
内容的提问来源于stack exchange,提问作者kalyan
相关产品推荐
相关产品推荐

