Bitcode在Carthage依赖项上被禁用

时间:2017-11-22 10:13:30

标签: ios swift xcode carthage bitcode

方案

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

  

Bitcode是默认设置,但是可选。对于watchOS和tvOS应用程序,   bitcode是必需的。如果您提供bitcode,所有应用程序和框架   在应用程序包中(项目中的所有目标)需要包含bitcode

我目前正在将这些基础图书馆与迦太基合并。

问题

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

问题

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

2 个答案:

答案 0 :(得分:3)

我找到了一个解决方案,通过使shell脚本能够擦除bitcode的禁用,以防有人面对或好奇解决类似的问题,脚本是这样的:

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 $'\0' 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

答案 1 :(得分:1)

要添加到Andrea的答案中,请确保您使用--no-use-binaries进行迦太基构建,因为该依赖项可能在其已发布的框架中禁用了位码,而无需使用--no-use-binaries,就可以使用它。