比特码是否支持弱链接第三方框架?

时间:2019-11-07 01:23:24

标签: ios frameworks llvm bitcode weak-linking

问题仅在标题中说明。这是我的设置:

构建一个动态框架,该框架可以有选择地链接(弱链接)至GoogleInteractiveMediaAds.framework。对于使用我的框架的应用,GoogleInteractiveMediaAds是一个可选的依赖项,如果没有它,该框架也可以正常工作。目前正在工作。

但是,尝试从位码重建时会出现问题,如在导出选择“从位码重建”的Ad Hoc构建时通常会发生的问题。位码编译过程失败,并显示以下信息:

function CreateEvent() {

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('functionSheet');
  var eventCal = CalendarApp.getCalendarById('name@email.com');
  var lr = spreadsheet.getLastRow();
  var count = spreadsheet.getRange("A2:N"+lr+"").getValues();

    for (x=0; x<count.length; x++) {

      var shift = count[x];

      var summary = shift[2];
      var startTime = shift[7];
      var endTime = shift[8];
      var guests = shift[1];
      var description = shift[3];
      var location = shift[5];   
      var event = {
          'location': location,
          'description': description,
          'guests':guests +',',
          'sendInvites': 'True',
      }

      eventCal.createEvent(summary, startTime, endTime, event)
  }


}

深入查看日志文件,我发现了错误描述:

ipatool failed with an exception: #<CmdSpec::NonZeroExitException: $/Applications/Xcode.app/Contents/Developer/usr/bin/bitcode-build-tool ...

注意:GoogleInteractiveMediaAds.framework确实包含位码。

显然,通过不选择“从位码重建”来避免此错误。如果我要回答自己的问题,我会说,不,看起来从位代码进行编译时,您不能使用弱链接框架。仅因为位码编译步骤试图链接到应用程序目标中未包含的框架这一事实。但是,我无法使用弱链接与位码来找到任何官方文档,也无法找到有关它的任何相关StackOverflow答案,因此我不确定是否丢失了某些内容或是否存在一些相关的编译器/链接器设置我想让它正常工作。

1 个答案:

答案 0 :(得分:3)

就您而言,您需要等待框架本身的修复。

我们在分发我们的框架时遇到了类似的问题,我描述了 here,我只是不想分享我们的调查结果,因为似乎没有人发布他们的结果。

没有位码就不需要分发。长话短说,其中包含 LLVM 检测,这会阻止 AppStore 处理。我写了一篇关于 XCode 12 and BigSur issues with XCFramework 的完整博客。

总而言之,在创建 XCFramework 以进行分发时,需要执行以下几个必要步骤:

  • 使用归档构建是必须,发布构建是不够的
  • BUILD_LIBRARY_FOR_DISTRIBUTION 必须设置为 YES
  • SKIP_INSTALL 必须设置为 NO
  • GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO 关闭 GCC 检测并将其从二进制文件中删除
  • CLANG_ENABLE_CODE_COVERAGE = NO 从二进制文件中关闭代码覆盖工具

上述所有内容有助于解决我们的准备和分发问题,如果您碰巧遇到与我们相同的问题,希望可以为您节省一些时间。