我正在尝试为 iOS 应用程序制作一个动态框架。感谢新版本的 Xcode (6),我们可以在创建新项目时选择 Cocoa Touch 框架,而不再需要添加聚合目标、运行脚本等来创建一个项目。我构建框架时没有任何问题。但是当我尝试在 iOS 应用程序中使用它时,我遇到了一些架构问题。
ld: warning: ignoring file /Library/Frameworks/MyFramework.framework/MyFramework, file was built for x86_64 which is not the architecture being linked (arm64): /Library/Frameworks/MyFramework.framework/MyFramework
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_MyFrameworkWebService", referenced from:
objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ld: warning: ignoring file /Library/Frameworks/MyFramework.framework/MyFramework, file was built for x86_64 which is not the architecture being linked (armv7): /Library/Frameworks/MyFramework.framework/MyFramework
Undefined symbols for architecture armv7:
"_OBJC_CLASS_$_MyFrameworkWebService", referenced from:
objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
嗯,我尝试更改框架项目和目标的设置(架构和仅构建有效架构和有效架构)。我对 iOS 应用程序项目做了同样的事情,但没有任何效果。我想我有一些不明白的地方。
例如,当我构建一个仅用于 i386(iOS 模拟器)的框架时,使用命令行进行检查 “xcrun lipo -info MyFramework”,我有一个问题
ld:警告:忽略文件/Library/Frameworks/MyFramework.framework/MyFramework,文件是为 x86_64 构建的,这不是正在链接的架构(i386)...
如果有人可以帮助我获得一个适用于所有 iOS 架构(包括模拟器)的框架。
最佳答案
根据所有回复,post on raywenderlich.com和 gist创建者 Chris Conway我想出了this .
执行以下步骤,我能够构建一个 Cocoa Touch 框架(包括 Swift 和 Objective-C 文件),其中包含模拟器和设备的所有架构:
- 在框架项目中创建新的(聚合)目标
- 在“构建阶段”下选择“添加运行脚本”并复制 this file 的内容
- 在方案选择下拉列表中选择聚合目标
- 为聚合方案建立目标
希望有帮助:)
更新:修复了要点中的错误,其中步骤#3中的路径不正确。感谢Tokuriku !!
更新 在 Xcode 7 和 8 中,单击"file">“新建”>“目标...”,然后选择“其他”组以选择聚合目标
关于cocoa - Xcode 6 iOS 创建 Cocoa Touch 框架 - 架构问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24039470/