构建含SocketIO依赖的XCFramework后SPM引入崩溃问题求助
解决XCFramework+SPM依赖SocketIO启动崩溃问题
1. 排查XCFramework打包时的依赖嵌入
- 打包XCFramework前,确认你的框架目标的Embed & Sign设置里,SocketIO.framework是设为Embed & Sign,不是Do Not Embed。选后者的话,打包后的XCFramework不会包含SocketIO,用户安装后自然找不到这个库。
- 更推荐的做法是:不要在XCFramework里嵌入SocketIO,而是交给SPM来管理依赖,避免后续的重复链接或路径问题。
2. 修正SPM的Package.swift配置
- 你的Package.swift必须明确声明对SocketIO的依赖,这样SPM会自动帮用户拉取并链接SocketIO,不用靠你的XCFramework嵌入。示例配置如下:
let package = Package( name: "YourFrameworkName", platforms: [.iOS(.v13)], products: [ .library(name: "YourFrameworkName", targets: ["YourFrameworkName"]), ], dependencies: [ // 替换为SocketIO的官方SPM地址和适配的版本号 .package(url: "https://github.com/socketio/socket.io-client-swift.git", from: "16.0.0") ], targets: [ .target( name: "YourFrameworkName", dependencies: [ // 让你的框架直接依赖SocketIO的产品 .product(name: "SocketIO", package: "socket.io-client-swift") ]), .testTarget( name: "YourFrameworkNameTests", dependencies: ["YourFrameworkName"]), ] )
3. 验证用户侧的构建配置
- 让用户检查自己项目的Frameworks, Libraries, and Embedded Content里,你的SPM包和SocketIO是否都被正确添加,且SocketIO的嵌入方式是Embed & Sign。
- 确认用户项目的Runpath Search Paths包含
@executable_path/Frameworks和@loader_path/Frameworks——这是dyld查找rpath库的默认必要路径。
4. 重新发布修正后的SPM包
- 如果是Package.swift配置错了,改完后发布新版本,让用户更新到最新版即可。
- 如果是XCFramework打包时嵌入依赖的问题,重新打包不含SocketIO的XCFramework(靠SPM管理依赖),再上传发布。
内容的提问来源于stack exchange,提问作者Zubair Ismail
相关产品推荐
相关产品推荐

