使用CookieCutter Swift创建iOS框架
在iOS中创建框架对我来说并不是什么新鲜事物。 在我的整个职业生涯中,我有机会建立了其中的几个。 您想要创建框架的原因有很多:
- 创建可以在项目之间重复使用的抽象。
- 与社区分享您建立的东西。
- 将项目拆分为模块。
- …
直到今天,每当我不得不创建一个iOS框架时,我都会发现自己重复了相同的模板:
pod lib创建*
是的 那是赢的正确的cocoapods!
几天前,我收到了有关CookieCutter Swift的朋友建议。 用于创建iOS框架的模板,该模板不仅允许我的项目支持Cocoapods,而且还支持Carthage和Swift Package Manager。
在本文中,我将展示如何使用CookieCutter创建iOS框架以及这样做的好处。 我将在本文中创建的框架可以在这里找到。 检查它是自述文件。 几乎所有内容都来自CookieCutter模板,太棒了! 从头开始真正的生产自述文件,太棒了!
thiagolioy / Swifixture
Swifixture –用于加载Json文件并帮助进行更好测试的Swift库。 github.com
聊够了..给我看看代码!
首先,请确保每个人都在同一页面上,这意味着:
酿造安装迦太基
酿造安装cookiecutter
cookiecutter https://github.com/cookiecutter-swift/FrameworkTemplate
*对于将来的运行,您可以将命令缩短为cookiecutter FrameworkTemplate
。 但是,如果要使用最新的模板,则仍应运行上面的完整命令。
运行命令后,您将得到如下所示的文件夹结构:
有很多文件夹和文件:
- 购物车文件
- Podspec
- PackageSwift
- 自述文件
- Xcode项目
- 源/和测试/目录
- 除其他事项外 ..
很棒的事情是,如果您像我一样来自“ pod lib create”世界,能够使用Carthage导入Nimble和Quick是一个很大的增强,而不是测试中更多的语法和完成问题!
使用子规范配置podspec的方式也值得一提。 这种方法将使很多豆荚受益匪浅。 许多图书馆都做到了卓越,例如Moya。 你们可以检查他们的文件夹结构与此模板非常相似。
Xcode项目
Xcode项目非常简单,尤其是在此示例中。 Swifixture是一个库,可帮助从文件加载JSON。 它还使用定义为Subspecs的特定映射框架来解析它们。 目前,它目前仅支持ObjectMapper,但我(并希望其他人也可以)为其他库提供支持。
注意事项!
每次您需要为podspec指定一个新的依赖项时,就像我为ObjectMapper子规范所做的那样。 您将需要使用Carthage添加它。 您需要做的只是:
- 将其添加到您的Cartfile。 像这样:
github“ Hearst-DD / ObjectMapper”〜> 2.2
- 您将不得不将此库导入到xcodeProject中。 否则,使用Carthage作为依赖管理器来安装您的lib的人将会遇到问题。 您可以通过单击“ 链接的框架和库 ”下的“ +”按钮来实现。
- 另外,请确保使用“ Runpath Search Paths ”将迦太基文件导入测试目标。 否则,您将无法运行它们。
- 您需要担心的最后一件事是如何测试框架,而无需将其推入Github。 本地测试可以为您节省大量时间,值得您自己尝试另一个话题,请耐心等待。
本地测试
迦太基
在将消耗Carthage库的项目中,编辑Cartfile。 迦太基允许我们指定一个git url以及您的库文件夹路径,而不是指定Github的url。 这样,我们无需将任何代码推送到我们的GitHub存储库即可对其进行测试。 在当地检查并在一切正常时推送!
git“文件:///Users/Thiago.Lioy/dev/mobilelabs/tmp/Swifixture”“大师”
椰子足
Cocoapods还允许我们在推送之前在本地测试我们的库。 我们只需要在Podfile中指定即可。 我们可以使用path参数来做到这一点:
pod 'Alamofire', :path => '~/Documents/Alamofire'
最后的话..
这个CookieCutter快速框架模板对我的iOS工具集是一个很大的增强,希望大家喜欢它。 与旧的“ pod lib create ”之类的方法相比,这是一种更好的方法,它可以使您的项目与Carthage和swiftPackage Manager兼容。
与往常一样,任何想法,疑问或反馈都值得欢迎。 =)
附 :如果您喜欢这篇文章,请在Twitter上分享,或在中等水平上推荐,或两者都=)。 这样做有助于我吸引更多的人。 非常感谢。