使用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上分享,或在中等水平上推荐,或两者都=)。 这样做有助于我吸引更多的人。 非常感谢。