如何在 M1 mac 上构建一个支持 Intel mac 上的 iOS 模拟器的静态库?

问题描述

我有一个胖 iOS 库,它支持真实设备 (arm64...) 和 Intel Mac (x86_64) 的 iOS 模拟器。但是当我切换到 M1 mac 时,事情变得艰难。

如果我使用旧库,我将失败并显示错误 xxx.a (xxx.o) building for iOS Simulator,but linking in object file built for iOS,file 'xxx' for architecture arm64。看来我必须构建一个 xcframework,其中包含针对不同目的地的二进制文件

所以我尝试构建不同的切片,并希望将它们捆绑为一个 xcframework。但我终于发现我不知道如何用 M1 Mac 构建 x86_64 切片。

我的问题是

  • 如何在 M1 mac 上构建一个支持 Intel Mac 的 iOS 模拟器的静态库?
  • 还是我一开始的想法就错了?

解决方法

我未能在 M1 Mac 上获得 x86_64 切片的原因是我的构建设置中有一个遗留选项:有效架构。

删除此配置并运行标准流程。然后就可以顺利得到包含x86_64架构的库了。

xcodebuild archive --destination="generic/platform=iOS Simulator" ...

如果您的库代码不是作为 Xcode 项目组织的,而是在下面使用了 clang 工具链。你可以参考这个link。简而言之,以 arm64-apple-ios14.3-simulator 之类的格式指定目标