使用 Xcode 9 编译框架

Compile framework with Xcode 9

当我使用 Xcode 8 编译框架并在新项目中导入后,它成功构建并且我能够测试它。但是当我用 Xcode 9 编译框架,然后在新项目中添加构建的框架时,我得到:

Undefined symbols for architecture arm64:
  "___llvm_profile_runtime", referenced from:
      ___llvm_profile_runtime_user in xxxxxxxxx(DMCService.o)
      ___llvm_profile_runtime_user in xxxxxxxx(APXUserInterfacePresentor.o)
      ___llvm_profile_runtime_user in xxxxxxxxx(APXDevice.o)
      ___llvm_profile_runtime_user in xxxxxxxxx(APXInboxService.o)
      ___llvm_profile_runtime_user in xxxxxxxxx(AppoxeeManager.o)
      ___llvm_profile_runtime_user in xxxxxxxxx(APXApplicationSession.o)
      ___llvm_profile_runtime_user in xxxxxxxxx(APXInbox.o)
      ...
     (maybe you meant: ___llvm_profile_runtime_user)
ld: symbol(s) not found for architecture arm64

我用 -lipo -info 架构检查构建的框架,它有 arm64。 只有当我为真实设备构建框架时才会发生这种情况,如果我为模拟器构建它,它就可以正常工作。所以我不明白为什么它不起作用?

在此先感谢您的帮助。

您的框架构建配置可能已将设置 "Enable Code Coverage Support"(基础设置名称为 CLANG_ENABLE_CODE_COVERAGE)设置为 YES,而在包含框架的应用程序中,相同的设置设置为 NO . 为什么这会导致未定义的符号错误:启用该设置会导致对检测函数的调用被注入到框架代码中。但是在构建应用程序时,没有链接定义这些函数的库。因此链接器 (ld) 失败。

再试一次,将“启用代码覆盖支持”设置为“否”来构建框架。

此外,为避免此类配置不匹配错误,您可能希望同时构建应用程序和框架,而不是分别预先构建框架。为此,您可以将框架项目作为应用项目的子项目,或者创建一个包含应用项目和框架项目的 Xcode 工作区。