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

Swift纯库Package归档为空,如何编译为.xcframework?

如何将纯Swift Package编译为Framework/XCFramework

问题原因

  • 纯SPM库的归档逻辑与Xcode项目不同,归档产物默认存放在xcarchive的Products/Library/Frameworks目录下,而非根目录,容易误以为是空归档
  • 未正确指定BUILD_LIBRARY_FOR_DISTRIBUTION=YES参数时,不会生成模块映射(.swiftmodule)等分发必需的文件,仅产出二进制文件
  • 未在Package.swift中配置资源目录时,资源不会被打包进framework

解决步骤

1. 确认Package.swift配置正确

确保你的库target为library类型,若包含资源需明确声明:

// Package.swift
let package = Package(
    name: "MyPackage",
    products: [
        .library(
            name: "MyPackage",
            targets: ["MyPackage"]),
    ],
    targets: [
        .target(
            name: "MyPackage",
            resources: [
                // 根据实际资源类型选择process或copy
                .process("Resources"),
                .copy("Assets/Logo.png")
            ]
        ),
        .testTarget(
            name: "MyPackageTests",
            dependencies: ["MyPackage"]),
    ]
)

2. 为目标平台单独归档

使用xcodebuild archive命令为每个平台(如iOS设备、iOS模拟器)生成归档,必须指定BUILD_LIBRARY_FOR_DISTRIBUTION=YES和SKIP_INSTALL=NO:

归档iOS设备版本

xcodebuild archive \
  -scheme MyPackage \
  -destination "generic/platform=iOS" \
  -archivePath "./build/ios.xcarchive" \
  -sdk iphoneos \
  BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
  SKIP_INSTALL=NO

归档iOS模拟器版本

xcodebuild archive \
  -scheme MyPackage \
  -destination "generic/platform=iOS Simulator" \
  -archivePath "./build/iossimulator.xcarchive" \
  -sdk iphonesimulator \
  BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
  SKIP_INSTALL=NO

3. 合并归档为XCFramework

用xcodebuild -create-xcframework将多个平台的framework合并为通用的XCFramework:

xcodebuild -create-xcframework \
  -framework "./build/ios.xcarchive/Products/Library/Frameworks/MyPackage.framework" \
  -framework "./build/iossimulator.xcarchive/Products/Library/Frameworks/MyPackage.framework" \
  -output "./build/MyPackage.xcframework"

4. Xcode GUI方式补充

若使用Xcode GUI归档:

  • 直接打开Package.swift文件进入Xcode
  • 选择对应的scheme和目标平台,执行归档操作
  • 归档完成后,右键对应归档文件 → 显示包内容
  • 从Products/Library/Frameworks目录中提取生成的framework,后续可手动合并为XCFramework

验证结果

生成的XCFramework包含各平台的二进制、模块映射文件及资源,可通过SPM的binaryTarget引入,或直接嵌入到Xcode项目中使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 22:27:31