带有iphoneos和iphonesimulator架构的iOS通用框架
xcodebuild可以构建一个项目,其中sdk设置为
iphoneos或
iphonesimulator,但不是两者都有,所以为了生成包含armv7 arm64和i386 x86_64架构的框架,我必须运行xcodebuild两次然后使用lipo将所有架构组合成1个通用二进制文件.我看到这样做的商业框架,但它导致了一个不正确的info.plist文件,因为它有一个字段CFBundleSupportedPlatforms,并且所有符号都指向它只包含1个值,例如CFBundleSupportedPlatforms =(“iPhoneSimulator”).
似乎不应该以这种方式使用lipo,因为它不受xcodebuld的正式支持.是否有更好的方法来构建包含所有体系结构的框架? 解决方法
我关注这个问题,但我想我有点疑惑你为什么要用一个仅限于模拟器的i386和x84_64切片来实现与你的开发版本相关的单个.framework.您是否偶然想要将框架分发给其他开发人员并希望使其在模拟器和设备上运行?
如果是这样,你使用lipo将设备的瘦二进制文件连接在一起,或者将模拟器的瘦二进制文件连接在一起,就可以了,但不应该尝试生成单个设备和模拟器框架. Apple自己使用SDK和Frameworks作为指南.在Xcode中,有两个不同的平台SDK – iPhoneOS.platform和iPhoneSimulator.platform,其中包含仅包含相关目标体系结构的切片的SDK: 您可以深入查看每个文件夹,并发现UIKit框架确实遵循每个平台的想法,并根据正在使用的SDK有条件地链接: 我进一步猜测你想拥有一个通用的全架构框架,这样消费开发人员就不必记住根据他们编译应用程序的方式将一个.framework文件换成另一个.framework文件.好消息是你可以使用条件链接标志来影响这一点,而无需进行文件系统交换! 当人们采用您的库时,部分设置应该是使用条件链接 – 在OTHER_LINKER_FLAGS选项中,您可以进行每个配置(调试,发布,Ad-Hoc等)构建设置,也可以使用每个架构或每个SDK特定设置: 要访问这些特定于SDK的设置,您需要单击要定制框架链接的每个构建配置旁边的.然后,您可以从下拉列表中选择适当的SDK,并为两个目标框架中的每一个添加链接器标志. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |