iOS应用Azure Pipeline‘清理并归档’步骤失败(仅使用SPM)
iOS应用Azure Pipeline‘清理并归档’步骤失败(仅使用SPM)
我来帮你分析下这个问题——你遇到的Bash exited with code '65'其实是Xcode打包过程中常见的签名/配置文件冲突问题,结合报错里提到的nanopb包信息,核心原因很明确:nanopb这个SPM依赖不支持手动指定配置文件(Provisioning Profile),但你的Pipeline里给它强制配置了AppProvisioningProfile。
给你几个针对性的解决办法:
- 检查Azure Pipeline的归档任务配置:如果是用可视化界面配置的Xcode任务,找到是否有给所有目标统一设置
provisioningProfileUuid或provisioningProfileName的选项,把这些全局配置去掉,只给你的主应用目标指定配置文件就行——SPM的第三方包不需要单独配置签名,Xcode会自动用“自动管理签名”处理它们。 - 调整Xcode项目内的签名设置:打开你的项目,找到nanopb相关的目标(在Project导航栏的
Package Dependencies下),进入Build Settings的Signing板块,勾选Automatically manage signing,确保它不使用手动指定的配置文件。 - 如果是用YAML编写的Pipeline,检查
Xcode@5任务的参数:不要给整个任务传递provisioningProfileId,而是通过xcargs参数只给主应用指定配置,比如xcargs: "-allowProvisioningUpdates -destination 'generic/platform=iOS' PROVISIONING_PROFILE_SPECIFIER=AppProvisioningProfile",这样只会把配置文件应用到主应用,不会影响SPM依赖。另外可以添加-skipPackagePluginValidation参数,避免SPM包的签名验证冲突。 - 清理Pipeline缓存:有时候旧的SPM缓存或配置文件缓存会导致问题,在归档步骤前添加一个清理步骤,比如执行
rm -rf ~/Library/Caches/org.swift.swiftpm或者用Azure的Cache任务清理相关缓存目录。
这类问题的本质是SPM依赖和主应用的签名策略不匹配,只要让第三方包用自动签名,主应用保持手动指定配置文件的策略,就能解决这个报错啦。
备注:内容来源于stack exchange,提问作者Dmitry
相关产品推荐
相关产品推荐

