如何在Azure DevOps iOS构建流水线中禁用Include Bitcode
仅修改exportMethod参数无法解决Bitcode启用问题,Bitcode开关是独立于签名导出模式的配置项,默认开启状态不会随导出方法(ad-hoc/Development/Enterprise)切换自动关闭,可通过以下三种方案配置解决BrowserStack上传报错:
报错原文:
[BROWSERSTACK_BITCODE_ENABLED_APP_UPLOAD_ERROR] Currently, we do not support iOS apps built with App Store distribution profile and Include bitcode for iOS content check enabled. To fix this issue, we recommend uploading Ad hoc, Enterprise or Development profiles while exporting the IPA of your iOS app.
方案1:直接修改Xcode任务内置配置(优先推荐,无额外脚本)
- 打开流水线中使用的官方Xcode构建任务配置页,找到IPA导出配置区块
- 找到
Include bitcode配置项(5.*及以上版本任务均内置该选项),直接将值设置为False - 滚动到任务的编译参数配置区,在参数输入框追加以下配置,强制覆盖工程编译阶段的Bitcode设置:
ENABLE_BITCODE=NO BITCODE_GENERATION_MODE=marker - 保存配置后重新运行构建即可。
方案2:使用自定义ExportOptions.plist控制导出配置
如果你需要精细化控制IPA导出逻辑、使用自定义导出plist文件时,直接在plist文件根节点下添加如下键值对,强制关闭Bitcode上传配置:
<key>uploadBitcode</key> <false/>
在Xcode任务中指定该自定义plist为导出配置文件即可,该配置优先级高于任务自动生成的默认导出配置。
方案3:兜底强制覆盖工程配置(适用于工程硬编码开启Bitcode的场景)
如果项目Xcode工程的Build Settings中强制开启了Bitcode,上述两个配置可能被工程配置覆盖,可在Xcode构建任务前新增一个命令行脚本任务,执行对应命令强制关闭配置:
- 未使用CocoaPods的普通工程:
xcodebuild -project 你的项目名.xcodeproj -scheme "你的Scheme名" -configuration Release build ENABLE_BITCODE=NO - 使用CocoaPods的xcworkspace工程:
xcodebuild -workspace 你的项目名.xcworkspace -scheme "你的Scheme名" -configuration Release build ENABLE_BITCODE=NO
配置生效验证
构建出IPA后可本地验证Bitcode是否完全关闭,避免配置不生效:
- 将生成的.ipa文件后缀改为.zip后解压,进入
Payload/你的App名.app目录 - 执行以下命令检查二进制文件是否包含Bitcode段:
命令无任何输出即代表Bitcode已完全禁用,此时上传IPA到BrowserStack不会再触发对应错误。otool -l 你的App二进制文件名 | grep __LLVM
内容的提问来源于stack exchange,提问作者Ben

