Azure Pipelines如何构建支持arm与Intel架构的OSX通用应用
问题根因
Xcode@5 任务不存在arch这个内置输入参数,你写在inputs块里的arch: "arm64"会被任务直接忽略,根本不会传递给底层的xcodebuild命令,所以构建流程始终默认输出x86_64架构产物。
正确配置方式
所有传给xcodebuild的自定义参数,都要写到args字段里,不要自行在inputs下添加任务不识别的字段。
仅构建Apple Silicon(arm64)版本
修改任务配置如下,重点是把架构参数追加到args中,同时关闭仅构建当前架构的开关:
- task: Xcode@5 displayName: 'Build App' inputs: actions: 'archive' scheme: 'app' sdk: '$(sdk)' configuration: '$(buildConfiguration)' xcWorkspacePath: '$(xcodeproj)' xcodeVersion: 'default' signingOption: 'manual' signingIdentity: '$(CERT)' teamId: $(TeamID) args: 'DSTROOT="$(BuildRoot)" ARCHS="arm64" ONLY_ACTIVE_ARCH=NO'
必须显式设置ONLY_ACTIVE_ARCH=NO,否则如果你的构建Agent是Intel架构的Mac,Xcode会默认覆盖架构参数,只编译x86_64版本。
构建同时支持Intel + Apple Silicon的通用应用
如果要一次编译出双架构通用二进制,直接修改args里的ARCHS参数即可:
args: 'DSTROOT="$(BuildRoot)" ARCHS="arm64 x86_64" ONLY_ACTIVE_ARCH=NO'
输出的安装包可以同时在Intel芯片和M系列芯片的Mac上原生运行。
注意事项
如果项目集成了CocoaPods、Swift Package等第三方依赖,需要确认所有依赖都支持目标架构。使用CocoaPods的话,需要在Podfile中添加配置,让Pods工程的
ARCHS、ONLY_ACTIVE_ARCH参数和主项目保持一致,否则会出现链接阶段架构缺失的报错。
内容的提问来源于stack exchange,提问作者Silve2611
相关产品推荐
相关产品推荐

