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

M1设备Swift Package引入RealmSwift遇x86_64架构匹配问题求助

问题解决方案

一、RealmSwift作为SP引入的架构不匹配问题

核心原因

你全局排除了arm64模拟器架构,但RealmSwift的SP包默认适配arm64/x86_64双架构,导致项目构建x86_64目标时,找不到对应架构的RealmSwift模块。

解决方法

  • 拆分架构排除范围
    不要在项目级别全局设置Excluded Architectures,仅给那个仅支持x86_64的Kotlin多平台框架的Target单独设置排除arm64。主项目和RealmSwift的Target保持默认架构设置,这样主项目可通过Rosetta运行x86_64的Kotlin框架,同时正常使用arm64的RealmSwift。

  • 强制RealmSwift构建x86_64版本
    如果必须全局排除arm64,可在Xcode中选中RealmSwift的Swift Package,进入它的Build Settings:

    1. 找到Valid Architectures,添加x86_64;
    2. 找到Excluded Architectures,清空或确保不排除x86_64;
    3. 清理Derived Data(执行命令 rm -rf ~/Library/Developer/Xcode/DerivedData),重启Xcode后重新构建。
  • 本地引入RealmSwift源码作为SP
    下载RealmSwift对应版本的源码,本地添加为Swift Package,手动调整它的架构编译参数,确保生成x86_64架构的模块。

二、创建依赖现有Pod框架的自定义Swift Package

方案1:将Pod框架打包为XCFramework后引入

这是最规范的方式,步骤如下:

  1. 找到对应Pod的.podspec文件,执行命令打包为XCFramework:
    pod package YourPodName.podspec --force --library --xcframework
    
  2. 在自定义SP的Package.swift中,添加binary target引入该XCFramework:
    let package = Package(
        name: "YourCustomSP",
        products: [
            .library(name: "YourCustomSP", targets: ["YourCustomSP"]),
        ],
        targets: [
            .target(
                name: "YourCustomSP",
                dependencies: [
                    .target(name: "YourPodFramework")
                ]
            ),
            .binaryTarget(
                name: "YourPodFramework",
                path: "./path/to/YourPodFramework.xcframework"
            )
        ]
    )
    

方案2:直接链接Pod的静态/动态库

如果不想打包XCFramework,可直接处理Pod的产物:

  • 静态库(.a/.framework):
    在Package.swift的target中添加链接设置和头文件路径:
    .target(
        name: "YourCustomSP",
        linkerSettings: [
            .linkedFramework("YourPodFramework"),
            .unsafeFlags(["-L", "./path/to/pod/framework/binary"]),
            .unsafeFlags(["-I", "./path/to/pod/framework/headers"])
        ]
    )
    
  • 动态库(.framework):
    把动态库加入SP的resources,设置复制规则,同时在linkerSettings中链接:
    .target(
        name: "YourCustomSP",
        resources: [
            .copy("./path/to/YourPodFramework.framework")
        ],
        linkerSettings: [
            .linkedFramework("YourPodFramework")
        ]
    )
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:55:22