Ethan Huang's blog

iOS 12 相關技術新知

iOS 12 的新消息自從 WWD18 以後已經很多了。以下是 iOS 12 正式發表之際的資訊:

另外還有一些 apps 的更新:

fastlane.ci 停止開發

4 月提到的 fastlane.ci 現在已停止開發。😅

說明:

As we were building fastlane.ci we realized that it wasn’t going to cover all the requirements we wanted to support. We are currently in the process of re-evaluating our approach and are actively working on a better solution, subscribe here to be the first one to be notified about any upcoming launches.

還在等待的朋友可以去找別的解決方案了。

iOS 12 普及率預測與觀察

今年 WWDC 發表 iOS 12 beta 版以後,由於效能優化的評價良好,基於口碑效應,我就跟人家說這可能會是有史以來升級最快的一版。

不過不能只是說說而已,「最快」要怎麼衡量呢?

我的操作型定義是:

從 iOS 7 開始算起,用 Mixpanel Trends 的數據,觀察過去幾年每一版 iOS 正式版開放下載到市占率超過前一版所花的天數。

以下表格是我根據數據整理出來的:

Version Release 25% Cross 50% 75% Final % Source
iOS 12 2018/9/17           📈
iOS 11 2017/9/19 +7 4️⃣ +20 +26 +90 90.81% 📈
iOS 10 2016/9/13 +4 🥉 +16 +18 +89 91.27% 📈
iOS 9 2015/9/16 +3 🥈 +8 +11 +68 86.36% 📈
iOS 8 2014/9/17 +3 5️⃣ +27 +32 +146 90.50% 📈
iOS 7 2013/9/18 +1 🥇 +3 +3 +33 95.06% 📈

Cross 欄是該版正式開放直到與前一版黃金交叉所花的天數。Final % 欄是該版本的下一版正式開放前夕的市占率。Source 欄要注意的是 Mixpanel 網址所帶日期參數為相對數字。


表格剛出來就打臉自己了😅。看到 iOS 7 這種輝煌的成績,未來除非是 UI 風格大改版,應該是難以突破了啦🤪。

第二名的 iOS 9 也相當驚人,那一版的助力應該是大幅縮小升級所需的容量(在那個 16 GB 為基本款的年代),加上續航力大幅提升🔋,最為有感。

影響使用者升級的因素很多,其中一個是口碑*。iOS 12 的口碑就是跑起來明顯順很多,連比較舊的機種也變快了。衝著這一點,許多使用者應該是迫不及待升級才是。

如果這點成立的話,那我猜 iOS 12 跨過 11 的黃金交叉應該不會輸給 iOS 9 的 8 天太多才是。

本文寫在 iOS 12 正式開放下載當天。待續…


* 另一個可能是出了新的 emoji 🤣

在 Xcode 10 模擬器上跑 Xcode 9 build 的 app

如果還不急著切換到 Xcode 10,可以使用這個技巧來測試 Xcode 9 build 出來的 app,跑在 iPhone XS Max / XR 模擬器的情況:

  1. 用 Xcode 9 選一個模擬器為目標來 build
  2. 在 Products/OOO.app 上按右鍵、Show in Finder
  3. 打開 Xcode 10 的 Simulator app,Hardware 選 XS Max 或 XR
  4. 從 Finder 裡把 OOO.app 拖拉到上述的 Simulator 視窗裡(會安裝)
  5. 點開 app 來觀察狀況

以上方法來自這篇文章的 Wait, What Did You Say? 那一段。

發表會後搶先版:iPhone XS Max 與 XR 開發注意事項

2018 蘋果秋季發表會在 9/13 結束了。iOS 開發工作要注意什麼?

  • 新裝置的官方的教學影片系列
  • 更新版的 HIG
  • iOS 12 GM 已開放下載
  • Xcode 10 GM 已開放下載,可以升級到 Swift 4.2 了
  • 可以用 iOS 12 SDK 上傳至 App Store 了
  • 如果要上傳新版,原來是 iPhone X 的 5.8 吋的可選截圖已增加 6.5 吋,如果上傳 6.5 吋會自動產出 5.8 吋版本
  • Build 自己的 app 試跑 iPhone XS Max 跟 XR 看 UI 是否正常。例如這種同時有橫版、home indicator、瀏海的排版。參考
  • 這兩款的螢幕不同但是 pt 相同,設計時可視為同一種尺寸。XR 要 10 月才開賣。基本上支援好 XS Max 就可以了
  • iOS 11 SDK 有支援上述兩款新機的解析度,所以如果你的 app 是用 Auto Layout 而不是寫死來支援 iPhone X 的話,還不需要急著重新上傳 App Store。來源
  • iPhone XS 螢幕解析度跟 iPhone X 一樣
  • 各種螢幕解析度的差別可以參考這篇
  • 如果你是第一次載 Xcode 10 來用,然後發現 app build 不過,請注意 Xcode 10 預設用 New Build System。如果要改回舊的請去 File/Workspace or Project Settings 改成 Legacy。詳情請見 Xcode release notes

FoundationDB

蘋果今天將一套 noSQL 資料庫軟體 FoundationDB開源出來。這個名字很蘋果。釋出的版本是 5.1.5,看來有點歷史了,但之前沒聽過。出於好奇查了一下它的背景。

FoundationDB 本是一間 startup,以及同名開源資料庫軟體。蘋果在 2015 年把這間公司買下後把軟體閉源,作為內部使用。現在又重新開源起來。

(根據當年 Business Insider 的報導,蘋果收購與閉源 FoundationDB,造成不少公司的麻煩啊…)

至於 FoundationDB 軟體本身是幹嘛呢?資料庫我實在不是很懂,不過看了一些介紹,它擅長做大型分散式服務,不僅高效、有彈性,而且還具有硬體成本優勢。

據說蘋果是把它用在 iMessage 等大型服務的設施上(品質應該比什麼 UIKit、Swift、Xcode 之類的好得多吧 😂)。既然重新開源了,可以觀察一下。

git 不能保證專案在每台電腦上的狀態完全一樣

A quick reminder for iOS dev: git status clean != everything the same between 💻 machines 🖥:

  • Files in .gitignore: Non-shared Scheme/Workspace settings 🛠
  • Empty folders: Search Paths 👀
  • Case-insensitive FS: Change name case of files in .xcassets, crash on #imageLiteral 💥

git 不能保證專案在每台電腦上的狀態完全一樣。以我曾遇過的坑為例:

  • 列在 .gitignore 的檔案:scheme 或 workspace 的設定,如果不是 shared,每台電腦可以完全不一樣。天差地遠
  • 空的資料夾:同事換了 framework 的位置,但 Header Search Paths 設定沒拿掉舊的。他的電腦可以 build,我 pull 後卻不行,因為我的空資料夾還在
  • 檔名不區分大小寫的檔案系統(Mac 預設):把 xcassets 底下的檔案大小寫改掉。git 看不出來差異,build 得過,但是 runtime 時 #imageLiteral 這種 code 會 crash

不是要提出解法,只是講一下有這些坑

Modern iOS dev life

  • Xcode 9.2 for main project until its next release⌛️
  • Xcode 9.3 for iOS 11.3 development and Swift 4.1 side project. High Sierra required⛰️🧗‍♀️
  • Xcode 9.4 beta for iOS 11.4 beta⚠️

Also, never get Xcode via MAS🚫. Directly download from /download/more/

簡單說一下 fastlane.ci

昨天 4/7 在 @johnlinvc 的大力協助之下,fastlane 開發團隊成員 Felix(@KrauseFx) 與 Josh(@taquitos) 在 iCHEF 樓下的場地介紹了 fastlanefastlane.ci

fastlane 大家比較熟悉,就是把行動應用開發中,主要跟認證簽署及發佈相關的流程(當然還有更多)給自動化,並且統統加入版控。優勢是開發工具的環境設定都可以在 repo 裡面一起管理。

這樣一來,就算你今天換個地點、換了一台電腦,或是來了新夥伴,只要能夠 checkout 就可以無縫接軌。這精神在其中的套件 match 尤其徹底發揮。(這會讓人想把整個系統會用到的設定都給版控化,不過這是另一個題目了)

基於同樣的理念,fastlane.ci 是把連續整合的流程也版控化。如果有用過 Jenkins 或其他 CI 系統就會知道環境設定有多麻煩,還很難管理。用 fastlane.ci 的話,原則上架設一台新的 CI 只要 checkout 就可以掛好所有設定,然後工作流程就可以繼續囉。

fastlane.ci 前幾天才剛 alpha,昨天則是首次 live demo👏,Felix 跟 Josh 他們建議至少到 beta 再來用。當然你很勇敢也可以 alpha 就來玩,然後認真報 bug。fastlane.ci 是完全開源的,有興趣的話也可以 contribute。另外就是他們強調團隊會有 Google 的 designer,所以到時候一定會比某 CI 好看、好用😂

我個人是 fastlane 的長期愛用者,對 fastlane.ci 相當期待!