老司機 iOS 週報 #20 | 2018-05-21

老司機iOS週報發表於2019-03-03

老司機 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』系列文章

上述四篇是一個系列文章, 圍繞一個核心問題來講述:如何使用現代的 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 這些庫裡見過 kfrx 的名稱空間,剛開始用的時候會覺得有點陌生,但習慣之後就會理解這是一種多麼優雅的程式碼組織方式,這篇文章會一步一步教大家如何實現這樣的名稱空間。

如果覺得英文閱讀比較困難的同學,也可以考慮一下看 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 上進行程式碼開發,實現了一個對照片進行微笑檢測的功能。

關注我們

我們開通了公眾號,每期釋出時公眾號會推送訊息,歡迎關注。

老司機 iOS 週報 #20 | 2018-05-21

同時也支援了 RSS 訂閱:github.com/SwiftOldDri…

本期編輯

@沒故事的卓同學@四娘@mmoaay@享耳先森@Damonwong@折騰範兒_味精@張嘉夫@AidenRao@Parsifal@aaaron7@方秋枋

說明

? 表示需翻牆,? 表示編輯推薦

預計閱讀時間:? 很快就能讀完(1 - 10 mins);? 中等 (10 - 20 mins);? 慢(20+ mins)

相關文章