• Stars
    star
    182
  • Rank 203,385 (Top 5 %)
  • Language
    CSS
  • Created over 8 years ago
  • Updated over 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

KKBOX iOS/Mac OS X 基礎開發教材

2019 年前言

這份教材在 2015 年時釋出,當中主要累積了我們從 2008 年到 2015 年這幾年之間的開發 經驗,以及 2011 年到 2015 年之間的內部訓練教材。從 2015 年開始,蘋果平台上的相關 技術也都變化巨大,我們也不見得有時間可以更新教材,所以在您閱讀這份教材的時候,我 希望您可以注意:

  • 2015 年的時候 Swift 語言還並不穩定,而我們內部所開發的各種應用,都還是以 Objective-C 為主,所以這份教材花了大量時間解釋 Objective-C runtime 以及慣用的 pattern,從 2019 年回頭來看,隨著 Swift 語言與 ARC 的成熟,像是很多記憶體管理 相關的知識,其實已經不需要這麼多的篇幅,在最前面的幾章其實您可以選擇跳過。
  • 由於 UIKit 是用 Objective-C 寫的,所以也大量使用 Objective-C 慣用的 pattern, 像是 Singleton、Delegate、Notification Center、KVO 等,不過,隨著 Swift 5.1 與 SwiftUI、Combine 等純 Swift 的 framework 的出現,蘋果也慢慢走向宣告式、React式 的程式設計典範,但如果你還是需要用到 UIKit,即使你寫的是 Swift,我還是希望這份 教材中講解的 pattern 可以對您有所幫助。
  • 我們在公司內部已經大量使用 Swift,不過由於跟 Swift 有關的資源眾多,我們也就沒 有特地加上與 Swift 有關的教材,所以最近的一些更新還是因應我們內部的特殊需求為 主,像是與音訊處理相關的部份。

簡繁用語對應

由於我們身在台灣,在這本書當中也採用台灣慣用的技術名詞,所以如果您習慣簡體中文, 可能會不習慣當中的一些名詞。大抵上的對應如下:

  • 實作 -> 實現
  • 物件 -> 對象
  • 檔案 -> 文件
  • 記憶體 -> 內存
  • 記憶體漏水 -> 內存洩漏
  • 迴圈 -> 循環
  • 指標 -> 指針

回饋

這份教材

您如果發現任何的錯誤,可以直接在 GitHub 上發 Pull Request 修改,如果您有什麼問 題,也可以寫信到 zonble @ gmail . com 。

2015 年前言

這份教材是為了 KKBOX iOS/Mac OS X 開發部門的新人訓練所設計,目的是培養出可以開 發、維護 KKBOX 的 iOS 與 Mac OS X 版本,以及我們其他軟體產品的工程師。

寫給誰的?

這不太算是一本入門的教材。編寫這份教材的時候,我們假設的讀者是已經寫過半年左右的 iOS 程式,甚至有一兩個 App 在架上,因為畢竟是為了新人訓練所設計,要我們雇用完全 沒有經驗的 iOS 工程師,我想也很困難(其實也有這樣的案例,但真的為數不多)。所以 我們假設在使用這份教材之前:

  1. 你已經會操作 Mac 電腦,也知道怎麼安裝 Xcode
  2. 你已經知道一些 Objective-C 語法
  3. 你已經知道一些 Foundation 物件怎麼使用
  4. 你已經知道怎樣使用一些 UIKit 物件
  5. 你會使用 Quartz 2D 畫圖
  6. 你知道怎麼處理在 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中,許多觀念 其實互為因果或是互相糾纏,所以在某個章節中,可能會事先講到跟後面章節有關的事情, 但是先不要介意,如果遇到這樣的狀況,我們會在後面繼續說清楚。

More Repositories

1

CompassApp

Compass.app helps designers compile stylesheets easily without resorting to command line interface
Ruby
759
star
2

FireApp

Fire.app is a HTML prototyping tool with Sass/Compass/ERB/Haml/Slim/Markdown support
Ruby
616
star
3

spark-deployer

Deploy Spark cluster in an easy way.
Scala
75
star
4

OpenAPI-Python

The KKBOX Open API SDK for Python.
Python
69
star
5

OpenAPI-JavaScript

KKBOX Open API SDK for JavaScript.
JavaScript
66
star
6

android_kktoolkit

Java
46
star
7

redmine-trello-card-sync

Sync Redmine ticket to Trello card
Ruby
40
star
8

mass

A poorman's computer farm management system, based on AWS SWF, to handle a load of complex pipelines of batch jobs.
Python
31
star
9

mpdnsd-perl

Marco Polo DNS Daemon
Perl
30
star
10

OpenAPI-Android

KKBOX Open API SDK for Android.
Kotlin
21
star
11

KKCarPlayManager

Swift
21
star
12

LFLiveKitMac

Porting LFLiveKit to macOS
Objective-C
19
star
13

OpenAPI-ObjectiveC

KKBOX Open API Developer SDK for iOS/macOS/watchOS/tvOS
Objective-C
19
star
14

OpenAPI-Swift

KKBOX Open API Swift Developer SDK for iOS/macOS/watchOS/tvOS
Swift
13
star
15

fire-app-sample-project

SCSS
13
star
16

aws_configurer

Configure AWS accounts for CloudTrail, Root Account Usage Monitor.
Ruby
13
star
17

GoogleTranslateSketchPlugin

Google Translate Sketch Plugin
10
star
18

grafana-elasticsearch-dashboard

10
star
19

OpenAPI-Dotnet

The KKBOX Open API SDK for .Net.
C#
9
star
20

OSDC.tw.2013

8
star
21

OpenAPI-Dart

Dart
7
star
22

OpenAPI-PHP

PHP
7
star
23

compass-kktix

our own compass extension for Compass.app / Fire.app
JavaScript
4
star
24

KKBOXOpenAPISketchPlugin

KKBOX OpenAPI Sketch Plugin
3
star
25

OpenAPI-Swift-CommandLine

Swift
3
star
26

OpenAPI-Swift-Promises

Use KKBOX's Swift SDK in a promising way.
Swift
3
star
27

mirex2018-english-lyrics-alignment

Python
2
star
28

fireapp-site

CSS
2
star
29

jobs

A Repository for KKBOX Recruiting
2
star
30

mogilefs-exporter

Prometheus Exporter for MogileFS
Ruby
2
star
31

MGTwitterEngine

Objective-C
1
star