在 Cocoa Touch Framework 中包装静态库



我有一个胖静态库,有 2 个架构切片(armv7、arm64)。 我正在尝试让它与 swift 一起工作,并将其包装到 Cocoa Touch Framework 中。

我做什么:

  1. 创建可可触摸框架项目
  2. 拖动带有标题的静态库
  3. OTHER_LDFLAGS设置为-all_load
  4. ONLY_ACTIVE_ARCH设置为NO
  5. VALID_ARCHSARCHS设置为armv7arm64
  6. 使用发布生成配置生成
  7. 从 DerivedData/.. 获取 .framework 文件。/../产品/

当我将此.framework放入我的swift项目中,添加到目标常规设置中的嵌入式二进制文件部分,导入框架并使用其类之一时,我得到了undefined symbols for architecture arm64undefined symbols for architecture armv7

编辑:
不确定它是否有帮助,但我注意到静态库的大小约为 34MB,但生成的 .framework 的大小约为 12MB。

编辑2:
我在静态库和生成的动态库上运行了nm -arch arm64 -g myLibraryName。动态库不包含静态库具有的所有符号。似乎XCode构建过程剥离了很多。

我想你也忘了添加:

项目>目标>构建阶段->链接二进制文件与库: 添加 + 的:libz.dyliblibz.tbd(从Xcode 7开始,*.dylib文件是now *.tbd文件)

请务必同时清理文件夹:/User/yourname/Library/Developer/XCode/DerivedData

PS:如果需要,还应该能够通过添加参数 -lz 来添加构建设置"其他链接器标志"中的libz.tbd

最新更新