在 Carthage 依赖项上禁用位码

Bitcode disabled on Carthage dependencies

场景

我的项目(为 iOS/watchOS/tvOS 共享的代码库)具有 ENABLE_BITCODE = YES 的构建设置,并利用了尚不支持位码的基础库,尽管在 App Thinning[ 中引用了 Apple 文档=14=]

Bitcode is the default, but optional. For watchOS and tvOS apps, bitcode is required. If you provide bitcode, all apps and frameworks in the app bundle (all targets in the project) need to include bitcode

我目前正在将这些基础库与 Carthage 集成。

问题

为了有一个干净的构建过程,我尝试向各自的所有者提交一些拉取请求以启用位码,但是由于他们的代码库的复杂性,它们适用于多个操作 systems/architectures ,我的拉取请求仍处于待定状态:因此,为了能够构建我自己的项目,我仍然必须手动更改它们的构建设置。

问题

如何缩短 Carthage 进程以将特定构建设置(在本例中 ENABLE_BITCODE = YES)注入相关库?

我找到了一个解决方案,制作了一个 shell 脚本,可以清除位码的禁用,以防有人面临或想解决类似的问题,脚本是这样的:

carthage update --platform ios
for D in ./Carthage/Checkouts/*; do
  if [ -d "${D}" ]; then
    find $D -type d -name \*.xcodeproj -print0 |
      while IFS= read -r -d $'[=10=]' folder; do
        sed -i '' 's/ENABLE_BITCODE = NO;//g' $folder/project.pbxproj
      done
    fi
done
carthage build --platform ios

基本上脚本的机制是:

  1. 正在下载所有依赖项
  2. 对于每个依赖项,找到pbxproj生活在xcodeproj中并切断字符串ENABLE_BITCODE = NO
  3. 最终构建依赖项以生成 .framework

要添加到 Andrea 的答案中,请确保使用 --no-use-binaries 构建迦太基,因为依赖项可能在其已发布的框架中禁用了位码,该位码将在没有 --no-use-binaries 的情况下使用。