老司機 iOS 週報,只為你呈現有價值的資訊。
你也可以為這個專案出一份力,如果發現有價值的資訊、文章、工具等可以到 Issues 裡提給我們,我們會盡快處理。記得寫上推薦的理由哦。有建議和意見也歡迎到 Issues 提出。
專欄
? ? 再談 iOS App Crash 防護
我們老司機 iOS 專欄內最新出爐的一篇文章。作者分析了幾種可能的 Crash 防護方案,並結合自己實踐網易 Baymax 防護方案中遇到的各種問題,給出瞭解決方法,也提出了自己對這套方案的一些思考。
新聞
MongoDB 官方提供對 Swift 原生支援
MongoDB
是一個基於分散式檔案儲存的開源資料庫系統。現在官方在 C 驅動(libmongoc
)的基礎上,用 Swift 進行封裝,提供 Pure Swift 驅動。這或許表明 Server-side Swift 越來越成熟,期待不久的將來能看到大規模應用。
文章
? ? 關於 MVC 的一個常見的誤用
如何避免把 Model View Controller 寫成 Massive View Controller 已經是老生常談的問題了。我們可以通過
MVVM , Reactive 模式或 Reducer 模式等進行優化改造。但比起模式和框架,更重要的是認識到解決的問題本質在於:我們要如何才能更清晰地管理“使用者操作,模型變更,UI 反饋”這一資料流動的方式。本文則是通過一個簡單的 To Do 列表來闡述如何清晰地管理資料流動。
? Flutter 原理簡解
Flutter 可以說是近期最熱門的一個開發框架了,上週已經推過一篇 Flutter UI 繪製流程的文章,本篇文章也 cover 了一部分繪製的流程,不過與之前 focus 在 layout 環節不同, 本篇文章的渲染部分主要講解了 Flutter 是如何通過 Skia 框架將 layout 之後的元素提交給 GPU 進行繪製。 除此之外,文章還分析了 Flutter 引擎的元件架構以及一些安裝配置教學。
簡單來說有用的內容不少,不過結構有點亂,看起來略費勁。(逃。。
? 『如何使用現代的 App 工程與架構的技術來構建我們的 App』系列文章
- How to refactor your app to add unit tests
- How to add CocoaPods to your project
- How to clean up your code formatting with SwiftLint
- How to streamline your development with Fastlane
上述四篇是一個系列文章, 圍繞一個核心問題來講述:如何使用現代的 App 工程與架構的技術來構建我們的 App。不得不說作者寫的是很良心的,整體文風對新手都很友好而且做到了循序漸進、抽絲剝繭的敘事邏輯,是不可多得的專案教程。
系列文章從一個普通的、設計缺乏考量的 demo 工程開始,首先為其新增了單元測試框架的支援,然後整合了 CocoaPods 來管理第三方的依賴,引入了 SwiftLint 來對程式碼進行靜態檢查,最終介紹瞭如何配置 Fastlane 來把傳統打包提審流程中最繁瑣的截圖步驟給自動化。基本涵蓋了現在的 iOS App 專案的核心工程要素,尤其適合小公司的“多面手”型工程師閱讀。
? Tips for using Xcode Playground
雖然 Xcode Playground 老愛崩潰,但 Playground 的確很適合測試一小段程式碼。文章介紹如何設定手動執行,來降低 Playground 的 CPU 使用率及崩潰率,以及如何為手動執行新增 ⌘R
快捷鍵。另外 Playground 在最後一行程式碼執行完畢之後就會立即停止,並不會等待還沒有執行的非同步回撥,可以設定停止方式為手動停止,或者程式碼來控制停止。
? Running Xcode Playgrounds on Travis CI
Playgrounds 是一個很好的展示程式碼的方式。Mattt 新寫的 Guide to Codable 就是基於 Playgrounds 去傳遞他的想法。而他為了解決及時發現自己的程式碼還是否適配最新的 Swift 版本和 SDK 版本,藉助了 Travis CI 自動的去檢查版本的適配。
? TouchID 和 FaceID 實戰使用的一些經驗
LocalAuthentication
雖然只有 LAContext
一個 class,但並不代表清晰好用,其文件不夠清晰甚至有錯誤。作者在實際 App 中使用過 LocalAuthentication
之後列出了文件的一些錯誤並給出了許多最佳實踐。
? 手機京東技術團隊對iOS自動化埋點探索
客戶端埋點是產品分析使用者資料的重要途徑,常見的埋點方式有以下三種:
- 程式碼埋點,最直接的手動埋點方式,由開發人員完成;
- 視覺化埋點,本文將會介紹的方式,可由埋點維護人員自行完成;
- 無埋點,相當於全埋點,網易 HubbleData 中有使用到。
本文整體介紹視覺化埋點的使用方式和技術細節,另外針對視覺化埋點中遇到的問題,嘗試給出解決方案和並提出了一些思考。
? 如何在實現類似於 rx 的名稱空間
大家應該在 Kingfisher 和 RxSwift 這些庫裡見過 kf
和 rx
的名稱空間,剛開始用的時候會覺得有點陌生,但習慣之後就會理解這是一種多麼優雅的程式碼組織方式,這篇文章會一步一步教大家如何實現這樣的名稱空間。
如果覺得英文閱讀比較困難的同學,也可以考慮一下看 Enjoy 的 iOS 工程師寫的這篇博文 Swift 名稱空間形式擴充套件的實現。
? 監控啟動崩潰
一套監控啟動閃退的方案,與以前通過檢測 App 在某段時間後是否仍然存活的方式相比,這套方案的檢測時機更加提前,通過 hook msg_send
函式實現,並且自己處理了 crash 後的日誌上報功能。
程式碼
Parade
Parade 是一個簡單易用的視差效果引擎,適用於基於 UIScrollView 任何檢視。除了簡單易用以外,Parade 的原始碼和示例程式碼質量都很高,是一個不錯的 Swift 開源庫。
ClassicKit
一套 Windows 95 風格的 UI 樣式庫。比較有意思的是它支援 @IBDesignable
,這樣就可以在 Xib 或者 Storyboard 中直接檢視效果。
工具
Scheduling Services
一個微型 Swift 計劃服務框架,基於 NSNotification 實現,用於計劃未來(重複的)事件。使用 Codable 持久化任務內容,支援儲存和恢復事件狀態,API 簡單、清晰。
? Catching smiles with Google’s ML Kit on iOS
Google I/O 大會推出了谷歌的全新移動端機器學習框架 MLKit,可以實現在本地跑機器學習模型的能力,各方面都很像蘋果已經推出的 CoreML 框架。這篇文章教大家如何使用 MLKit,包括設定 Firebase 服務,然後在 iOS 上進行程式碼開發,實現了一個對照片進行微笑檢測的功能。
關注我們
我們開通了公眾號,每期釋出時公眾號會推送訊息,歡迎關注。
同時也支援了 RSS 訂閱:github.com/SwiftOldDri… 。
本期編輯
@沒故事的卓同學,@四娘,@mmoaay,@享耳先森,@Damonwong,@折騰範兒_味精,@張嘉夫,@AidenRao,@Parsifal,@aaaron7,@方秋枋
說明
? 表示需翻牆,? 表示編輯推薦
預計閱讀時間:? 很快就能讀完(1 – 10 mins);? 中等 (10 – 20 mins);? 慢(20+ mins)