Xcode 9中的VIPER项目模板:当模块模板不够用时…

如今,iOS的要求非常困难(相对于时间)。 这些天的要求就像“我想要像托尼·史塔克(Tony Stark)的钢铁侠西装那样的东西”。但这不是难题。 问题出现了,当在下一行中听到“您有3个星期”,然后您会突然感到吐出这三个神奇的单词的冲动,可惜……..u不能……😕

就像您知道自己可以做到,但另一方面,您对自己的能力提出了质疑……“我能在DEADLINE内完成它吗?”

在满足这些要求时,大多数开发人员更喜欢从头开始工作,他们可以轻松地制定自己的工作策略。 但是,老实说,我们是否有足够的时间……从头开始。

最近,我正在使用新架构VIPER。 在研究了这种面向协议的体系结构之后,我意识到您必须有足够的时间来使用它,因为与MVC相比,几乎必须编写三倍的代码。😟

Xcode Project模板提供的内容是您必须播放的文件的最小限度基本展示。 但是,在进行大型项目时,您需要具有一个良好的结构,其中将包含Enums,Extensions,Constants,Storyboards,Feature Modules等文件。随着您深入了解需求,这种结构会不断发展。

因此,我想到了拥有一个项目模板,该模板将包含一个基本结构以及一些基本模块,例如登录,侧边菜单,仪表板,注销等。至少可以节省两到三天的初始工作时间…😁😁

对于创建项目模板,我想您首先需要了解的是项目模板的外观。

为此,请转到位置/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/developer/Library/Xcode/Templates/Project\ Templates/iOS/Application

在此位置,您可以找到许多扩展名为.xctemplate文件夹。

复制文件夹Single View App.xctemplate并将其粘贴到桌面上,然后再开始浏览其内容,因为您不想弄乱Xcode的默认模板。

首先,将文件夹名称从Single View App.xctemplate更改为Viper Project Template.xctemplate

但是更改文件夹名称并不能解决所有问题,而有关TemplateInfo.plist文件的所有操作都位于您必须使用的文件夹下。

打开TemplateInfo.plist 。 现在,像Xcode项目一样,项目模板也具有使它唯一的Identifier 。 对于单一视图应用程序,您可以看到com.apple.dt.unit.singleViewApplication 。 您可以将其更改为任何其他值,例如我使用的“ com.manishKumar.singleViewApplication”。 现在,只需保存TemplateInfo.plist文件,然后复制文件夹Viper Project Template.xctemplate并将其粘贴到复制Single View App.xctemplate 。 退出Xcode,然后重新启动。 现在,当您创建一个新项目时,将有一个类似的选项。

Yippee …😃😃您已经创建了自己的项目模板😎。 但是还没有结束。 根据VIPER结构,我们仍然没有任何内容。 我们现在需要对此进行努力……

再次打开TemplateInfo.plist (保留在桌面上)。 在该文件中,在Options选项下浏览。

您可以在“ Units下看到两个选项

  1. 目标C
  2. 迅速

您必须根据开发语言在这两个选项之间进行选择。 我更喜欢Swift,因此我将继续使用它来创建Templates。

在Swift下,您可以看到一个名为Nodes的键

Nodes键用于创建文件,只需放置文件名即可。 如果要在特定位置创建文件,则最后需要在文件名中包含路径。

在“节点”下,您可以看到一些项目及其各自的值。 深入了解之后,您可以了解这些配置行用于通过ViewController LifeCycle方法创建ViewController 。 但是我们需要的远不止于此。

注意 :您可以看到有关Viper结构的Github Repo,以实现该项目模板。

现在,我们的目标是创建一些内置模块。

让我们将所有内容放在一边,考虑一下创建具有以下所示功能的应用程序需要花费多少时间和精力👇🏻gif图像(在VIPER中)

我敢打赌,这对您来说是一件非常容易的事,无需花费太多精力😎。 但这就是我们最初将作为项目模板实现的(以后您可以根据需要增强模板)。 您可以使用此Github存储库中的模块模板来加快整个过程,并参考我以前的博客中有关什么是模块模板以及如何为自己的过程创建模板的文章。

因此,最初,您将使用上述功能构建一个Xcode项目。 作为参考,您可以签出或使用此Github存储库。 只需记住一件事,无论您编写什么代码,都将保留为模板。

取出所有模块,即“登录”,“主页”,“侧面板”,“资源”,“设置”,UI,AppDelegate.swift和AppDependencies.swift(父文件夹以及文件),并将其保存在其他位置。 我们现在将致力于将模板中的文件导入。 从Login模块开始,只需复制Login模块并将其粘贴到Viper Project Template.xctemplate 。 但是仅将这些文件复制到文件夹中是不够的。 您将必须在TemplateInfo.plist文件中进行一些配置。

就像在我的上一个博客中一样,您将必须遵循将文件头组件更改为通用值的过程。

让我们回滚到剩下的位置,即Units 。 现在以单位为单位,我们将使用Swift选项作为模板的首选语言选择,如前所述。 现在在Nodes(一个数组)中,您将必须为Login Module中的每个文件提供文件名及其路径,如下图所示。

您可以看到所有文件及其路径都相对于其父模块文件夹。 但是,将这些文件添加到“ 节点”下将在此路径下创建新文件。 但是我们的目标是导入创建的文件。

因此,在此之后,我们将使用另一组称为Definitions的键。

定义允许您在Xcode项目中包含源文件和代码,直到您提供实际文件路径为止。 它也可以用来创建文件和文件夹组

在“定义(字典)”下,您将创建一个字典。 词典的关键字将是登录模块的任何文件的路径(以及文件名)。 在该词典中,将包含两个部分:

  1. 路径 –这将是一个字符串,并且其值将与父字典键相同。
  2. –组是一个字符串数组,将包含其源父层次结构的整个路径(不包括文件名)。

因此,假设您为LoginAPIDataManager.swift创建了定义,它将看起来像这样:

同样,您必须为所有登录模块文件创建定义。

现在,添加节点和定义的键和值的过程将重复进行,直到我们完成登录,主页,设置,侧面板和资源模块为止。 资源模块包括SidePanel源文件和各种UIKit元素的一些扩展。

完成上述任务后,您必须处理另一个组件,即UI 。 它包含一个Storyboard.swift文件,该文件仅用于协作引用项目中使用的所有情节Storyboard.swift

完成所有这些之后,最后剩下AppDelegate.swiftAppDependencies.swift 。 现在,由于这些文件是相互依赖的,因此我会将这两个文件合并到一个文件夹AppDelegate中 。 在文件夹中找到这两个文件后,将其粘贴到Viper Project Template.xctemplate 。 将使用相同的配置来重命名这两个文件中的标题。 同样,对于节点定义键,必须以相同的方式遵循plist配置。

至此,所有配置。 但是请只检查一次所有文件中的标题,因为您不希望文件显示为不同项目,作者或组织的一部分。

目前为止就这样了。 希望此项目模板可以加快您的开发过程。

您可以在以下Github存储库中找到项目模板:https://github.com/manish-1612/Viper_Project_Template。

如果您发现此博客有帮助,请不要忘记鼓掌……😊😊