iOS最佳实践
对其他平台感兴趣?看看我们的 Android 开发最佳实践 和 Windows App 开发最佳实践吧。
为什么阅读本文档
跳进了 iOS 的坑真是麻烦。无论是 Swift 还是 Objective-C, 都没有在其他地方广泛使用,而且这个平台对每个东西都几乎有它自己的命名方式,并且连要在真机上调试都充满了坎坷。无论你是刚刚入门 Cocoa 还是想纠正自己开发习惯的开发者,都能从本文档获益。不过下面写的仅仅是建议,所以如果你有一个更好的方案,那就试试吧!
入门
Xcode
Xcode 是大多数 iOS 开发者的选择,并且是 Apple 唯一官方支持的IDE。有一些其他的选择,比如 AppCode 是最有名的,但是除非你是经验丰富的开发者,否则就使用 Xcode 吧。不要管它的一些小缺点啦,它现在已经蛮好用咯。
要安装 Xcode,只需要下载 Mac App Store 中的 Xcode 。它会同时下载最新的 SDK 和模拟器,同时你可以从 Preferences > Downloads 下载更多的内容。
项目初始化
开始iOS开发的时候,一个常见的问题是用代码写所有的 view 还是使用 Interface Builder(Storyboards 或者 XIB )。两种方案都久经考量。但是,有下面几个考虑:
为什么使用代码?
- Storyboard 因为它的复杂的 XML 结构容易带来版本冲突,这让代码合并变得困难。
- 容易用代码结构化以及复用 view,让你的代码变得 DRY。
- 所有的信息汇集一处。在 Interface Builder 里面你需要点击所有的检查器来寻找你要找的东西。
为什么用 Storyboard?
- 为了更少的技术要求,Storyboard 使用了一个很好的直接贡献于项目的方法,比如,通过调整颜色或者布局的 constraints。然而,它要求一个项目已经做好配置,并且开发者有一些时间掌握基础
- 当你不用构建项目也能看到变化的时候,集成更快了
- 在 Xcode6 里面,自定义的文字和 UI 元素在 storyboard 里面都可以可视化表示,比你在代码里面修改好多了
- 从iOS8开始,Size Classes 允许你设计不同类型设备的屏幕,不用重复一些工作
忽略文件
当把项目放入版本控制系统的时候,首先应该有一个好的.gitignore文件。这样,不必要的文件(用户设置,临时文件这些)都不会放进你的仓库里面。幸运的是,Github 已经给了我们 Objective-C 和 Swift 语言的模板
CocoaPods
如果你计划增加外部依赖(比如,第三方库)在你的项目中,CocoaPods 提供了一个快捷的途径,就像这样:
sudo gem install cocoapods
要开始使用,仅仅需要在你的 iOS 项目目录下运行:
pod init
它会创建一个 Podfile, 会管理你所有的依赖,在 Podfile 中加入你的依赖后,允许
pod install
来安装第三方库并且将它们作为 workspace 的一部分,你的 workspace 也会包含你自己的项目。 一般推荐提交你自己的项目的依赖,而不是每个开发者在一个 checkout之后运行pod install。
注意在之后,你需要打开.xcworkspace而不是.xcproject,否则你的代码就不能被编译了,命令:
pod update
会升级所有的 pod 到最新版本,你可以用大量 符号 来定义你期望的版本需求。
项目结构
为了组织目录里面的上百个源代码文件,最好根据你的架构来设置一些文件结构。比如,你可以用这样的:
├─ Models ├─ Views ├─ Controllers ├─ Stores ├─ Helpers
首先,将他们创建为 Group(黄色的目录),用 Xcode 的项目导航里面的你的项目中。然后对每个项目里的文件,将它么连接到真实的文件目录 —— 通过打开它右边的文件检查器,点击小小的目录图标,在你的项目目录下创建一个和 group 同名的子目录。
本地化
一开始就应该把所有的显示给用户的字符串放进本地化文件。这样不仅仅为了翻译方便,同时也便于查找用户看见的文本。你可以在 build Scheme 中加入一个启动参数来指定特定的语言
-AppleLanguages (Finnish)
对于更复杂的翻译问题,比如复数(比如 "1 person" 和 "3 people"),你应该使用 .stringsdictformat 而不是一个普通的localizable.strings文件。在有了这个强大的工具来处理比如 "one", some", "few" 和 "many" 的情况。 当处理俄罗斯语和阿拉伯语的时候,你就不用急得抓耳挠腮了。
关于本地化的更多信息,看 2012年 2月的 Helsink iOS 会议的 幻灯片,大部分内容对现在也是适用的。
其它内容:https://github.com/oa414/ios-good-practices/blob/master/TRANSLATION-CN.md