在Cocoa Touch Framework中包装静态库
我有一个带有2个架构片的胖静态库(armv7,arm64)。 我正在尝试使用swift并将其包装到Cocoa Touch Framework中。
我做的事:
- 创建Cocoa Touch Framework项目
- 使用标题拖动.a静态库
- 将
OTHER_LDFLAGS
设置为-all_load
- 将
ONLY_ACTIVE_ARCH
设置为NO
- 将
VALID_ARCHS
和ARCHS
设置为armv7
和arm64
- 使用Release构建配置构建
- 从DerivedData /../../产品/获取.framework文件
当我把这个.framework放到我的swift项目中时,在我的目标常规设置中添加嵌入式二进制文件部分,导入框架并使用其中一个类,我得到undefined symbols for architecture arm64
undefined symbols for architecture armv7
或undefined symbols for architecture arm64
undefined symbols for architecture armv7
。
编辑:
不确定它是否有帮助,但我注意到静态库的大小约为34MB,但生成的.framework的大小约为12MB。
编辑2:
我在静态库和生成的动态库上运行了nm -arch arm64 -g myLibraryName
。 动态库不包含静态库具有的所有符号。 看起来像XCode构建过程剥离了很多。
我想你也忘了添加:
项目 – > 目标 – > 构建阶段 – > 链接二进制文件库 :添加+: libz.dylib
或libz.tbd
(从Xcode 7开始, *.dylib
文件now *.tbd
文件)
一定要清理文件夹: /User/yourname/Library/Developer/XCode/DerivedData
PS:如果你想要,你也应该能够通过添加参数-lz从Build Settings中的“Other Linker Flags”添加libz.tbd。