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

为依赖PubNub的Swift Package制作XCFramework及依赖配置问题

解决Swift Package依赖PubNub时生成XCFramework的依赖问题

核心问题原因

XCFramework本身不会自动打包Swift Package中声明的远程依赖(比如PubNub),swift-create-xcframework这类工具默认也只会处理你的Package自身代码,不会主动拉取并嵌入第三方依赖框架,这就是导入Xcode后出现PubNub相关错误的原因。

解决步骤

1. 手动构建PubNub的XCFramework

首先需要把PubNub SDK打包成XCFramework:

  • 克隆PubNub仓库并切换到指定版本:
    git clone https://github.com/pubnub/swift.git
    cd swift
    git checkout 7.0.0 # 或你需要的更高版本tag
    
  • 用命令行多平台归档并生成XCFramework:
    # 构建iOS设备版本
    xcodebuild archive -scheme PubNub -destination "generic/platform=iOS" -archivePath ./build/PubNub-iOS.xcarchive SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES
    
    # 构建iOS模拟器版本
    xcodebuild archive -scheme PubNub -destination "generic/platform=iOS Simulator" -archivePath ./build/PubNub-iOSSimulator.xcarchive SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES
    
    # 合并生成XCFramework
    xcodebuild -create-xcframework -framework ./build/PubNub-iOS.xcarchive/Products/Library/Frameworks/PubNub.framework -framework ./build/PubNub-iOSSimulator.xcarchive/Products/Library/Frameworks/PubNub.framework -output ./build/PubNub.xcframework
    
    执行完成后,你会在./build目录下得到PubNub.xcframework。

2. 调整自己的Swift Package配置

把刚生成的PubNub.xcframework放到你的Package目录下,比如新建Frameworks文件夹存放它,然后修改Package.swift:

// swift-tools-version: 5.9
import PackageDescription

let package = Package(
    name: "YourPackageName",
    platforms: [.iOS(.v15)], // 根据你的需求调整
    products: [
        .library(
            name: "YourPackageName",
            targets: ["YourPackageName"]),
    ],
    dependencies: [
        // 注释掉原来的远程PubNub依赖
        // .package(url: "https://github.com/pubnub/swift.git", from: "7.0.0")
    ],
    targets: [
        .target(
            name: "YourPackageName",
            path: "Sources",
            linkerSettings: [
                // 链接本地的PubNub XCFramework
                .linkedFramework("PubNub", path: "./Frameworks/PubNub.xcframework")
            ]
        ),
        .testTarget(
            name: "YourPackageNameTests",
            dependencies: ["YourPackageName"],
            linkerSettings: [
                .linkedFramework("PubNub", path: "./Frameworks/PubNub.xcframework")
            ]
        ),
    ]
)

3. 生成包含依赖的XCFramework

现在使用swift-create-xcframework生成你的Package的XCFramework,生成后需要同时提供你的XCFramework和PubNub.xcframework给目标项目。

4. 导入Xcode项目后的配置

将两个XCFramework都添加到目标Xcode项目中:

  • 把你的XCFramework和PubNub.xcframework拖入项目的Frameworks, Libraries, and Embedded Content中
  • 确保两者的Embed选项都设置为Embed & Sign

这样就能保证项目在运行时能找到PubNub的依赖,解决之前的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:01:26