使用xcodebuild构建时复制SPM Bundle失败的解决问询
问题详情
执行以下xcodebuild命令构建iOS模拟器版本时,出现13个第三方库bundle文件复制失败的错误,最终构建退出码为65:
xcodebuild \ build \ -scheme "My Project" \ -derivedDataPath './customFolder' \ -destination 'platform=iOS Simulator,name=iPhone 15 Pro Max,OS=17.4' \ -configuration Release \ CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO
错误示例:
Copy /Users/runner/Library/Developer/Xcode/DerivedData/My_Project-ayymvkrodrcpfzfpxkejssmcssuc/Build/Products/Release\ Development-iphonesimulator/My\ Project.app/Stripe_StripeUICore.bundle /Users/runner/Library/Developer/Xcode/DerivedData/My_Project-ayymvkrodrcpfzfpxkejssmcssuc/Build/Products/Release\ Development-iphonesimulator/Stripe_StripeUICore.bundle (in target 'My Project' from project 'My Project')
错误原因分析
- 配置名称不匹配:命令指定
-configuration Release,但错误路径显示实际使用的是Release Development配置,说明scheme中Release对应的实际配置名称并非Release,导致xcodebuild无法定位正确的产物路径。 - DerivedData路径未生效:命令中指定了自定义DerivedData路径,但错误信息仍使用默认路径,可能是路径格式(如引号)或权限问题导致配置未生效。
- 构建缓存干扰:旧的构建缓存可能导致bundle文件缺失或路径异常。
修复方案
方案1:修正配置名称
检查项目scheme的配置映射,将-configuration参数替换为实际的配置名称(比如Release Development):
xcodebuild \ build \ -scheme "My Project" \ -derivedDataPath ./customFolder \ -destination 'platform=iOS Simulator,name=iPhone 15 Pro Max,OS=17.4' \ -configuration "Release Development" \ CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO
方案2:清理缓存后重新构建
添加clean操作,同时简化DerivedData路径格式(去掉引号),确保路径生效:
xcodebuild \ clean build \ -scheme "My Project" \ -derivedDataPath ./customFolder \ -destination 'platform=iOS Simulator,name=iPhone 15 Pro Max,OS=17.4' \ -configuration Release \ CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO
方案3:检查Bundle资源配置
如果以上方案无效,打开Xcode项目,检查target的Copy Bundle Resources构建阶段,确认所有报错的bundle文件已正确添加,且文件存在于项目或Pods的产物目录中。
内容的提问来源于stack exchange,提问作者Clément Cardonnel

