Ale*_*kov 7 xcode ios cocoapods
我们公司希望向我们的客户分发iOS的闭源SDK.我一直在使用Cocoapods构建框架并构建了一个使用它的示例应用程序.以前,该应用程序在模拟器上以及部署在设备上时运行良好.但是,我还在应用程序本身中嵌入了Pods.framework文件.可能感兴趣的另一条信息是框架是用Swift编写的,包含的cocoapods依赖项是Swift和Objective-C.
我想让pods的要求更容易管理,因此用户不需要关心它们并尝试将Pods.framework文件嵌入到我们正在构建的SDK中 - 所以我删除了嵌入Pods框架和从示例应用程序复制Pods资源,只留在框架中,我还删除了Pods.framework作为示例应用程序的依赖项,只留在SDK中.这似乎在模拟器中工作,但现在应用程序崩溃移动设备与dyld:库未加载错误.
在研究它之后,我偶然发现了一些相关的讨论:https : //github.com/CocoaPods/CocoaPods/issues/344 https://objectpartners.com/2014/06/25/developing-private-in-house-libraries -with-的CocoaPods /
但是,使用私有pod的建议解决方案看起来不适合我们,我的理解是私有pod中的源代码仍然是开放的,我们无法与我们的客户共享它.
有人可以就这种情况下可行的解决方案提出建议吗?
好吧,我终于有了一个更持久的解决方案。这是我的旧版本的修改版、更干净的版本,现在我了解 Xcode 如何更好地链接我的 Swift 子框架
导致分发/编译有点难看的问题:
由于 Swift 标准库不像 Obj-C 那样捆绑在设备上,也不能保证它们在版本之间保持稳定(Swift 3 中承诺的稳定二进制接口: https: //github.com/apple/swift-evolution#development -major-version--swift-30)我们必须确保整个项目是针对相同版本的 Swift 编译的。这意味着使用您的闭源框架的人必须在其项目的 Xcode 中使用与编译库相同版本的 Swift,即使他没有在代码中使用 Swift,因为最终是他的 Swift 版本被捆绑到应用程序中并且您的 SDK 运行。这只是闭源框架的问题,因为开源框架将始终针对与最终项目相同的版本进行编译。可能的解决方法是将客户端限制为您使用的相同版本或分发多个编译(即 Swift 2.1 和 Swift 2.0)。为了解决这个问题,您可以向用户提供针对多个版本的 Swift 编译的二进制文件的副本。
除此之外,为了制作一个在 Swift 中工作的二进制框架,我在编译/分发期间必须做以下事情:
构建框架时:
#import在你的桥接头文件中使用任何框架,所有告诉你这样做的指令都是 Swift 1.0-1.2 天遗留下来的,你不再需要它了,它弊大于利(后来的项目会抱怨它不能找到这些甚至没有暴露给它的标头)使用框架构建项目时: