我在中有一个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/