Azure DevOps Pipelines中Xcode多配置文件项目签名失败求助
我之前也碰到过几乎一模一样的AUv3插件+主App在Azure DevOps Pipelines里签名失败的坑,咱们一步步来排查修复:
先拆解核心错误原因
你收到的错误提示其实已经给出了关键线索:
Code Signing Error: No profiles for 'com.company.product_name.product_nameAUv3' were found: Xcode couldn't find any iOS App Development provisioning profiles matching 'com.company.product_name.product_nameAUv3'. Automatic signing is disabled and unable to generate a profile. To enable automatic signing, pass -allowProvisioningUpdates to xcodebuild.
Code Signing Error: Code signing is required for product type 'App Extension' in SDK 'iOS 13.7'
本质是签名配置冲突+Profile未正确加载,下面是具体解决步骤:
1. 修复Xcode任务与plist的签名配置冲突
你当前Xcode任务里设置了signingOption: auto,但exportOptions.plist里却是signingStyle: manual——这两个配置完全矛盾!当signingOption设为auto时,Azure的Xcode任务会忽略你plist里的手动签名设置,强制Xcode用自动签名模式,而你的AUv3插件可能没开启自动签名权限,导致找不到Profile。
修改方案:把Xcode任务里的signingOption改成manual,让任务完全遵循你plist里的手动签名配置:
signingOption: manual
2. 替换YAML里的中文引号
我注意到你Xcode任务里的路径用了中文引号‘’,比如:
xcWorkspacePath: ‘project_name/project.xcworkspace' exportOptionsPlist: ‘file.plist'
YAML对字符格式要求很严格,中文引号会被解析成非法字符,导致Azure找不到你的工作区文件和plist文件,自然没法读取签名配置!
修改方案:把所有中文引号换成英文单引号''或双引号"":
xcWorkspacePath: 'project_name/project.xcworkspace' exportOptionsPlist: 'file.plist'
3. 确保两个Provisioning Profile都被正确安装
你提到已经安装了Profile,但要确认主App和AUv3插件的Profile都通过Install Apple Provisioning Profile任务单独安装了——Azure不会自动识别plist里的两个Profile,必须分别安装它们。
添加两个安装Profile的任务到Xcode任务之前:
- task: InstallAppleProvisioningProfile@1 displayName: 'Install Main App Provisioning Profile' inputs: provisioningProfileLocation: 'secureFiles' provProfileSecureFile: 'main-app-profile.mobileprovision' # 替换成你上传的主App Profile文件名 - task: InstallAppleProvisioningProfile@1 displayName: 'Install AUv3 Extension Provisioning Profile' inputs: provisioningProfileLocation: 'secureFiles' provProfileSecureFile: 'auv3-extension-profile.mobileprovision' # 替换成你上传的AUv3 Profile文件名
同时检查plist里的Profile UUID是否和Azure Secure Files里上传的两个Profile的UUID完全一致(包括大小写),UUID复制错是非常常见的坑!
4. 验证Profile的类型与Bundle ID匹配
- 确认在Apple Developer后台创建的AUv3插件Profile是App Extension类型的,不能用主App的Profile;
- 检查Profile的Bundle ID
com.company.product_name.product_nameAUv3和你Xcode项目里插件的Bundle ID完全一致,大小写、后缀都不能错; - 确保两个Profile都是iOS Distribution类型(因为你plist里的
method是app-store),不是Development类型。
5. 可选:添加自动更新Profile参数(如果以上都无效)
如果做完上面的步骤还是失败,可以尝试在Xcode任务里添加args参数,允许Xcode自动更新Profile:
args: '-allowProvisioningUpdates'
注意这个需要你的Azure Pipelines服务连接配置了Apple Developer账户权限(比如用Apple App Store连接类型的服务连接)。
修改后的完整Xcode任务示例
steps: # 先安装证书 - task: InstallAppleCertificate@2 displayName: 'Install iOS Distribution Certificate' inputs: certSecureFile: 'your-dist-cert.p12' # 替换成你的.p12证书文件名 certPwd: '$(certificatePassword)' # 证书密码存在Azure变量组里 # 安装主App的Profile - task: InstallAppleProvisioningProfile@1 displayName: 'Install Main App Provisioning Profile' inputs: provisioningProfileLocation: 'secureFiles' provProfileSecureFile: 'main-app-profile.mobileprovision' # 安装AUv3插件的Profile - task: InstallAppleProvisioningProfile@1 displayName: 'Install AUv3 Extension Provisioning Profile' inputs: provisioningProfileLocation: 'secureFiles' provProfileSecureFile: 'auv3-extension-profile.mobileprovision' # 执行Xcode构建 - task: Xcode@5 displayName: 'Xcode build' inputs: actions: 'build' sdk: iphoneos13.7 xcWorkspacePath: 'project_name/project.xcworkspace' scheme: 'project_name - All' packageApp: true exportPath: output/ exportOptions: plist exportOptionsPlist: 'file.plist' signingOption: manual teamId: '10-character development team ID' useXcpretty: false # 可选:自动更新Profile # args: '-allowProvisioningUpdates'
按照这些步骤调整后,应该就能解决签名失败的问题了!
内容的提问来源于stack exchange,提问作者amdev1

