如何创建包含SPM依赖的二进制XCFramework?
能否生成包含SPM依赖的二进制XCFramework?
可以生成包含SPM依赖的二进制XCFramework,但需要调整编译配置和归档流程来解决你遇到的依赖缺失问题。
核心问题分析
你遇到的矛盾点本质是:
BUILD_LIBRARY_FOR_DISTRIBUTION=YES是苹果官方要求的可分发二进制框架必备配置,否则生成的框架无法在其他项目中正常复用- 依赖找不到的问题,是因为默认情况下SPM依赖以动态链接方式引入,而你的框架未将这些依赖静态嵌入到最终的XCFramework中
解决方案步骤
1. 调整框架编译配置
打开Xcode项目,修改框架Target的Build Settings:
- 设置
BUILD_LIBRARY_FOR_DISTRIBUTION为YES - 设置
MACH_O_TYPE为staticlib(静态库),这样SPM依赖会被静态链接到你的框架中,避免分发时出现依赖缺失 - 若框架使用Swift编写,确保
EMBEDDED_CONTENT_CONTAINS_SWIFT设为YES
2. 重新执行归档命令
归档时明确指定发布配置,并确保框架被正确安装到归档目录:
xcodebuild archive -project frameworkPOC.xcodeproj -scheme frameworkPOC -destination "generic/platform=iOS" -configuration Release -archivePath "archives/frameworkPOC" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES
-configuration Release:用发布配置编译,避免调试符号干扰分发SKIP_INSTALL=NO:强制将编译后的框架归档到Products/Library/Frameworks目录,这是生成XCFramework的必要路径
3. 生成XCFramework
执行原有创建命令即可,此时归档的框架已包含SPM依赖的静态符号:
xcodebuild -create-xcframework -archive archives/frameworkPOC.xcarchive -framework frameworkPOC.framework -output xcframeworks/frameworkPOC.xcframework
4. 验证依赖是否嵌入
用nm命令检查生成的框架是否包含Alamofire的符号:
nm -U xcframeworks/frameworkPOC.xcframework/ios-arm64/frameworkPOC.framework/frameworkPOC | grep Alamofire
若输出相关符号,说明依赖已成功嵌入。
额外注意事项
- 若需支持多平台(如iOS、iOS Simulator),需分别为每个平台执行归档命令,再用
-create-xcframework合并多个归档的框架 - 如果必须使用动态框架(
MACH_O_TYPE=dynamiclib),则需要将Alamofire也单独打包成XCFramework,分发时同时提供两个框架,使用时需同时引入 - 优先选择静态库方式打包,可避免依赖分发的额外复杂度
内容的提问来源于stack exchange,提问作者Fred Novack
相关产品推荐
相关产品推荐

