混淆了在Xcode 6中创建胖静态库的不同过程

时间:2014-11-25 20:30:06

标签: cocoa cocoa-touch ios8 xcode6 ios-universal-framework

我对如何使用最新的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.

我的一位同事遵循这些说明并构建了一个可执行文件。好吧,我不认为这就是我要找的东西。它包含一个如下所示的结构:

enter image description here

稍后,另一个答案here讨论了如何使用构建阶段运行脚本创建聚合目标,这是我在之前版本的Xcode中熟悉的内容。当我使用这个过程时,我收到了我期待的东西。文件夹结构如下:

enter image description here

有人可以帮助解决我们遇到的这种困惑吗?

两者有什么区别?

我的意思是,第一个创建可以在模拟器和设备上运行的应用程序的过程,而第二个过程是创建一个胖的静态

2 个答案:

答案 0 :(得分:3)

重要的区别在于框架之间。该框架只是一个特定的文件夹结构,包含您的库和标题。

lipo结合。因此,指令有一个示例执行,它引用了您已经构建的框架内的库(一次用于iphoneos,一次用于模拟器)。框架之间的唯一区别是库,因此通过使用lipo来组合库,您将获得一个胖(或更胖)库以及所有受支持的框架。

第一个链接的答案告诉您如何创建框架和应用程序。只关心框架部分。使用不同的目标(iOS设备和模拟器)构建框架两次。确保“仅构建活动体系结构”设置为“否”。您可能希望构建版本而不是调试,但这取决于您的特定需求。

答案 1 :(得分:1)

你太接近正确答案了。 你唯一需要做的就是

  1. 将“framework-test-01-universal”重命名为“framework-test-01”(原始名称不带后缀) - 这很重要!

  2. 进入其中一个* .frameworks(例如,在Debug-ios文件夹中)并将库替换为新的“framework-test-01”库。

  3. 多数民众赞成! ./Debug-ios/framework-test-01.framework - 是现成的胖二进制文件!您可以将其导入项目中!

    点击此处查看我的答案,了解更多详情:How to export "fat" Cocoa Touch Framework (for Simulator and Device)?