KKBOX iOS/Mac OS X 基础开发教材
这份教材是为 KKBOX iOS/Mac OS X 开发部门的新人训练设计的,目的是培养出可以开发、维护KKBOX 的iOS 与Mac OS X版本的产品 ,以及开发和维护我们其他软件产品的工程师。
写给谁的?
这不太算是一本入门的教材。编写这份教材的时候,我们假设的读者是已经写过半年左右的iOS 编程经验,甚至有一两个在AppStore上架的APP,因为毕竟是为了新人训练所设计,要我们雇用完全没有经验的iOS 工程师,我想也很困难(其实也有这样的案例,但真的为数不多)。所以我们假设在使用这份教材之前:
- 你已经会操作Mac 电脑,也知道怎么安装Xcode
- 你已经知道一些Objective-C 语法
- 你已经知道一些Foundation 控件怎么使用
- 你已经知道怎样使用一些UIKit 控件
- 你会使用Quartz 2D 画图
- 你知道怎么在iOS设备上进行真机调试。 以及真机调试的certificate 与provision profile
你可以期待在这份教材看到什么?
这份教材的主要方向是把一些iOS 工程师天天都在使用,但往往模模糊糊懵懵懂懂的观念说清楚,首先从Objective-C 这门语言是怎么运作讲起,再进一步讲解在iOS 与Mac OS X 装置上的GUI App 如何运作,中间也会带过一些重要的Design Pattern,在阅读的过程中再搭配实际练习,透过coding 实际体会这些重要概念,最后具备有coding,以及能够清楚解决各种问题的能力。
我们所重视的不是如何快速上手,不是如何用CocoaPods 或Carthage 的套件拼出一个App,而是偏重由下而上(Bottom-up)的学习:先了解整个开发框架的底层,以及整个框架的基本观念,然后才去一个个去看在这个框架中有哪些API、以及有哪些第三方library 可以使用。
这和我们的工作状态有关,在一些以项目为主的公司里头,可能注重的是如何快速完成项目、如何以最快的速度完成新App,交付App 之后就不再维护。但KKBOX 算是一个有一些年纪的产品,我们在2008 年九月推出第一版Mac OS X 版本,在2009 年一月推出第一版iOS 版本,一路从Mac OS X 10.4、 iPhoneOS 2 的时代写到现在,我们会花上许多时间解决、并且避免软件中出现的问题。需要我们对系统到底怎么运作要有一定的认识,才能够知道怎样阅读crash report,知道怎么快速定位问题并修正。
iOS 的技术不断变动,我们也多从不太会变动的基础概念着手。不过,我们也会按照KKBOX 自己的需要以及技术的改变,随时扩充或改变这份教材的内容。
同时,不同于坊间大多数的iOS 开发书籍,因为KKBOX 同时有iOS 与Mac OS X 的版本,在这份教材中,我们会同时讲到iOS 与Mac OS X,但如果同一个重要观念同时出现在iOS 与Mac OS X 中,会以iOS 为主。
在程式语言上,我们先讲解Objective-C,因为我们的主要产品大部分的code 还是用Objective-C 写成的,只有使用少量的Swift。而就我们的经验,学过Objective-C 之后,(只要搞定了Optional 这个语言特性)转换到Swift 上也不会花太多的时间。而且,就算先学了Swift 语法,还是得搞清楚selector、 protocol、delegate 等,而这些概念Swift 与Objective-C 还是互通的。
在各种API 与library 的介绍上,也以KKBOX 产品中会用到的为主,像我们在这份教材中,会打算讲Audio 相关的部份,绝大多数的iOS 开发者可能并不需要知道如何在iOS 上处理Audio,但KKBOX 是一家做音乐服务的公司。至于像游戏开发等,虽然我们之前也用过像Cocos2D 这些功能做过一些小专案,但不会在这边占上篇幅,毕竟这份教材完全是为了KKBOX 的需要而打造。
其实在这份教材中绝大多数材料,都可以在苹果文件与WWDC 影片中找到,苹果官方的文件比绝大多数的书籍都要详细,但这些资料非常多,当你想直接从苹果文件学习开发的时候,这份教材也提供一种在文件之海中探索的知识的方向。
虽然在叙述上,我们只能够按照章节顺序排列,但是在整个Cocoa Framework中,许多观念其实互为因果或是互相依赖,所以在某个章节中,可能会事先讲到跟后面章节有关的知识,但是先不要介意,如果遇到这样的状况,我们会在后面继续说清楚。