iOS最佳实践

jopen 10年前

对其他平台感兴趣?看看我们的 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-CSwift 语言的模板

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