ios – 在闭源Swift框架中嵌入框架
我们公司希望向我们的客户分发iOS的闭源SDK.我一直在使用
Cocoapods构建框架并构建了一个使用它的示例应用程序.以前,该应用程序在模拟器上以及部署在设备上时运行良好.但是,我还在应用程序本身中嵌入了Pods.framework文件.可能感兴趣的另一条信息是框架是用
Swift编写的,包含的cocoapods依赖项是Swift和Objective-C.
我想让pods的要求更容易管理,因此用户不需要关心它们并尝试将Pods.framework文件嵌入到我们正在构建的SDK中 – 所以我删除了嵌入Pods框架和从示例应用程序复制Pods资源,只留在框架中,我还删除了Pods.framework作为示例应用程序的依赖项,只留在SDK中.这似乎在模拟器中工作,但现在应用程序崩溃移动设备与dyld:库未加载错误. 在研究它之后,我偶然发现了一些相关的讨论: 但是,使用私有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中工作的二进制框架: 构建框架时: >在项目目标中,确保将Pods.framework添加到Linked Frameworks和Libraries(确保这是Pods.framework的预编译RED版本,我有一个黑色编译的Pods.framework在同一目录中构建正常但是然后导致项目导致项目在后续项目的链接器阶段抱怨缺少armv7体系结构) 使用框架构建项目时: >将框架拖放到项目中,在常规选项卡中将其添加到嵌入式二进制文件和链接框架和库(您只需要添加框架本身,而不是子框架或pods文件)>在Build Settings选项卡中,添加一个新的Framework Search Paths路径:$(PROJECT_DIR)/MyFramework.framework/Frameworks>构建项目 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |