老司機 iOS 週報 #38 | 2018-10-08

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

老司機 iOS 週報,只為你呈現有價值的資訊。

你也可以為這個專案出一份力,如果發現有價值的資訊、文章、工具等可以到 Issues 裡提給我們,我們會盡快處理。記得寫上推薦的理由哦。有建議和意見也歡迎到 Issues 提出。

新聞

TestFlight 開始支援邀請連結

在今年的 WWDC 中,蘋果就已經透露將在下半年推出 TestFlight 的公開連結邀請功能,現在這個功能已經正式開放。

另外 dustturtle 也第一時間分享了自己的實踐成果 - 千呼萬喚始出來 - TestFlight public link 功能正式釋出了!

Apple’s use of Swift in iOS 12

iOS 中使用 swift 的地方在持續增加,在 iOS 12 中包含 swift 的庫相比 iOS 11 增加了一倍。

Swift 5.0 Release Process

Swift5.0 離我們越來越近了,瞭解一下最近的進展吧

  1. 二進位制不向下相容,容易理解,Swift 新版本就沒有向下相容過
  2. 必須強制遷移 Swift3.0 的程式碼,不然你只能使用 Swift4.2 來編譯了
  3. 現在提供了 Swift5.0 的嚐鮮版
  4. 預計2018年11月16日對於 Swift5.0 是一個很關鍵的時間結點(真的嗎?)
  5. 希望你們會喜歡 Swift5.0 的新程式設計思想(又變?)

專欄

iOS 上修改私有方法的幾種方式解析

iOS 開發中,或多或少都會有遇到修改私有方法的需求,這篇文章總結了目前我們能夠使用的方式,並從面試官的角度推薦應聘者應該怎麼回答這類開放性問題。

文章

? Mirror 的工作原理

這篇文章主要介紹了 Mirror 的工作原理,Mirror 簡單來說就是用來做型別反射的 API,可以在執行時裡獲取例項的型別資訊,例如 Playground 裡的變數資料預覽就是基於這一套 API 來完成的。

文章主要分為兩個部分,第一部分是元型別的抽象(型別的型別),執行時函式動態派發的實現原理,第二部分就是 enum / struct / class / tupe 四種元型別各自的實現。

通篇看完感覺其實 Mirror 的實現非常直截了當,因為 Swift 的泛型功能要求它必須有足夠豐富完整的 Metadata,才能在執行時更好的描述泛型例項的存在,完成函式派發,屬性存取和型別轉換的工作。

在這麼一個背景下,Mirror 的實現基本就是從已有 Metadata 裡獲取型別資料,然後展示出來,或者是通過 Metadata 定位成員變數的相對位置,然後進行存取操作。

? AR Face Tracking Tutorial for iOS: Getting Started

Ray Wenderlich 的又發新教程了。這次是教你如何用 TrueDepth Camera 來做 AR 面部追蹤。

和往常一樣,他家教程類文章會有非常詳細的步驟和截圖,帶你一步一步的操作,非常適合對文章中涉及的知識領域不是很熟悉的同學們。

另外這篇文章也是免費教程的一部分,所以並不需要進行任何付費。

? Why #if DEBUG Conditional Should Be Avoided in Library Code

文章作者分享了一次自己使用 Carthage 匯入自己的庫時遇到的坑,來說明了為什麼在 SDK 的開發中儘量避免條件編譯指令,因為你不知道使用你 SDK 的人的編譯環境會有怎樣的變數,文章很短,算是一次有趣的小分享。

? [譯] Metal 渲染管線教程

Apple 在 2018 的 WWDC 上正式宣佈 OpenGL ES 標記為 deprecated,推薦使用 Metal 來做 3D 渲染,很有勇氣。在細緻的瞭解 Metal 後,就能發現蘋果的勇氣不是沒有原因的,Metal 幾乎最大限度的利用了 iOS 的硬體特性來提升效能,是 iOS 的首要選擇。

本篇文章的文風很像很多經典的 OpenGL 教程,從渲染的概念,流程講起,並一步步教你如何畫出第一個三維的物體,強烈推薦有興趣的同學仔細閱讀。

推薦人:史前圖騰

? beeshell:開源的 React Native 元件庫

文章介紹了美團所開發的基於 React Native 的元件庫,提供了一系列基礎 UI 元件,包括按鈕、彈窗、表單、輸入框等等,覆蓋了 iOS 和安卓兩端,並分析了一些設計理念。

? 從 FE 視角看大前端

大前端是現在比較流行的話題與方向,相信也有很多移動端的同學對這個方向有很濃厚的興趣,而這篇文章的目標閱讀群體剛好適合對前端 FE 感興趣的 Native 開發同學, 聚焦在 PC 和 H5 瀏覽器層面。可以讓你對前端開發有全景方式的瞭解, 以及引發大家的興趣。很多 native 開發可能苦於前端眾多的名詞,眾多的框架不知從何下手,這篇文章剛好適合你。

? UIField​Behavior

文章以懸浮框為例,講解了 iOS 物理引擎 UIKit Dynamics 中的 UIField​Behavior 的相關內容。首先描述了 Field Behaviors 是什麼,接著講解了 Spring Fields 怎麼用,最後結合 Behaviors 的一些特性實現了一個適用於開發除錯的懸浮框。

推薦人:WXGBridgeQ

? 巧妙實現 debugOnly 函式

作者在學習 Vapor 的原始碼看到一段不需要巨集定義的 debugOnly 函式實現。程式碼如下:

func debugOnly(_ body: () -> Void) {
    assert({ body(); return true }())
}
複製程式碼

對於大部分專案來說,這個功能看似沒有什麼用處,但是仔細考慮一下,對於一個可以被任何一個專案依賴的 SDK 來說,這個 debugOnly 實現可以說是很完美了。

? Bloom Filters and Swift 4.2

文中實現了 Bloom Filter,並使用了 Swift 4.2 中 Hasher 新特性來優化程式碼。

? 驢媽媽客戶端頻道頁模組化設計思路

對於做偏運營類的應用開發,有一項很重要的技術需求就是能夠做到對應用內容進行實時更新,而且是越靈活越好。本文就詳細介紹了驢媽媽客戶端團隊在 SOLID 原則的指導下,重點圍繞面向介面、資料驅動、模組隔離這三個點設計了適合自身業務場景的模組化框架。它既滿足了縮短內容上線週期的需求,也為建立一個統一規範的業務元件庫提供了思路和方向,同時框架的整體設計也是非常值得參考和學習的。

? INSIDE AUDIOKIT SYNTH ONE: A BRIEF TOUR FOR DEVELOPERS

本文的大部分內容是作者在對 Synth One 應用新增 AUv3 擴充套件時的開發筆記。後來他為了分享自己搗鼓開源專案 AudioKitSynth One 的經歷,就寫了這篇文章,也希望藉此幫助那些想要做類似 iOS 音樂合成器開發的人能夠快速瞭解框架內部的設計。

? 程式碼評審的不可能三角

Code Review 是保證程式碼質量的重要手段之一,但許多研發團隊中它常常由於各種原因並未得到真正的落地。為什麼會這樣呢?本文作者用一個非常簡單的觀點理解了這個現象,並據此給出一點優化的想法。希望本文的想法對同樣被評審困擾的同學有幫助 :)

? 利用函式組合提升程式碼可維護性

在平時的開發中,我們可能會遇到一些場景,開發起來,程式碼寫的很繁瑣,例如文中作者舉的例子:

process1(_ param: String) -> String
process2(_ param: String) -> String
process3(_ param: String) -> String
process4(_ param: String) -> String
複製程式碼

這種情況,如果直接採用函數語言程式設計,可讀性又不會太好。而為了重構讓程式碼變得具有更好的可維護性,作者利用函式的組合來解決這個問題。除了上面函式簽名致的例子,作者還提到了函式簽名不一致,以及非同步操作這兩種情況的解決方案。

推薦人:matthew

? MMKV中的簡單LRU快取(LRUCache)

本文簡明地分析了開源庫 MMKV 中 LRUCache 的實現。MMKV 中的 LRUCache 實現簡單易懂,文章中的原始碼也加上了註釋,大家看一遍這篇文章就能明白具體的實現原理。

? Migrating to Unified Logging, Swift Edition

本文介紹了一種更優雅的打log方式,使得開發人員不要再混亂地管理log程式碼

  1. 正確對待 OSLog,他本來就幫你分了 log 的等級
  2. Console.app 能夠幫你更好地檢視客戶端的 log (如果你用的是 os_log 的話)
  3. 儘量使用 os_log
  4. 更多應該注意的細節

程式碼

andreamazz/SubtleVolume

SubtleVolume 是一個音量條元件,也支援在 iPhone X(S/R) 的劉海上做文章,如果你的播放器需要一個自定義音量條,不妨看看它。

設計

一定要會的Sketch設計方法和工作流

泊學關於 Sketch 入門相關的視訊課程。

內推

關注我們

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

老司機 iOS 週報 #38 | 2018-10-08

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

本期編輯

@沒故事的卓同學@四娘@享耳先森@Damonwong@折騰範兒_味精@張嘉夫@AidenRao@Parsifal@aaaron7@方秋枋kyotom510230anotheren水水looping@JasonYuh@老老老老老老老驢@小非86

說明

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

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

相關文章