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

Xcode 14.1模拟器排除arm64致iOS14+ SPM链接错误求解决方案

问题分析与解决方案

为什么仅iOS14+版本出现链接错误?

核心原因是Apple Silicon Mac模拟器的架构支持差异:

  • iOS13及以下的模拟器不支持arm64架构,即使项目排除arm64,Xcode也只会编译x86_64版本代码,Kingfisher等SPM依赖会自动匹配生成对应架构的二进制,因此链接正常。
  • iOS14及以上的模拟器原生支持arm64架构,当项目全局排除arm64后,Xcode会强制以x86_64架构构建。但Xcode 14.1的SPM在处理iOS14+模拟器目标时,默认会同时生成arm64和x86_64的依赖二进制,此时链接器尝试寻找x86_64版本的Kingfisher符号,却因SPM构建逻辑的适配问题,导致该版本符号未被正确生成或引用,最终触发链接错误。

如何避免链接错误?

方案1:仅针对旧版库单独排除arm64

不要在项目全局设置EXCLUDED_ARCHS,只给那些无法提供arm64模拟器架构的旧版xcframework对应的target设置:

  1. 打开Xcode,选中旧版库的target(而非主项目target)
  2. 进入Build Settings,搜索Excluded Architectures
  3. 添加条件sdk=iphonesimulator*,对应值设为arm64
    既解决旧库的兼容问题,又不影响SPM依赖的正常架构匹配。

方案2:给架构排除规则添加版本条件

如果必须全局设置排除,可通过条件限制仅针对iOS13及以下模拟器生效:

  1. 选中主项目target的Build Settings
  2. 找到Excluded Architectures,点击+号添加复合条件:sdk=iphonesimulator*且os=ios <14.0
  3. 将该条件对应的值设为arm64
    这样iOS14+模拟器不会排除arm64,能正常链接SPM依赖的arm64版本符号。

方案3:强制SPM依赖编译x86_64版本(调试阶段用)

在项目的Package.swift中,为Kingfisher等依赖指定编译架构:

dependencies: [
    .package(url: "https://github.com/onevcat/Kingfisher.git", from: "7.0.0")
],
targets: [
    .target(
        name: "YourTarget",
        dependencies: ["Kingfisher"],
        swiftSettings: [
            .unsafeFlags(["-arch", "x86_64"], .when(platforms: [.iOS], configuration: .debug))
        ]
    )
]

注意:该方法仅建议在调试阶段使用,发布版本建议保持默认架构设置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:13:27