Xcode 8:存档构建失败(对于嵌套框架),链接错误。常规构建成功编译

时间:2016-09-20 23:21:44

标签: ios xcode frameworks swift3

修改 似乎已经深入研究了它在调试模式下构建但在发布模式下不构建的问题。仍然试图理解为什么它建立在一个而不是另一个

原始问题

我有一个具有以下结构的Xcode工作区。

工作区:

  1. UIProject
  2. FrameworkA
  3. FrameworkB
  4. FrameworkB嵌套在FrameworkA中,因此FrameworkA依赖于FrameworkB。两者都是我创建的自定义框架。

    它构建并编译好。当我尝试存档它时,我收到以下错误:

    Undefined symbols for architecture armv7:
      "ADI4ONS.Connection4ONS.connectionStat.getter : Swift.Bool", referenced from:
          type metadata for AircraftServices.connection in Connection.o
      "ADI4ONS.Connection4ONS.connectionStat.setter : Swift.Bool", referenced from:
          type metadata for AircraftServices.connection in Connection.o
      "ADI4ONS.Connection4ONS.connectionStat.materializeForSet : Swift.Bool", referenced from:
          type metadata for AircraftServices.connection in Connection.o
      "ADI4ONS.Connection4ONS.connectionString.getter : Swift.String", referenced from:
          type metadata for AircraftServices.connection in Connection.o
      "ADI4ONS.Connection4ONS.connectionString.setter : Swift.String", referenced from:
          type metadata for AircraftServices.connection in Connection.o
      "ADI4ONS.Connection4ONS.connectionString.materializeForSet : Swift.String", referenced from:
          type metadata for AircraftServices.connection in Connection.o
    ld: symbol(s) not found for architecture armv7
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    

    其中ADI4ONS是frameworkB,AircraftServices是FrameworkA。欢迎任何帮助。

    项目/目标配置

    1. 启用Bitcode
    2. 仅将Build Active Architecture设置为NO(尝试'是也是)
    3. Xcode 8 with swift 3.0
    4. 尝试实验 我试过的一些事情

      1. 尝试将Archive设置为Debug(而不是编辑架构中的默认版本):NO LUCK

      2. 为UIProject创建了一个单独的工作区,并将框架二进制文件导入其中。档案成功:工作量很大(但不是我想要的)

1 个答案:

答案 0 :(得分:3)

好的,经过大量的研究和实验,这是我的结果。

所以我想出了在Release模式构建中导致问题的参数。它是“Swift编译器 - 代码生成:优化级别”。它有三个值

  1. 无[-Onone]
    • debug的默认值
    • 也适用于我的发布。
  2. 快速,单文件优化[-O] -Works发布
    • 最有可能是我要设定的价值
  3. 快速,整体模块优化[-O -whole-module-optimization]
    • 发布的默认值
    • 这导致休息
  4. 我试图更多地研究WMO,但没有深入研究它。好像它是在Xcode 7中引入的。

    我的框架也都在Swift中。