set-up-with-good-practice

创建一个项目的良好经验

很多时候, 创建一个项目只是因为能这么做, 所以做了.

但是, 能这么做不代表这么做比较好.

按照以往通用的做法, 也许会给之后的项目管理带来一些麻烦, 所以, 在总结了一些经验之后, 并且看到一篇深感认同的文章, 记录下(其实很多是翻译, 觉得里面碰到的坑大多数都经历过, 值得一记)

创建项目

使用 Single View 模板创建一个新项目, 勾选Include Unit TestsInclude UI Tests, 但是不勾选 CoreData, ( 因为其创建的模板代码不太好? 不知道, 没用过, 一半都是用 splite3, 所以这个也没勾选过 )

不要勾选 Create Git repository on my Mac !! 因为我们在一个项目创建后, 还需要做一些工作来配置你的项目, 单单在第一个 commit 中就是一个完完全全 initial 的项目并没有任何意义, 而且他并不会创建 .gitignore 文件, 这样在初次提交时, 就会把一些不必要的东西让git去 trace 了, 到时候还要把这些被追踪的文件从 repo 中去掉… 所以在自己配置好项目后, 在自己创建一个 git repo

项目的管理

让项目结构分组结构化, 这个在往大了的项目中是非常有用的, 不然, 很快就会变得杂乱无章.

一般是说, 不在项目的 root 组下方任何东西, 所有的源码文件都分类管理

一般的划分是, Resource 一个group, Storyboard 一个group, 至于项目中的其他, 项目业务功能不多的时候可以按照 MVC 或者 其他结构来分组, 业务功能多的时候, 因为经常游走在同一个业务代码中的时候, 分组跨度太大也不好, 按照业务分组可能会比较好

添加README

即使你是一个人的项目, 但这点也会非常又帮助, 你看看github 上大神的项目
即使一个简单的说明, 也能减少别人了解你这个项目的主要作用.

如果带上一些小 Demo 就好了, 可以试项目中的新成员快速跟上节奏

构建和运行

在提交到 git 之前, 必须保证项目buildrun 是没有warning&error, 有些时候我们移动一个文件, 但是xcode 并不能找到我们移动的文件, 所以, 不管你做了什么, 当你commit 之前, 一定是保证build 成功且没有错误警告

添加 .gitignore

我们必须在项目的根目录, 和.git 文件夹同级目录, 添加 .gitignore 文件, 如果还不了解 git, 可以去其官方网站看看, 目前, 做开发的应该不会不知道这个, 如果不够熟悉, 强烈建议你去官网, 已经又中文版的阅读了.
.gitignore 定义了哪些文件, 哪些类型的文件/文件夹 需要被 git 忽略, 我们使用github 上提供的模板一般就够用了

注意下, 使用 [CocoaPod](https://cocoapods.org) 的话, 有些文件也需要忽略, 好在github提供的模板也包括这个了~

值得注意的是, 这个是不是忽略整个 pod 文件夹由自己判断(像之前, 公司有要求不能忽略, 是想在 clone 整个项目时, 不需要 pod install 就能把项目跑起来, 原因你知道的, 不是跑这个项目的每台电脑的网络环境都这么理想), 如果你是分享出去的话, 这个最好就忽略掉, clone 下来的人呢自己进行 pod install, 这要注意, 不要把PodfilePodfile.lock, Podfile 指明了需要依赖的东西, Podfile.lock 锁定了当前的配置, 包括项目使用的依赖库的版本.

将项目纳入版本控制

这个就没什么好说了把吧, 如果只是做一次简单的 Demo, 或者其他一次性的代码, 当然就不用管这些东西了. 如果还不清楚版本控制的重要性和便利性, 可以随便在网上搜, 已经是汗牛充栋了.

将项目放到远程仓库

当你的项目使用了git来做为版本控制的时候, 你还需要一个在远程保存你的仓库的地方, 很高兴, github, gutlab 都提供了免费的服务. 为什么? 如果作为一个开发人员, 不知道备份的重要性的话, 那我也无话可说了. btw: gitlab 提供的服务是全部免费的. 私有仓库也是全部免费的. 而且整个 gitlab 项目是开源的, 你可以在自己的机器上搭建这个远程服务, 很多公司也是这么做的. 作为公司保存代码资产的地方.

额外步奏

如果你的公司有持续集成的步奏的话, 可能你还需要创建一个Gemfile, 或者一些其他操作, 目前我还没又弄过这些, 所以看各公司的情况啦

自动化

这里有几个工具可以自动化创建一个 xcode 工程, 其中一个比较流行的是[Liftoff](https://github.com/liftoffcli/liftoff)

如果你在一个中大型团队工作的话, 这种自动化应该是满不错的, 可以制定项目的规矩, 并让成员在一些规范下操作. 这样可以避免很多错误, 并且项目不会很乱. 但是再一个小团队的话, 这么做的成本就要估量一下了. 不过能自动创建一整个模板项目出来的话, 也是能省去重复创建的麻烦, 也能避免一些认为因素造成的错误.