启用Bitcode导出时出错(找不到armv7架构的符号)

8
我有一个相当老的项目,最低部署目标设置为iOS 8.4。由于技术原因,必须启用位码。该项目可以构建和运行良好。但是,在尝试导出存档构建时,出现问题。我使用的是Xcode 8.2.1。
当我创建一个测试构建(使用企业证书签名)并启用“从位码重新构建”选项时,导出在编译位码阶段失败。

Screenshot bitcode setting

Screenshot export error

这是日志的相关部分:
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/8.0.0/lib/darwin/libclang_rt.ios.a" "-o" "/private/var/folders/qy/cgq_nq7x2tx1j3z__7f4yx100000gn/T/<redacted target name>WX9bPu/<redacted target name>.armv7.out" 
    -= Output =-
    Undefined symbols for architecture armv7:
      "_llvm_gcov_init", referenced from:
          __hidden#2_ in 001.o
          __hidden#3_ in 001.o
          __hidden#4_ in 001.o
          __hidden#5_ in 001.o
          __hidden#6_ in 001.o
          __hidden#7_ in 001.o
          __hidden#8_ in 001.o
          ...
      "_llvm_gcda_end_file", referenced from:
          __hidden#0_ in 001.o
          __hidden#0_ in 002.o
          __hidden#0_ in 003.o
          __hidden#0_ in 004.o
          __hidden#0_ in 005.o
          __hidden#0_ in 006.o
          __hidden#0_ in 007.o
          ...
      "_llvm_gcda_emit_function", referenced from:
          __hidden#0_ in 001.o
          __hidden#0_ in 002.o
          __hidden#0_ in 004.o
          __hidden#0_ in 005.o
          __hidden#0_ in 006.o
          __hidden#0_ in 007.o
          __hidden#0_ in 008.o
          ...
      "_llvm_gcda_emit_arcs", referenced from:
          __hidden#0_ in 001.o
          __hidden#0_ in 002.o
          __hidden#0_ in 004.o
          __hidden#0_ in 005.o
          __hidden#0_ in 006.o
          __hidden#0_ in 007.o
          __hidden#0_ in 008.o
          ...
      "_llvm_gcda_start_file", referenced from:
          __hidden#0_ in 001.o
          __hidden#0_ in 002.o
          __hidden#0_ in 003.o
          __hidden#0_ in 004.o
          __hidden#0_ in 005.o
          __hidden#0_ in 006.o
          __hidden#0_ in 007.o
          ...
      "_llvm_gcda_summary_info", referenced from:
          __hidden#0_ in 001.o
          __hidden#0_ in 002.o
          __hidden#0_ in 003.o
          __hidden#0_ in 004.o
          __hidden#0_ in 005.o
          __hidden#0_ in 006.o
          __hidden#0_ in 007.o
          ...
    ld: symbol(s) not found for architecture armv7
    Exited with 1
    
    
    error: Failed to compile bundle: /var/folders/qy/cgq_nq7x2tx1j3z__7f4yx100000gn/T/<redacted target name>WX9bPu/<redacted target name>.armv7.xar
    

Stderr:
>
    /Applications/Xcode.app/Contents/Developer/usr/bin/ipatool:202:in `run'
    /Applications/Xcode.app/Contents/Developer/usr/bin/ipatool:1987:in `block in CompileOrStripBitcodeInBundle'
    /Applications/Xcode.app/Contents/Developer/usr/bin/ipatool:1944:in `each'
    /Applications/Xcode.app/Contents/Developer/usr/bin/ipatool:1944:in `CompileOrStripBitcodeInBundle'
    /Applications/Xcode.app/Contents/Developer/usr/bin/ipatool:2119:in `ProcessIPA'
    /Applications/Xcode.app/Contents/Developer/usr/bin/ipatool:2687:in `<main>'";
            info =             {
            };
            level = ERROR;
            type = exception;
        }
    );
    thinnableAssetCatalogs =     (
        "/var/folders/qy/cgq_nq7x2tx1j3z__7f4yx100000gn/T/XcodeDistPipeline.hn6/Root/Payload/<redacted target name>.app/Assets.car"
    );
}
2017-03-31 12:21:37 +0000 [MT] Exporting using IDEDistributionPackageExportStep
2017-03-31 12:21:58 +0000 [MT] Canceled distribution assistant

当我禁用从位码重建时,导出成功并且生成的构建运行良好。但我担心当构建提交到iTunes Connect时会出现问题。有人知道为什么会出现这个错误以及如何解决吗?我有点不知所措。

编辑:

澄清一下:是的,位码在目标级别上启用。以下是链接库:

Screenshot of linked libraries

这些是依赖项:

# Reporting
pod 'Fabric'
pod 'Crashlytics'
pod 'GoogleAnalytics'
pod 'CocoaLumberjack', '~> 1.6.2'

# Networking
pod 'AFNetworking', '~> 2.6.3'
pod 'RestKit', '~> 0.27'
pod 'Reachability'

# Other
pod 'UIColor-Utilities', '~> 1.0.1'
pod 'ViewDeck', '~> 2.4'
pod 'SDWebImage', '~> 3.7.0'
pod 'AMRatingControl', '~> 1.3.0'

我也遇到了同样的问题。你解决了吗? - Gajendra Rawat
还没有。如果我解决了,我会将其作为答案发布在我的问题中。如果您找到相关信息,请告诉我。 - Kymer
目标级别是否激活了位码?您的项目中是否有任何静态库? - Nicolas Braun
在我的情况下,我正在使用项目(iOS + tvOS(每个3个目标))和一些使用CocoaPod的第三方库。我遇到了这个错误:“iTunes Store操作失败。无效的Mach-O格式。捆绑包“Project.app/Frameworks/SOCKit.framework”中的Mach-O与主捆绑包中的Mach-O不一致。主捆绑包Mach-O包含arm64(机器码),而嵌套捆绑包Mach-O包含arm64(位码)。请验证平台的所有目标的ENABLE_BITCODE构建设置具有一致的值。” - Gajendra Rawat
@NicolasBraun:是的,位代码已在目标级别启用。请查看我的编辑帖子以查看链接库列表。这可能是与某个(旧的)依赖项的兼容性问题吗? - Kymer
你使用AdHoc / AppStore的Provisioning Profile来归档项目吗? - Sven Driemecker
2个回答

1
经过一些尝试和Sven Drielecker(以及其他人)的有益建议,问题已经得到解决。 GCC_INSTRUMENT_PROGRAM_FLOW_ARCS构建设置在调试发布构建中都设置为YES。将其关闭后,问题得到了解决。

0
我尝试复现你的问题但是没有成功。根据缺失符号的命名,它们似乎与代码覆盖率有关。你可以尝试在项目中禁用所有与代码覆盖相关的内容,然后重新归档和导出:

方案设置

enter image description here

目标构建设置: 输入图像描述


嘿,Sven,很抱歉这么晚才回复你。我尝试了你的建议,但是导出在同一步骤上仍然失败并显示相同的错误。 - Kymer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接