为依赖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
相关产品推荐
相关产品推荐

