我正在尝试创建一个二进制xcframework,我希望它有一些SPM依赖。这可能吗?
到目前为止,我面临的问题是,我不能导出带有依赖项的框架,因为BUILD_LIBRARY_FOR_DISTRIBUTION标志必须为 * 才能使依赖项工作。但在这种情况下,我将无法生成二进制文件。
这就是我想做的
1.添加SPM作为依赖项:
1.使用xcodebuild归档:
xcodebuild archive -project frameworkPOC.xcodeproj -scheme frameworkPOC -destination“generic/platform=iOS”-archivePath“archives/frameworkPOC”
1.通过以下方式生成二进制文件:
xcodebuild -xcframework-archive archives/frameworkPOC.xcarchive -frameworkPOC.framework -output xcframeworks/frameworkPOC.xcframework
到目前为止一切都很好.导出的框架工作正常.但如果我添加一个SPM,如Alamofire,我得到这个警告:x1c 0d1x
当我将BUILD_LIBRARY_FOR_DISTRIBUTION设置为YES导出时,框架被破坏,因为似乎找不到Alamofire。
所以回到我的问题:是否有可能生成一个包含SPM依赖的二进制框架?
1条答案
按热度按时间pdsfdshx1#
创建一个需要依赖项的xcframework是完全可能的。你可以发布一个描述依赖项的Package.swift,应用程序会将它们全部链接起来,沿着你的xcframework。
不建议(或不直接支持)创建一个包含**依赖项的xcframework。
考虑另一个框架(xcframework或其他)还包括Alamofire。最好的情况下,这将包括一个冗余副本。最坏的情况下,如果所需的版本不同,程序将具有未定义的行为,并且将在加载时确定使用哪个版本。这是包含依赖项的基本问题。它存在于几乎每个系统中,包括xcframeworks。没有安全的方法可以向框架的消费者隐藏你需要Alamofire的事实。你需要在你的Package.swift中包含它。
如果你能绝对确保没有一个消费包,或者消费包的依赖项,也包括依赖项,那么直接包括依赖项的方法是很棘手的。在某些情况下,这对于管理纯内部包来说是值得的。但是对于像Alamofire这样广泛使用的框架来说,这永远不会是这样。