上週我們聊了第 1 部分,明確了要做一款《蝦票票》App~
今天我們來到第 2 部分,從 iOS 的發展歷史開始聊,然後使用 Xcode 創建一個 iOS 工程,再介紹工程裡常用的一些配置。
iOS 簡史#
iPhone 1 代誕生#
在 iPhone 出來之前,Apple 的兩款明星產品非 iMac 和 iPod 莫屬,而當時喬布斯就在想,那能不能把 iMac 縮小,或者把 iPod 擴大,從而做出一款手機呢?喬布斯把這個任務分給了兩個產品線,也就是 iMac 團隊和 iPod 團隊,可能你想不到,最後是誰成功了?
- 基於 iMac 強大的 macOS 系統,第一款 iPhone 有非常強勁的性能;
- 並且在大家想着怎麼做出各式各樣的手機鍵盤時,喬布斯則在想為什麼不把鍵盤作為一個軟件呢?這樣我想要什麼樣的鍵盤就能有什麼樣的鍵盤,並且還將擁有更大的螢幕和更輕的重量。
在 2007 年的 Apple 發布會上,喬布斯不停地重複三組詞:An iPod、A Phone、An Internet Comunicate、An iPod、A Phone...
原來最後他把三個功能組合到了一台設備上,這就有了我們的iPhone 1 代了!
當時他還提到了筆記本概念提出者 Alan Kay 曾說的一句話:
People who're serious about software should make their own hardware.——1970
那些熱衷於軟件的人也應該製作他們自己的硬件。——1970
三十多年後的 2007 年,Apple 也做到了,後來微軟其實也做到了。同時,Apple 對自己硬件的所有細節都了如指掌,算是真正做到了軟硬結合。
版本歷史#
- 最開始的 iOS 版本叫做 iPhone OS,到了第 4 個大版本,才叫 iOS,這個時候是把 iPod OS、iPad OS 和 iPhone OS 進行了融合;
- 到了 iOS 13 的時候,因為 iPad 一些獨特的功能,比如分屏、支持 Apple Pencil、文件系統等等,iPad OS 又被獨立出去了;
- 直到最近的 iOS 15。
參考:iOS 版本歷史——Wiki
系統特點#
相比另一主流系統 Android,iOS 的特點很明顯:
- 機型少,使用者相對少
- 生態封閉,少了自由和選擇,多了安全性、易用性、軟件更新及時性等等
- 主打高端市場,品牌是否溢價因人而異
這是 2017 年的時候 Apple 做了一個宣傳廣告,把自己的特點放大,用稍微浮誇的方式表現 Apple 的優點,感興趣可以去看看。
Switch To iPhone - Commercial by Apple——Youtube
iOS 工程創建#
下面回到正題~
新建工程#
類似於所有 IDE,新建工程無非就是這幾步:
- Create a new Xcode project
- 選擇 iOS-App,點擊 Next
- 填寫工程相關信息
- Team 可以不填,基本是在真機調試或者 App 上架時才有用
- Organization Identifier 一般是類似 com.organization_name 的形式
- 本項目基於 OC 語言,Interface、Life Cycle 以及 Language 都是固定的了
- 兩個複選框暫時不用管,也不用勾選
- 點擊 Next
後面選擇好了路徑即完成新建。
接下來介紹工程中比較常用的三個配置:App 圖標、啟動頁面相關以及 Info.plist 常用屬性
App 圖標#
新建工程後默認存在一個文件,只需往其拖入圖標即可
- 關注紅色箭頭
- 創建工程後,會自動生成 Images.xcassets 文件,這個文件可以建立很多圖像集,用來存儲圖片
- 拖動自己的圖片到 AppIcon 這個圖像集裡,也就設置好我們的 App 圖標了
- 至於怎麼設計自己的 App 圖標,就看個人發揮了~
- PS
- 如果想要豐富的圖標素材,可以去iconfont—— 阿里圖標庫看看
- 細心的你可能會發現圖片集裡有各種比例的圖標,它們可以通過Prepo應用(App Store 裡有)生成
- 在 iOS 10.3 後,Apple 加入了動態替換特性,其實我們在雙十一這種節日就可以體會到,App 圖標自動切換了,而並不需要重新安裝 App
- 步驟:設置 info.plist => 放圖片 => 調用 setAlternateIconName 方法
- 待會我們會提到 info.plist 文件
- 關於 App 的角標 Badge,比如微信 App 上顯示的未讀消息數,設置 applicationIconBadgeNumber 屬性即可
啟動頁面相關#
一個 App 啟動時展示的頁面實際上是由「啟動頁面 + 閃屏」組成,為什麼要有兩個頁面呢?
1)先說說啟動頁面,又叫 Launch Screen:
在新建工程時也默認生成了一個 LaunchScreen.storyboard 文件,顧英思義,故事板,其實類似一個畫板,可以通過添加一些 UIKit 組件來做自己的啟動頁面(關於 UIKit 組件的講解,請繼續關注本系列哦~)
同樣關注紅色箭頭,實際上我用了三張圖片(圖標 + 藝術字 + 藝術字)組成了這樣一個啟動頁面。
但是這個啟動頁面有一個特點,它的展示很快,不方便控制,所以有可能發生一種情況:啟動頁面消失了,而 App 裡的內容還沒加載出來,從而給用戶展示一個空的頁面。
2)所以就有了閃屏,又叫 Splash Screen:
它被使用的初衷就是避免在啟動應用後展示一個空的頁面給用戶。
它是被人為添加的,現在從 App 的實際使用中其實可以感受到,這個閃屏已經被延伸作為投放廣告、品牌推廣的利器了!
所以它的出現有時可能適得其反,讓 App 在初始化時還需要多加載一個頁面,比如淘寶 App,最近取消了廣告,我才發現原來之前啟動淘寶慢不是自己手機的問題。
在《Apple 人機交互手冊》裡寫了這樣一句話:
https://developer.apple.com/design/human-interface-guidelines/ios/overview/themes/
As much as possible, avoid displaying a splash screen or other startup experience.
盡可能避免展示閃屏或其它多餘的啟動體驗。
但每個公司的文化也大相徑庭,聽說微軟在這方面反而是鼓勵 App 通過閃屏擴大品牌效應~
Info.plist 常用屬性#
最後一部分其實是工程中至關重要的一個文件,它也是會自動生成的,主要提供 App 的一些基本配置。
關注紅色箭頭,該文件本質上是一個 XML 文件,下面介紹裡面的一些常用屬性。
1)Bundle identifier
- App 的唯一標識符,主要是在 App 上架時申請證書需要
- 格式類似於 com.<company>.<appName>,下面看看我們常見 App 的 Bundle identifier:
- com.tencent.xin
- com.tencent.mqq
- com.ss.iphone.article.News
- 應該都能猜到,可以看出格式也沒有唯一標準,比如最後一個頭條 App 的格式
- 參考
2)Bundle name
- App 的安裝包名,默認為新建項目時設置的 Product Name
3)Privacy 系列
- 權限相關的屬性,比如訪問相冊、攝像頭等等
- ⚠️:其 Value 值一定要寫清楚具體的用途,而不是單純的寫 “使用… 權限”,否則在上架時將面臨審核被拒的問題
PS:如果想在代碼中獲取上面這些屬性,可以通過下面的代碼獲取其字典,根據 Key 即可取到相應的 Value。
NSDictionary *dic = [[NSBundle mainBundle] infoDictionary];
- OC 語言裡調用方法的方式比較獨特
- 方括號 [] 表示方法調用
- [NSBundle mainBundle] 是調用的 NSBundle 類的類方法,返回一個實例對象
- 再通過實例對象調用其 infoDictionary 方法,返回一個字典對象
- 具體語法可參考Objective-C 函數—— 易百教程
下週再見👋#
我們會聊一聊:
- iOS 的系統架構
- UIKit 庫裡的重要成員
- UIView、UIViewController 以及它們各自的繼承關係
- 各個組件的基本使用和特性
❗️現在你可以嘗試新建你的第一個 App 了!給它添加一個 App 圖標,設置它的啟動頁面,修改相關的 info.plist 屬性~