启用位代码时生成错误; ld:-bundle和-bitcode_bundle(Xcode设置ENABLE_BITCODE = YES)不能一起使用

时间:2019-06-03 09:14:28

标签: ios xcode bitcode

我有一个pod项目,其中包含一个演示pod用法的示例。在示例和Pod目标上,启用位码的设置均设置为yes。以下是示例的Podfile:

use_frameworks!
platform :ios, '10.0'

target 'MyPod_Example' do
  pod 'MyPod', :path => '../'

  target 'MyPod_Tests' do
    inherit! :search_paths


  end
end

示例应用程序在Simulator上运行良好,但是在尝试在iPhone 6S上运行时,出现以下构建错误:

  

ld:-bundle和-bitcode_bundle(Xcode设置ENABLE_BITCODE = YES)不能一起使用   clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)。

该如何解决? 我拥有的另一个项目具有相同的pod,但是从其回购中下载pod时,在启用了位码的iPhone上运行良好。下面显示了可以运行的应用程序的Podfile结构:

source '<my pod spec repo>'
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'

target 'MyPodTest' do

  use_frameworks!

  # Pods for MyPodTest
    pod 'MyPod'

  target 'MyPodTestTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'MyPodTestUITests' do
    inherit! :search_paths
    # Pods for testing
  end

end

1 个答案:

答案 0 :(得分:0)

在错误消息中描述了传递给-bitcode_bundle的{​​{1}}标志(“ Xcode设置ENABLE_BITCODE = YES”),但是没有ld标志,这可能造成混淆而且很难调试。

如果您查看此错误之前的行,您可能会看到两个重要的地方:

  • WriteAuxiliaryFile /用户/您的用户/库/开发人员/Xcode/DerivedData/YOURPROJECT-xxxxx/Build/Intermediates.noindex/YOURPROJECT.build/Release-SDK/TARGET.build/DerivedSources/TARGET _vers .c(位于项目“ YOURPROJECT”中的目标“ TARGET”中)
  • CompileC /用户/您的用户/库/开发人员/Xcode/DerivedData/YOURPROJECT-xxxxx/Build/Intermediates.noindex/YOURPROJECT.build/Release-SD/TARGET.build/Objects-normal/arm64/TARGET_vers .o /Users/YOURUSER/Library/Developer/Xcode/DerivedData/YOURPROJECT-xxxxx/Build/Intermediates.noindex/YOURPROJECT.build/Release-SDK/TARGET.build/DerivedSources/TARGET_vers.c正常arm64 c com .apple.compilers.llvm.clang.1_0.compiler(位于项目“ YOURPROJECT”的目标“ TARGET”中)

这两行是您问题的实质。您的捆绑包以前没有二进制文件(只有PNG,XIB和其他资源),现在有了二进制文件。 Xstrong 创建的一个。由于此二进制文件是作为资源包目标的一部分创建的,因此使用-bundle标志将其编译为CFBundleExecutable,该标志与-bundle不兼容。但是,除了禁用位码之外,您还应该首先避免生成此二进制文件。

此二进制文件是由Apple Generic Versioning创建的。要摆脱它,请转到构建设置选项卡(在资源包目标上),单击“所有”按钮以查看所有设置,然后搜索“版本系统”。将其从“ Apple Generic”更改为“ None”。 资源包不正确支持版本控制。