在Cocoa Touch Framework中包装静态库

tai*_*lec 12 xcode cocoa-touch objective-c ios swift

我有一个带有2个架构片的胖静态库(armv7,arm64).我正在尝试使用swift并将其包装到Cocoa Touch Framework中.

我所做的:

  1. 创建Cocoa Touch Framework项目
  2. 使用标题拖动.a静态库
  3. 设置OTHER_LDFLAGS-all_load
  4. 设置ONLY_ACTIVE_ARCHNO
  5. 设置VALID_ARCHSARCHSarmv7arm64
  6. 使用Release构建配置构建
  7. 从DerivedData获取.framework文件/../../产品/

当我把这个.framework放到我的swift项目中时,在我的目标常规设置中添加嵌入式二进制文件部分,导入框架并使用其中一个类,我得到undefined symbols for architecture arm64或者undefined symbols for architecture armv7.

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

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

Ale*_*ano 3

我想你也忘记添加:

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

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

PS:如果您愿意,您还应该能够通过添加参数 -lz在构建设置中添加“其他链接器标志”libz.tbd