Xcode 9.2归档成功但无法导出IPA,企业版iOS AdhocProd集成遇阻
解决iOS企业版AdhocProd CI构建导出时ExportOptions.plist的冲突问题
我之前帮不少开发者踩过这个坑——Xcode手动导出的ExportOptions.plist放到Jenkins里用,经常会遇到“provisioningProfiles字典已存在”或者反过来要求添加的矛盾提示,本质是手动导出的配置和CI环境的签名逻辑不匹配,下面给你一步步的解决方案:
1. 重新生成适配CI的ExportOptions.plist
不要直接用Xcode导出的plist文件,因为它可能包含了自动签名相关的冗余配置,和CI的手动签名逻辑冲突。你可以手动创建一个干净的plist,或者用命令行生成:
企业版Adhoc分发的标准配置(替换成你的信息)
<?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> <!-- 分发类型:ad-hoc对应企业账号下的Adhoc分发,enterprise对应企业内部分发 --> <key>method</key> <string>ad-hoc</string> <!-- 必须设为manual,告诉CI我们要手动指定签名配置 --> <key>signingStyle</key> <string>manual</string> <!-- 这里必须明确指定BundleID对应的描述文件名称 --> <key>provisioningProfiles</key> <dict> <key>com.yourcompany.yourapp</key> <string>Your App Adhoc Provisioning Profile</string> </dict> <!-- 你的Apple Developer Team ID --> <key>teamID</key> <string>ABCDE12345</string> </dict> </plist>
2. 调整Jenkins的导出命令
确保你的导出命令只依赖这个plist,不要额外传递会覆盖签名配置的参数,比如:
xcodebuild -exportArchive \ -archivePath "${WORKSPACE}/YourApp.xcarchive" \ -exportPath "${WORKSPACE}/ExportedIPA" \ -exportOptionsPlist "${WORKSPACE}/ExportOptions.plist" \ -allowProvisioningUpdates
注意:不要添加-exportProvisioningProfile或者其他签名相关的命令行参数,否则会和plist里的provisioningProfiles字段冲突。
3. 检查CI环境的签名资产
Jenkins服务器必须能访问到对应的分发证书和描述文件:
- 用以下命令检查证书是否安装:
确保输出里有你的企业分发证书。security find-identity -v -p codesigning - 检查描述文件是否在正确路径:
确保你指定的描述文件名称和这里的文件匹配(可以右键描述文件查看名称)。ls ~/Library/MobileDevice/Provisioning Profiles/
4. 排查Jenkins插件的自动签名干扰
如果你用了Jenkins的Xcode Plugin,一定要在插件配置里:
- 禁用“自动管理签名”选项
- 选择“使用自定义ExportOptions.plist”,指向你刚才生成的文件
- 不要勾选任何自动填充签名信息的选项
这样就能避免插件自动注入provisioningProfiles字段导致的冲突。
按这个流程调整后,应该就能解决既提示字段存在又要求添加的矛盾问题了,我之前帮几个做企业版Adhoc分发的团队都解决了这个问题,你可以试试。
内容的提问来源于stack exchange,提问作者kalyan
相关产品推荐
相关产品推荐

