gpt4 book ai didi

具有 iphoneos 和 iphonesimulator 架构的 iOS 通用框架

转载 作者:可可西里 更新时间:2023-11-01 03:55:49 27 4
gpt4 key购买 nike

xcodebuild 可以构建一个 sdk 设置为 iphoneosiphonesimulator 但不能同时设置的项目,所以为了生成包含 armv7 arm64i386 x86_64 架构,我必须运行 xcodebuild 两次,然后使用 lipo 将所有架构组合成1 通用二进制文件。我看到这样做的商业框架,但它导致了一个不正确的 info.plist 文件,因为它有一个字段,CFBundleSupportedPlatforms 并且所有迹象都指向它只包含 1 个值,例如, CFBundleSupportedPlatforms = ( "iPhoneSimulator")

似乎 lipo 不应该以这种方式使用,因为 xcodebuld 没有正式支持它。有没有更好的方法来构建一个包含所有架构的框架?

最佳答案

我回答了这个问题,但我想我有点困惑,为什么你要用仅与你的开发构建相关的仅模拟器 i386 和 x84_64 切片不必要地膨胀单个 .framework .您是否偶然想将框架分发给其他开发人员并希望使其在模拟器和设备上运行?

如果是这样,那么您使用 lipo 将设备的精简二进制文件连接在一起或将模拟器的精简二进制文件连接在一起是正确的,但不应该尝试生成一个设备和模拟器框架。 Apple 自己对 SDK 和框架的使用在此作为指南。在 Xcode 中,有两个不同的平台 SDK——iPhoneOS.platform 和 iPhoneSimulator.platform,它们包含的 SDK 仅包含相关目标架构的切片:

Xcode's Platform Options

您可以深入了解这些文件夹中的每一个,并发现 UIKit 框架确实遵循每个平台的想法,并且根据正在使用的 SDK 有条件地链接:

UIKit Lipo

我进一步猜测您希望拥有一个通用的、全架构的框架,以便开发人员不必记住根据他们编译应用程序的方式将一个 .framework 文件换成另一个。好消息是您可以使用条件链接标志来影响这一点,而无需进行文件系统交换!

当人们采用您的库时,设置的一部分应该是使用条件链接——在 OTHER_LINKER_FLAGS 选项中,您可以根据配置(调试、发布、临时等)build设置,也可以有每个架构或每个 SDK 的特定设置:

Other Linker Flags

要访问这些特定于 SDK 的设置,您需要点击每个要自定义定制框架链接的构建配置旁边的 +。然后,您可以从下拉列表中选择适当的 SDK,并为两个目标框架中的每一个添加链接器标志。

关于具有 iphoneos 和 iphonesimulator 架构的 iOS 通用框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31575580/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com