带有嵌入库的 Cocoa Touch Framework Swift

Posted

技术标签:

【中文标题】带有嵌入库的 Cocoa Touch Framework Swift【英文标题】:Cocoa Touch Framework Swift with embed libraries 【发布时间】:2015-03-27 10:44:11 【问题描述】:

我正在开发一套包含通用模块的应用程序。 我想将通用模块存储在 Cocoa Touch 框架中。 该框架还可能包含库和 Alamofire 和 SwiftyJSON,因为它们在模块中被广泛使用。 目前,尽管在网上阅读了很多教程、文章等,但我无法得到一个稳定的解决方案。

是否可以将框架 Alamofire 和 SwiftyJSON 集成到自定义框架中,或者将它们集成到使用该框架的不同项目中更好(它们也将单独需要)? 是否可以生成在模拟器和手机上运行的框架(无论方法:子项目与否,动态或静态库,胖库)?

【问题讨论】:

【参考方案1】:

你绝对可以做到这一点。您目前有三个选项可用于设置此开发和两个部署选项。


发展

Git 子模块

Git submodules 是将其他库引入项目存储库以嵌入项目的好方法。您需要做的就是添加子模块,然后将该库的 Xcode 项目拖到您的 Xcode 项目中,使其嵌套在您的项目中。然后您需要将该框架作为链接目标添加到您的库中。

迦太基

Carthage 还通过 --use-submodules 标志支持 git 子模块。您需要做的就是通过自制程序 install carthage,然后使用以下命令创建一个添加 Alamofire 和 SwiftyJSON 的 Cartfile。

carthage update --use-submodules

CocoaPods

CocoaPods 是一个依赖管理系统,允许您轻松地拉入和部署给定库的不同版本。由于Alamofire 和SwiftyJSON 都支持CocoaPods,您可以创建Podfile,然后运行pod install 将pod 拉入您的库中。我不会推荐这个,因为这是一个相当重的方法。相反,我建议使用 Git SubmodulesCarthage 进行开发。


部署

部署是一个非常不同的情况。目前,在 OSS 社区(包括 Alamofire 和 Carthage)中有两种相当强大的 ios 和 OSX 部署机制。

迦太基

如果您使用 Carthage 导入 git 子模块,那么您可能已经完全支持 Carthage 部署。这取决于您是否使用Cartfile.private 文件来引入您的依赖项。鉴于您正在尝试做的事情,我怀疑您会使用私人 Cartfile 而是使用公共 Cartfile。这意味着你应该很好地开箱即用。太棒了!

CocoaPods

CocoaPods 与 Carthage 有很大不同,并且与 Carthage 相比具有一些很大的优势,但需要付出一定的代价。您需要创建一个 podspec 文件并将其推送到公共或私有规范存储库中。然后任何人都可以使用 Podfile 将您的 pod 拉入他们的项目中。


总结

如您所见,这里有很多选项。我强烈推荐使用 Carthage 来引入你的 git 子模块,然后支持 Carthage 和 CocoaPods 进行部署。我知道这是一个很大的努力,所以你可能想专注于一个或另一个。很抱歉有大量的链接和信息,但您的问题让我相信您将从所有这些不同的来源中受益匪浅。

希望这可以帮助您成为依赖项开发和部署的忍者。

【讨论】:

以上是关于带有嵌入库的 Cocoa Touch Framework Swift的主要内容,如果未能解决你的问题,请参考以下文章

带有选项卡式导航的 Cocoa-Touch 后退按钮

静态 cocoa/cocoa-touch 库应该基于啥样的 SDK?

Cocoa Touch 框架无法识别

怎么调试cocoa touch static library

将 cocoapod 依赖项添加到 cocoa touch 框架

如何解决 Cocoa touch 框架中的符号名称冲突