第 1 章
開發工具、學習方法與 App 點子
你想要自己做一個 App 嗎?太好了 !做一個 App 是一件有趣且有益的經驗。我對於多年前第一次做出 App 時的喜悅依然印象深刻,儘管我做的 App 是很簡單且很基礎的。
在我們深入探討 iOS 程式之前,先仔細了解一下你開發 App 所需要的工具,並準備好學習iOS App 的開發。
開發App的所需工具
Apple 比較編好採用封閉系統,而不是使用開放系統。iOS 只能在 Apple 自己的裝置如 iPhone 與 iPad 中運作。和另外一個競爭對手— Google 不同的是,Android 系統可以在不同製造商所製作的行動裝置中運作。如果有志成為一個 iOS 開發者的話,表示你需要一台 Mac 才能進行 iOS App 的開發。
1. 需要一台 Mac 電腦
擁有一台 Mac 電腦,是 iOS 程式開發的基本要求。為了開發一個 iPhone(或 iPad ) App,你需要準備一台 Mac 電腦,執行 macOS 14.0 版本(或以上版本的作業系統)。若是你目前只有 PC,最便宜的方案是購買 Mac Mini。在撰寫本書時, Mac Mini 的入門版市售價格是台幣 18,900 元,你可以把它接到你的 PC 螢幕即可。我建議可以選擇配備 Apple M1 晶片的 Mac mini 基本款,這樣的配備已經足夠順暢的運行 iOS 程式開發工具。當然,若你有更多預算的話,可以購買更高階的中階版、高配版,或是搭載較佳的運算處理器的 iMac。
2. 註冊一個Apple ID
你需要一個 Apple ID 才能下載 Xcode,以及閱讀 iOS SDK 文件與其他技術資源。最重要的是,它可以讓你部署App 至 iPhone/iPad 來進行實機測試。
若是你曾經在 App Store 下載過 App,那很明確的,你已經有了一個 Apple ID。若是你之前從來沒有建立過Apple ID,則只要到 Apple 的網站 (https://appleid.apple.com/account) 跟著步驟來註冊即可。
3. 安裝Xcode
當我們要開發 iOS App 時,Xcode 是唯一需要下載的工具。Xcode 是一個由 Apple 所提供的整合開發環境(Integrated Development Environment,簡稱IDE),它提供你開發 App所有的工具。Xcode 包含了最新版本的 iOS SDK(Software Development Kit 的縮寫)、一個內建的程式碼編輯器、圖形化使用者介面(User Interface,簡稱 UI)編輯器、除錯(Debug )工具,以及其他的工具。最重要的是,Xcode 提供了 iPhone(或iPad )的模擬器,讓你不需要用到實體裝置也能測試你的 App。
當要安裝 Xcode 時,必須開啟你的 Mac 電腦的 Mac App Store 來下載。若是你使用最新版本的 Mac OS,你應該可以在 Mac 電腦下方的 Dock 工具列找到 Apple Store 的圖示,如圖 1.1 所示。如果找不到的話,你可能需要升級到新版的 Mac OS。
在 Mac App Store 中,搜尋「Xcode」,並點選「取得」(Get)按鈕下載,如圖 1.2 所示。
接著完成安裝程序後,電腦上的 Launchpad 就會出現一個 Xcode 的圖示,如圖 1.3 所示。
撰寫本書內容時,Xcode 是 15 版,因此本書會全部使用這個版本來建立相關的範例 App。即使你已安裝過之前版本的 Xcode,我仍建議你升級到最新版本,這樣可以讓你更容易跟著本書的課程來學習。
4. 註冊Apple 開發者計畫(可自行選擇)
進行 iOS App 開發時,最常被問到是否需要申請 Apple 開發者計畫( Apple Developer Program https://developer.apple.com/programs/ ) ,簡短答覆你:「可自行選擇」。首先, Xcode 已經包含了內建的iPhone 及 iPad 模擬器,你可以在自己的Mac 電腦上開發及測試 App,而不一定要加入 Apple 開發者計畫。
從 Xcode 7 開始,Apple 改變了有關於在實體裝置上建立以及執行 App 的政策。在此之前,你需要支付每年 99 美元才能夠在實體的 iPhone 或 iPad 部署與執行你的 App。而現在已經不需要先申請 Apple 開發者計畫,就可以在實體裝置上做測試。不過必須要告訴你的是,當你想要嘗試更多先進的功能,例如:在應用程式內購買( In-App Purchase )、推播通知與 CloudKit,你依舊需要申請開發者計畫會員。最重要的是,若是沒有支付 99 美元年費的話,則無法將你的 App 提交至 App Store。
那麼,現在該申請開發者計畫了嗎? Apple 開發者計畫每年要付99 美元,雖然不是太貴,但是也不是很便宜。當你在閱讀這本書時,很可能你只是一個開發新手,才剛開始要探索 iOS 程式開發而已。本書是針對初學者所撰寫的。我們會從簡單的部分入手,還不會馬上觸及進階的功能,直到你掌握了基本的技巧。
因此,即使你沒有馬上註冊開發者計畫,你還是可以跟著本書絕大部分的內容在實體裝置上測試 App。此刻不妨先節省成本,我會讓你知道何時該申請開發者計畫,屆時我會鼓勵你參加開發者計畫來發布 App 至App Store !
學習App的方式
自 2012 年開始以來,我透過部落格、線上課程以及開設親自授課的工作坊,來進行 iOS 程式教學,我發現了學習方法與心態對於學習是否成功會有很大的影響。在我談到 Swift 與 iOS 程式之前,我需要你調整好正確的學習心態,並了解什麼才是最有效率的程式學習方法。
親自動手寫
關於如何學習寫程式的常見問題之一是:
「學習 iOS 程式的最佳方式為何?」
首先,感謝你閱讀本書。我必須告訴你:「學習程式語言不能只是看書而已」。本書中有 Xcode、Swift 與 iOS App 開發中所有你必須學習的內容。
不過,最重要的是「採取行動」。
若是必須要給這個問題一個答案的話,我會說:「從做中學」,這就是我教學方法的關鍵。
我來稍微改變一下這個問題:
「學習英文(或任何其他語言)的最佳方式為何?」
「學習騎自行車(或其他各式運動)的最佳方式為何?」
你或許已經知道答案, 我特別喜歡在 Quora 中關於學習一門新語言的答案:
依照這個規則重複不斷:每天聽一小時、說一小時、發表一篇日誌。
- Dario Mars Patible
透過練習來學習,而不是只研究文法。學習程式和學習一種語言非常相似,你需要採取行動,如做一些專案或者練習作業。你必須坐在 Mac 前面,進入 Xcode 的世界並寫程式。過程中如果有做錯並不要緊,只要記得閱讀本書時,要開啟 Xcode 來寫程式。
了解學習App 開發的動機
為什麼你需要學習開發 App 呢?是什麼樣的動機讓你願意犧牲週末假日,來學習如何寫程式呢?
有些人學習 App 開發是為了錢。這並沒有對錯,你可能想要透過 App 來賺些外快,甚至想把它變成一項真正的生意,這點可以理解,誰不想擁有富裕的生活呢?
不過,至 2019 年 2 月,App Store 上已經有 220 萬支 App。將 App 上傳至 App Store, 然後期望一夕致富已經是非常困難的事。當賺錢是你開發 App 的唯一理由時,你可能很快就灰心並放棄,尤其是你看到像這樣的文章:
- 我在 App Store 賺了多少錢? (https://sitesforprofit.com/how-much-money-app-store)
現實是:售出 199 套= 總銷售額 US$ 209 =淨收益 US$ 135(我的淨利)。為了讓 App 能夠上架,我必須要付 $99 開發費。過了兩個月又一週之後,我的(稅前)利潤是 $36
- James
寫程式是有難度且具挑戰性的事情。我發現那些能夠精通程式語言的人,都富有強烈想開發 App 的渴望並熱衷於學習程式。他們通常都會將腦海中所浮現的想法變成真實。賺錢對他們而言,反而不是第一要關切的事。他們知道這個 App 除了可以解決他的問題之外,同時也能帶給其他人好處。有了如此強大的目標後,他們會克服任何障礙來完成。
所以請再次思考一下你的學習程式動機是什麼。
教學相長
「教學相長」是一句古老的諺語,在現代社會上依然適用。然而,你不需成為一個專家才能教學。我並不是指在大學授課或者在正式課堂上面對一群學生來教學的情形。教學不一定要透過這種方式才行,它可以像是和同事或隔壁同學分享你的知識這麼簡單。
試著找到一些有興趣學習 iOS 程式的朋友。當你學到一些新的知識,試著向某人解釋內容。舉例而言,當你完成第一個 App 之後,可告訴你親近的朋友,它是如何運作的,並教導他們如何建立一個 App。
如果你無法找到可以分享的夥伴時該怎麼辦呢?別擔心,你可以開始在 medium.com 或者你喜歡的部落格平台上,每天寫部落格文章,以將你所學習的內容加以歸納整理。
這是我在 Appcoda.com 發表了許多的教學文章以及出版我的第一本書後,所發現的最有效率的學習方法。
有時候,你以為已經很了解內容了,但是當你需要向某人解釋觀念或者回答問題時, 你也許會發現實際上你並沒有完整了解,這會讓你更認真地去學習內容。當你在學習 iOS 程式設計時,不妨試試這個方法。
具備耐心
意志力是面對長遠目標時的熱情與毅力。意志力是耐力的表現,意志力是日復一日對未來依然堅信不已。不是只有這週、這個月,而是年復一年。用心、努力工作,來實現所堅信的未來。意志力是將生活看作是一場馬拉松,而不是短跑。
- Angela Lee Duckworth 博士
我的學生會問我:「成為一位好的開發者,需要多少時間?」
要精通一門程式語言,並成為一位很優秀的開發者,通常需要數年之久,絕對不是幾週或幾個月就可以達成。
本書將帶領你開始這個旅程,你將學會 Swift 與 iOS 程式設計的基礎,最後做出自己的 App。也就是說,要成為一位專業的程式設計師,並建立一些不錯的 App,是需要付出時間的。
請具備耐心。對於你的第一個 App,不要把期望設得太高,只要享受這個過程,建立一些好玩有趣的作品。持續地閱讀與寫程式,最終你將精通這個技術。
發想 App 好點子
我總是鼓勵我的學生們在開始學習 App 開發時,能夠想出 App 的點子。這個點子不需要太大,你不需要馬上想出建立下一個 Uber 或者改變世界的 App。你只需要由一個很小且可以解決問題的點子來開始即可。
這邊提供給你一些例子吧。
我最常提及的一個經典例子是 Cockpit Dictionary , 它是由飛行員 Manolo Suarez 所開發的 App。他在學習 App 程式設計時,已經有了一個 App 的點子,這個點子並不特別,不過卻可以解決他自己的問題。有成千上萬的航空術語都是使用縮寫形式,即使有超過 20 年飛航經驗的飛行員,也無法記得所有的縮略詞與專業術語。與其把字典印出來,他想到建立一個給飛行員使用的簡單 App,可以利用這個 App 來查詢所有的航空術語。這個既簡單又很棒的點子,可以解決他自己的問題,如圖 1.4 所示。
另外一個例子是「NOAA Buoy Data」App, 雖然 App 已經從 App Store 下架, 我依然想以此為例,這個 App 的設計是取得國家海洋暨大氣總署(National Oceanic and Atmospheric Administration,簡稱 NOAA)的國家數據浮標中心(National Data Buoy Center,簡稱NDBC)的天氣、風與波浪的最新資料。這個 App 是由 Leo Kin 所開發,他是在手術後的復健過程中想到了這個 App,如圖 1.5 所示。
手術之後,我必須穿著護頸器好幾個月。在那幾個月中,我不能移動太多,即使走路或舉起手臂都很困難。我的物理治療師告訴我必須要儘可能地運動,來讓我逐漸萎縮的肌肉能夠回復。
有一個島離我的住家很近,我很喜歡去那邊散步。唯一的問題是它只能在退潮的時候過去。而一旦滿潮,除了游泳之外便無法回去。由於我的身體很虛弱,我非常害怕被困在這個島上而無法回去。當我在走路的時候,我總是查詢一下 NOAA 的網站,並檢查潮汐的高低是否讓我有足夠的時間能夠返回。
在某次散步時,我想到該建立一個 App,即使沒有人會使用這個 App 也不要緊,因為它可以幫助我追蹤潮汐的狀況,讓我能夠及時返家。
- Leo Kin
你也許對他的 App 不感興趣,但它能夠及時解決他所面臨的問題。或許在那個島上的人們,會因為他的 App 而獲得好處吧。
擁有一個 App 點子,可以讓你有更明確的學習目標與動機。現在花點時間,在下面寫下三個 App 點子:
UIKit 與 SwiftUI
那麼該學習何種框架呢?或許有些初學者聽過 UIKit 與 SwiftUI。有些人說你應該學習使用 UIKit 來建立 App,不過也有人叫你放棄 UIKit 改專研 SwiftUI,因為這是 Apple 全新的 UI 框架。
我猜你可能已經對這兩個名詞有所困惑,這裏很快做個介紹,讓你可以了解該將重點放在何處。
首先,這兩個框架都可以讓你建構非常棒的 App。UIKit 框架是原建的 UI 框架,自 iOS 第一次發布就內建在內。有了 UIKit ,你可以寫程式來建立行動裝置 App 的 UI 或者使用 Xcode 的介面建構器( Interface Builder )來設計 App 的佈局。不過有個缺點是,這個框架相對於 SwiftUI 而言更難學習。
SwiftUI 是以 宣告式(declarative) Swift 語法來開發 App UI。對你來說,這表示UI 程式編寫起來會更容易與自然。相對於目前的 UI 框架而言,你可以使用較少的程式碼來完成相同的 UI 設計。
預覽功能一直是 Xcode 的弱點,雖然你可以在介面建構器或者(Interface Builder,或者故事板Storyboard )預覽簡單的佈局,不過通常無法預覽完整的UI,除非 App 被載入模擬器(Simulator )才行。有了 SwiftUI ,Xcode 可以讓你一邊寫程式,一邊就可以立即看到 UI 的成果。舉例而言,你在表格中加入一筆新紀錄,Xcode 會立即在預覽畫布(Preview Canvas)上渲染(Render)UI 的更改。如果你想在深色模式(dark mode)預覽你的UI,你只要變更一個選項即可,這個即時預覽功能讓 UI 的開發更加容易,且更新的速度更快。
不只可以預覽UI,新的畫布也可以讓你使用視覺拖曳的方式來設計使用者介面。最棒的是,當你以視覺方式加入UI 元件時,Xcode 會自動地產生 SwiftUI 程式。程式與 UI 總是同步的,這是 Apple 開發者期待以久的功能。
重點來了,初學者該學習何種框架呢?
你應該先問一下自己為何要學習 iOS 程式語言。你最終的目標為何?是否打算成為一個專業的 iOS 開發者,並取得iOS開發的工作或者只是當作新興趣來學習呢?
如果你打算從事 iOS開發的工作,簡短的回答是兩個框架皆需要學習,但是最好是先學習 UIKit,因為許多的公司仍是使用這個框架來建立 App UI。這是你能取得 iOS 開發工作的必備技能,因此我建議先學習 UIKit,接著再學習 SwiftUI。
另一方面,如果你只把學習程式一種嗜好,或者以副專案方式開發App,我建議你可以直接跳到 SwiftUI 來開發。它可以讓你使用較少的程式碼來建立 App ,不過,你時常還是會需要用到 UIKit 的 UI元件,此時你可以學習如何使用特定的 UIKit 元件,所以這種情況下是先將重點放在 SwiftUI,接著才學習 UIKit。
本章小結
以上介紹到這裡,請花點時間在 Mac 上安裝 Xcode,然後想出自己的 App 點子。即使我在教學時所示範的 App 與你的App 不盡相同,你將學會所需的程式技巧來強化你的 App。
我們進入到下一章,開始以 Swift 來學習程式。
將一切準備好吧 !
本文摘自《iOS 17 App程式設計實戰心法》(Swift+UIKit)》一書。如果你想更深入學習Swift程式設計和下載完整程式碼,你可以從 AppCoda網站 購買完整電子版。