在具有第三方依赖关系(使用 CocoaPods)的 swift 中创建 iOS 编译的 SDK



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

不幸的是,这个SDK依赖于一些第三方库,使用CocoaPods(Alamofire,RealmSwift,ReachabilitySwift等(集成。我知道你应该避免在你的框架/库中有第三方依赖,但不幸的是,我们在另一个机构开始这个项目后就开始了这个项目。这个 SDK 实际上是一个 cocoapod 的 Pod,但它不是一个编译的 pod。

为了将此 SDK 作为编译的 SDK 分发(以避免将源文件提供给将购买它的最终消费者(,最好的方法是什么?

据我了解,如果使用第三方依赖项编译 SDK,则必须确保应用程序将使用与编译后的 SDK 相同的库和相同的公共 API,否则应用程序将在运行时崩溃。据我了解,这样做的唯一方法是在编译的 sdk podspec 中为每个第三方依赖项指定一个非常严格的版本。例如,Alamofire,'~> 4.2.0'。但我不喜欢这种方法,因为这样应用程序就无法使用较新版本的 Alamofire(或其他依赖项(,只是因为编译的 sdk 已使用该版本编译。

我正在创建一个XCFramework,然后是一个带有XCFramework作为vendored_framework出售的podspec(使用CocoaPods 1.9.0-beta2,这是目前唯一支持XCFrameworks作为vendored_framework(。

我尝试了许多不同的方法,例如尝试将编译的 sdk 构建为静态库,并将其第三方依赖项链接为静态库,但在这种情况下,在应用程序中使用它时,以及相同的依赖项(例如 Alamofire(,我在控制台中看到一些"X 类在 Y 和 Z 中实现。使用哪一个是未定义的"(其中 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,根本无法更新。

(应该是一个评论,但太大了(

最新更新