ios - 快速创建具有第三方依赖性的iOS编译的SDK(使用CocoaPods)

标签 ios swift xcode compiled xcframework

我在中有一个SDK 5.1 Swift ,我们的客户希望将其作为已编译的SDK分发(出售),而不是提供其来源。

不幸的是,此SDK依赖于某些第三方库,这些库是使用CocoaPods(Alamofire,RealmSwift,ReachabilitySwift等)集成的。我知道您应该避免在框架/库中包含第三方依赖项,但是很遗憾,在另一个机构启动该项目后,我们开始研究该项目。该SDK实际上是cocoapod的Pod,但不是经过编译的Pod。

将此SDK作为已编译的SDK分发的最佳方法是什么(以避免将源文件提供给最终购买者)?

据我了解,如果您使用第三方依赖性来编译sdk,则必须确保该应用程序将使用与已编译sdk使用的库具有相同 public api的相同库,否则该应用程序将在崩溃时崩溃运行。据我了解,这样做的唯一方法是在已编译的sdk podspec中为每个第三方依赖项指定非常严格的版本。例如,Alamofire,“〜> 4.2.0”。但是我不喜欢这种方法,因为这样应用程序就不能使用Alamofire的较新版本(或其他依赖项),仅因为已编译的sdk已使用该版本进行了编译。

我正在创建一个XCFramework,然后创建一个带有该XCFramework的podspec,作为vendored_framework提供(使用CocoaPods 1.9.0-beta2,这是当前唯一支持XCFrameworks作为vendored_framework的版本)。

我尝试了许多不同的方法,例如尝试将编译后的sdk构建为静态库,并将其第三方依赖项也链接为静态库,但是在这种情况下,当在应用程序中使用它时,它会具有相同的依赖项(例如Alamofire)在控制台中,“在X和Y中都实现了X类。未定义使用哪个X类”(其中,Y和Z是sdk和应用程序)。

有什么建议吗?你会怎么做?

谢谢!

最佳答案

当您说For example, Alamofire, '~> 4.2.0'. But I don't like this approach because this way the app can't use a newer version of Alamofire (or the other dependencies), only because the compiled sdk has been compiled with that version.时,我认为您不了解已编译SDK的概念...将SDK打包时,它是静态的,因此,是否有较新的第三方依赖项来更新您需要的SDK并不重要向客户发布新版本,以便您可以在需要时上传...客户无法(而不是完全)自己无法更新SDK。

(应该是评论,但太大了)

关于ios - 快速创建具有第三方依赖性的iOS编译的SDK(使用CocoaPods),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59882790/

相关文章:

ios - NSDate 在 CoreData 中被保存为时间戳

swift - 如何在 swift 中访问像 $(PROJECT_DIR) 这样的build设置常量?

objective-c - 我拖到 xcode 的文本文件在 iphone/模拟器上放在哪里?

ios - 如何将 url 数组发送到另一个 View 并转换为图像?

iphone - php -> JSON -> iPhone

html - 获取 HTML 页面作为 XML 代码

ios - 如何删除子托管对象上下文上的临时对象?

ios - 如何使用 swift 创建自定义弹出 View ?

IOS文字游戏。验证词性能

swift - 为什么我的相机子节点没有出现?