转自:http://www.cocoachina.com/ios/20160316/15687.html

这两年,我一直在编写并发布有质量的iOS 应用。我发现大多数的开发人员有直接跳进编码应用程序的核心逻辑的倾向,因为这是乐趣所在。遵循流程开发是很无聊的。

我了解到最有效的方式是,如果你提前花些时间正确设置项目,你将会为将来节省大量的时间。如果你是一位独立开发者,你可能意识不到下面提到的这些步骤的重要性。大多数优秀的应用程序都由团队开发,如果遵循以下步骤,肯定能帮你减少挫败感并提升应用质量。

1.为工程设置编码风格规范

编码风格规范指的是在使用特定语言写代码之前要明确遵守的风格和惯例,它包括类似于该使用tab键还是空格键,如何命名变量以及特定语言本身的约定俗成(像swift语言中是否该使用Classes还是Structs)。

编码规范本身没有孰对孰错。在项目开始前,你可以设置自己的编码风格,但是必须保证同组的人遵守相同的规范。编码规范能够保证代码更加统一和更易于阅读。

一些公司已经开源了Objective-C和Swift语言的编码规范。

2.在写代码之前确定应用的架构

在写代码之前,确定应用架构是非常重要的。一个好的架构可以提升应用的可测试性,更加易于理解并且能降低维护成本。你可以使用传统的MVC架构,或者使用更加流行的MVVM或VIPER架构,这里提供了大量的资源来介绍这些架构。

3.设定应用的目录结构

为了使数以百计的源代码文件至始至终保存在相同的目录中,最好是根据项目的架构制定目录结构,例如,你可以使用以下的目录结构:

首先,在Xcode的Project Navigator中工程名称分组下面,以group的形式创建它们(小黄色的文件夹),然后,通过打开Xcode右边的File Inspector,为每个创建的group链接到真实的项目路径下对应的目录,点击File Inspector中小的灰色的文件夹icon,在工程目录下创建对应group名称的子目录。

这个看起来是件小的事情,却可以使你的项目更加有条理且易于理解。

了解更多目录结构可以参考以下资源:

4.项目依赖管理

你当然会在项目中使用第三方库,在项目中,你可以有三种方式可以管理项目依赖。

CocoaPods是适用于Swift和Objective-C Cocoa项目的依赖管理库,它有将近10000个开源库,可以优雅地帮你管理项目的规模。它是最有效的方式做依赖管理,就像Ruby中的Gems。

Youtube上有一个google开发者创建的滑稽的视频(地址,需FQ)来解释为什么必须在项目中使用CocoaPods。

  • Github Submodules

你也可以使用Github Submodules管理你的项目依赖作为子库,相比CocoaPods,Github Submodules的优点在于它是sub-repos- 这不仅意味着git和git GUIs能够隐式识别他们,并且也可以获得更多支持,同时意味着你的工程依赖能够更加紧密的联系到他们的git仓库,而Cocoapods则不能。

submodules的问题是:你的工程不拥有你依赖库的源代码,仅仅是拥有一个引用到submodule的仓库。大多数情况你控制不了这些代码仓库。

Carthage被认为是往Cocoa应用中添加框架的最简单的方法。Carthage使用xcodebuild编译framework二进制,但是把集成的任务留给了用户。CocoaPods的目的是对用户简单,但是Carthage对用户来说是灵活的、不干涉的。

不幸的是,Carthage的最大的缺点是----只支持iOS8及以后版本。

这三个当中,我最常用并且我个人最喜欢的是CocoaPods,因为它设置超级简单,并且提供了数以千计的第三方库供你访问。

5.为应用设置合适的Scheme

当你点击了Run、Test、Profile、Analyze或者Archive 操作后,Schemes告诉Xcode什么会发生。通常,每个操作对应一个target和一个编译配置。你也可以传递启动参数,比如应用运行的语言(测试本地化很有用)或者debug时设置一些判断的标识位。

建议Scheme的命名规则采用MyApp () [Environment]:

你也可以使用Target制作不同的发布、测试以及开发来编译程序,如以下描述:

6.设置合适的Certificates和Provisioning Profiles

在测试和发布应用过程中,这个是开发者最头疼且重要的步骤。证书对代码签名来说是必须的,你可以在真机上运行应用程序。

有两种类型的证书:

  • 开发证书:每个团队的开发者都有自己的证书,需要请求生成。Xcode会为你做这些,但是最好不要点击“Fix issue”按钮,并且能够理解点击这个按钮会真正执行什么。开发证书是发布应用的开发版本到设备上。

  • 发布证书:可以有多个,但是最好保持一个公司一个发布证书,通过内部渠道分享相关的秘钥。发布应用到App Store时需要这个证书,或者是公司内部的企业级应用分发。

  • Provisioning Profiles

Provisioning Profiles 可能是系统中最容易引起混淆的部分了,如果你访问苹果开发者网站,你会注意到你可以创建两种类型的Provisioning Profiles(开发和发布)。Provisioning Profiles是“以这个证书的私钥作为签名的应用可以在这些设备上正常运行: https://www.quora.com/What-are-the-differences-between-certificates-provisioning-profiles-and-identifiers

你可以阅读更多相关资源:

7.设置应用持续集成和交付过程

建立一个持续集成和交付过程已成为关键,因为现在它可以帮助您在开发早期发现bug和节省大量的开发人员的时间。

持续集成 (CI) 是一种开发实践,要求开发人员一天将代码同步到共享存储库几次。每次提交都会用自动脚本进行验证,可以使团队尽早的发现问题。

很多工具可以帮你做iOS应用程序的持续集成,比如 Xcode Server、Jenkins和Travis CI。

持续交付 (CD) 是一个软件工程的方式,可以使团队在短周期内开发软件,确保软件可以在任何时间可靠地发布。它旨在更快、更频繁地构建、测试和发布的软件。

为什么使用持续交付?

  • 可以在准备应用提交、上传截图以及发布应用上节省数天时间。

  • 如果在同事休假期间,但你发现一个严重问题需要修复并发布怎么办?在发布更新版本时不需要依赖某一个人。

  • 通过更频繁和小版本的更新,提高软件质量和反应时间。

虽然有大量的工具供持续交付,我个人最喜欢的是Fastlane。它非常容易安装,并提供了一些强大的功能,可以使你整个的编译和发布过程自动化。

如果你喜欢这篇文章,欢迎推荐,以便其他人也可以看到。

【转】在写一个iOS应用之前必须做的7件事(附相关资源)的更多相关文章

  1. iOS之在写一个iOS应用之前必须做的7件事(附相关资源)

    本文由CocoaChina--不再犹豫(tao200610704@126.com)翻译 作者:@NIkant Vohra 原文:7 Things you must absolutely do befo ...

  2. 在写一个iOS应用之前必须做的7件事(附相关资源)

    本文由CocoaChina--不再犹豫(tao200610704@126.com)翻译 作者:@NIkant Vohra 原文:7 Things you must absolutely do befo ...

  3. 在写一个iOS应用之前必须做的7件事

    转载自:http://www.cocoachina.com/ios/20160316/15685.html 原文:https://medium.com/ios-os-x-development/7-t ...

  4. 我在开发第一个Swift App过程中学到的四件事

    本文转载至 http://www.itjhwd.com/wzkfyigeswiftsjs/ 译者注:本文作者Greg Heo,这是他为讲授iOS 8 App Extensions视频教程而实际使用Sw ...

  5. 在开发第一个Android应用之前需要知道的5件事:

    你能否详细讲述一下,在开发Android应用过程中每一阶段要用到的技能和编程语言? 建立一个Android应用程序可以归结为两个主要技能/语言:Java和Android系统.Java是Android的 ...

  6. 把一个整体目标设置成多个分阶段目标,完成了一个目标后,就相当于一件事OVER

    如果事情有变坏的可能,不管这种可能性有多小,它总会发生 . 一.任何事都没有表面看起来那么简单:二.所有的事都会比你预计的时间长:三.会出错的事总会出错:四.如果你担心某种情况发生,那么它就一定会发生 ...

  7. Cordova webapp实战开发:(6)如何写一个iOS下获取APP版本号的插件?

    上一篇我们学习了如何写一个Andorid下自动更新的插件,我想还有一部分看本系列blog的开发人员希望学习在iOS下如何做插件的吧,那么今天你就可以来看看这篇文字了. 本次练习你能学到的 学习如何获取 ...

  8. 自己动手写一个iOS 网络请求库的三部曲[转]

    代码示例:https://github.com/johnlui/Swift-On-iOS/blob/master/BuildYourHTTPRequestLibrary 开源项目:Pitaya,适合大 ...

  9. 怎样写一个PC端使用的操盘手软件(用来买卖股票,查看报表,行情)

    我们想写一个操盘手软件,对于操盘而言,首先是快,然后是资料尽可能丰富,最好能看到行情,报表什么的.只是windows上写软件看似基础,实际上都不怎么好弄,用C++开发确实可以实现所有功能,估计光研发费 ...

随机推荐

  1. 数据库SQLite在Qt5+VS2012使用规则总结---中文乱码

    VS2012默认格式为 "GB2312-80",而有时我们用到字符串需要显示中文时,就会出现乱码.下面仅就Qt5和VS2012中使用数据库SQLite时,做一个简单的备忘录 #in ...

  2. hdu 2480 贪心+简单并查集

    Steal the Treasure Time Limit: 10000/6000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  3. 通过枚举enum实现单例设计

    一.枚举 通过enum关键字来实现枚举,在枚举中需要注意的有: 1. 枚举中的属性必须放在最前面,一般使用大写字母表示 2. 枚举中可以和java类一样定义方法 3. 枚举中的构造方法必须是私有的 通 ...

  4. Secure CRT 如何连接虚拟机里面的CentOS系统 当主机使用有线网的时候 作者原创 欢迎转载

    1.虚拟机的网卡配置如下图所示: 2.在CentOS 5.8的命令行界面:输入如下指令 然后准备修改里面的网关地址和自己的IP地址 3.同时查看自己的IP地址和网关 4.在第二步里面修改,网关地址应该 ...

  5. python反射机制

    http://blog.163.com/yang_jianli/blog/static/161990006201382241223156/ http://www.jb51.net/article/54 ...

  6. php urlencode()函数URL编码转换实例解析

    URLEncode:是对网页url所包含中文字符的一种编码转化方式,URLEncode有两种常见方式,一种是基于GB2312的 Encode(Baidu.Yisou等搜索引擎使用),另一种是基于UTF ...

  7. php如何做数据库攻击

    PHP mysql_real_escape_string() 函数 PHP MySQL 函数 定义和用法 mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的 ...

  8. 《python基础教程》笔记之 序列通用操作

    索引 序列中的所有元素都是有编号的--从0开始递增.使用负数索引时,Python会从右边,也就是从最后一个元素开始计数,最后一个元素的位置编号是-1.此外,字符串是一个有字符组成的序列,字符串字面值可 ...

  9. laravel中StartSession中间件的问题

    今天使用了laravel的dingoapi插件做了一些功能,但是最后遇到一个问题,我在页面和api的路由组中都加了一个相同的以session为基础的身份验证中间件,然后我以管理员身份登录页面时通过了验 ...

  10. MSP430 中断优先级

    MSP430的中断优先级.打开关闭.中断嵌套 优先级顺序从高到低为:    PORT2_VECTOR (1 * 2u) /* 0xFFE2 Port 2 */    PORT1_VECTOR (4 * ...