You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单项目同时使用Swift Package Manager与CocoaPods的iOS模拟器编译异常问题

解决M1设备上SPM+CocoaPods混合时模拟器编译找不到模块的问题

我之前在M1 Mac上折腾SPM和CocoaPods共存的时候,也碰到过几乎一模一样的模拟器编译报错问题,给你几个亲测有效的解决思路:

1. 给SPM Package添加模拟器架构排除配置

既然你的CocoaPods依赖靠排除arm64解决了类似问题,那把同样的逻辑应用到你的SPM Package上试试。打开你的Package.swift,在target的buildSettings里添加针对模拟器的架构排除:

let package = Package(
    name: "CoreKit",
    platforms: [.iOS(.v14)], // 替换成你的项目最低支持版本
    products: [
        .library(name: "CoreKit", targets: ["CoreKit"]),
    ],
    targets: [
        .target(
            name: "CoreKit",
            buildSettings: [
                "EXCLUDED_ARCHS[sdk=iphonesimulator*]": "arm64"
            ]
        ),
        // 测试target如果也有问题,同样加上这个配置
        .testTarget(
            name: "CoreKitTests",
            dependencies: ["CoreKit"],
            buildSettings: [
                "EXCLUDED_ARCHS[sdk=iphonesimulator*]": "arm64"
            ]
        ),
    ]
)

2. 统一项目和Target的架构排除设置

有时候项目级别的配置会覆盖Target的设置,你可以这么操作:

  • 打开Xcode,选中你的项目文件(不是单个Target)
  • 切换到Build Settings标签,搜索Excluded Architectures
  • 点击+号,添加Any iOS Simulator SDK,然后设置值为arm64
  • 确保所有Target的Excluded Architectures设置是$(inherited),这样会继承项目的配置

3. 彻底清理缓存并重置环境

M1设备上的编译缓存经常会搞出奇怪的问题,试试这套组合拳:

  • 删除Derived Data:Xcode顶部菜单选择Xcode > Preferences > Locations,点击Derived Data旁边的箭头打开文件夹,删除里面的所有内容
  • 执行命令重新安装Pods:
    pod deintegrate
    pod install
    
  • 重启Xcode和iOS模拟器,然后Clean Build Folder(快捷键Cmd+Shift+K)再重新编译

4. 检查CoreKit的依赖兼容性

如果上面的方法都没用,那得确认你的CoreKit Package有没有依赖只支持真机架构的第三方库。有些老的闭源库可能没有提供x86_64和arm64的模拟器架构,这种情况下你需要替换依赖,或者联系库作者更新架构支持。

另外注意:不要同时移除Podfile里的arm64排除配置,因为你的CocoaPods依赖大概率还是需要这个设置的,应该让Podfile的配置和SPM的配置同时生效,这样两边的依赖都能兼容M1模拟器的架构。

内容的提问来源于stack exchange,提问作者Robert Clegg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 17:29:07