我对如何使用最新的Xcode 6和iOS 8环境创建通用框架的信息感到有些困惑。例如,this answer包括以下内容:
If you need to create universal static library that runs on both simulator and devices, then general steps are:
1. Build library for simulator
2. Build library for device
3. Combine them using lipo
lipo -create -output "framework-test-01-universal" "Debug-iphonesimulator/framework-test-01.framework/framework-test-01" "Debug-iphoneos/framework-test-01.framework/framework-test-01" Note that framework-test-01 is my framework project name.
我的一位同事遵循这些说明并构建了一个可执行文件。好吧,我不认为这就是我要找的东西。它包含一个如下所示的结构:
稍后,另一个答案here讨论了如何使用构建阶段运行脚本创建聚合目标,这是我在之前版本的Xcode中熟悉的内容。当我使用这个过程时,我收到了我期待的东西。文件夹结构如下:
有人可以帮助解决我们遇到的这种困惑吗?
两者有什么区别?
我的意思是,第一个创建可以在模拟器和设备上运行的应用程序的过程,而第二个过程是创建一个胖的静态库?
答案 0 :(得分:3)
重要的区别在于库和框架之间。该框架只是一个特定的文件夹结构,包含您的库和标题。
lipo结合库。因此,指令有一个示例执行,它引用了您已经构建的框架内的库(一次用于iphoneos,一次用于模拟器)。框架之间的唯一区别是库,因此通过使用lipo来组合库,您将获得一个胖(或更胖)库以及所有受支持的框架。
第一个链接的答案告诉您如何创建框架和应用程序。只关心框架部分。使用不同的目标(iOS设备和模拟器)构建框架两次。确保“仅构建活动体系结构”设置为“否”。您可能希望构建版本而不是调试,但这取决于您的特定需求。
答案 1 :(得分:1)
你太接近正确答案了。 你唯一需要做的就是
将“framework-test-01-universal”重命名为“framework-test-01”(原始名称不带后缀) - 这很重要!
进入其中一个* .frameworks(例如,在Debug-ios
文件夹中)并将库替换为新的“framework-test-01”库。
多数民众赞成!
./Debug-ios/framework-test-01.framework
- 是现成的胖二进制文件!您可以将其导入项目中!
点击此处查看我的答案,了解更多详情:How to export "fat" Cocoa Touch Framework (for Simulator and Device)?