我正在try 创建一个二进制xc框架,我希望它具有一些SPM依赖项.有可能吗?

到目前为止,我面临的问题是我不能用依赖项导出我的框架,因为BUILD_LIBRARY_FOR_DISTRIBUTION标志必须是FALSE才能使依赖项起作用.但在这种情况下,我将无法生成二进制代码.

这就是我想要做的:

  1. 添加SPM作为依赖项:

  2. 使用xcodebuild归档:

    Xcode构建存档-项目框架POC.xcodeproj-方案框架POC-目标"通用/平台=IOS"-存档路径"存档/框架POC"

  3. 通过以下方式生成二进制文件:

    XcodeBuild-create-xcframework-归档档案/框架POC.xcarchive-框架框架POC.framework-输出xcFrameworkPOC.xc框架

So far so good... The exported framework works fine. But if I add a SPM such as Alamofire I get this warning:enter image description here

当我将BUILD_LIBRARY_FOR_DISTRIBUTION设置为YES时,框架被 destruct ,因为似乎找不到AlamoFire.

所以回到我的问题上:Is it possible to generate a binary framework that contains SPM dependencies?

推荐答案

创建一个具有requires个依赖项的xc框架是完全可能的.您将发布一个描述依赖关系的Package.swft,应用程序将链接所有这些依赖项,以及您的xcframework.

创建一个有includes个依赖项的xc框架是不可取的(或直接支持的).

考虑另一框架(xc框架或其他)also包括Alamofire的情况.在最好的情况下,这将包括冗余副本.在最坏的情况下,如果所需的版本不同,程序将具有未定义的行为,并且将在加载时确定使用哪个版本.这是包含依赖项的一个基本问题.它几乎存在于所有系统中,包括xcFrameworks.没有安全的方法可以向框架的使用者隐瞒您需要Alamofire这一事实.您需要将其包含在您的Package.swft中.

如果您可以绝对确保没有消费包或消费包的依赖项也包含依赖项,则有一些巧妙的方法可以直接包含依赖项.在某些情况下,这对于管理纯内部包来说是值得的.但对于像Alamofire这样广泛使用的框架来说,情况永远不会如此.

Ios相关问答推荐

如何保持拖动预览与原始项目完全相同?

如何访问iOS模拟器中的zoom 设置?(在搜索中列出,但不可见)

检测touch 并忽略其他手势SWIFT SceneKit

如何在KMM项目中处理PHPickerViewController的回调?

如何从单独的视图更改修饰符的值

如何在 SwiftUI 视图中显示协议视图?

CarPlay:现在播放alert 可能吗?

如何在 SwiftUI 中同时使用 LongPressGesture 和 ScrollView 中的滚动?

SwiftUI 图表 BarMark 将注释对齐到图表顶部

FileHandle 不会在 iOS 中释放内存

通过函数使用 Gesture 时,键入任何视图不能符合视图

在 Swift 中为 UITextField/UIView 摇动动画

iOS 11 navigationItem.titleView 宽度未设置

如何在上传到服务器之前在 iOS 上压缩/调整图像大小?

如何隐藏uitabbar控制器

所有小部件的Flutter 填充?

使用 Xcode 4 的 iPhone 临时构建

使用 swift 从应用程序委托打开视图控制器

UITableView 中的圆形 UIImageView 没有性能影响?

iPhone UITableView.如何开启音乐 App 之类的单字母字母列表?