老司機 iOS 週報 #60 | 2019-03-25

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

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

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

新聞

3 月 27 日起上傳 App Store 最低需須使用 iOS 12.1 SDK 編譯

Apple 釋出公告:請注意,自2019年3月27日起,iPhone 或 iPad 的所有新 App 和 App 更新(包括通用 App)都需要使用 iOS 12.1 SDK 構建並支援 iPhone XS Max 或 12.9 英寸 iPad Pro(第 3 代)。還需要提供這些裝置的螢幕截圖。Apple Watch 的所有新 App 和 App 更新都需要使用 watchOS 5.1 SDK 構建,並支援 Apple Watch Series 4。

新手推薦

? Flutter 您需要知道的知識點

最近整理週報的時候發現關於 Flutter 的文章一下子多了起來,看來最近研究 Flutter 的人應該有不少,不過我覺得對於大部分讀者來說,目前對於 Flutter 還是處於一個萌新的狀態,所以為了能看懂一些先行者到底在講什麼,這周給大家推薦兩篇比較基礎的文章:

這篇文章主要講了 Flutter 是什麼,能做什麼,什麼樣的人適合使用 Flutter 以及 Flutter 需要怎麼樣入門以及如何使用。

在看完上面一篇文章的基本介紹之後,就要了解一下 Flutter 裡面的內容了,這篇文章大概介紹了關於 Flutter 的 SDK 主要功能,支援的編輯器,開發的靈感來源以及是否包含測試框架等一系列問題。

? UIApplicationDelegate 中方法的呼叫順序

本文介紹了在 UIApplicationDelegate 中的各個方法在各個不同狀態下啟動和開啟是所呼叫順序。

文章

? 即將開源 | 讓 Flutter 真正支援 View 級別的混合開發

本文介紹了今日頭條主客戶端上接入 Flutter 進行混合開發的經驗,主要是解決如下問題

  1. FlutterView 在一些小場景碎片化的問題。譬如短期內無法完成頁面級別的 Flutter 化,Native View 和多個 Flutter View 必須混合存在的情況。類似的還有 Feed 流中的 Flutter Cell,列表頁中的某些 ItemView 是 FlutterView。
  2. 記憶體管理問題:回收不活躍頁面佔用的記憶體
  3. 共享執行緒:收斂全域性執行緒為公共的4個執行緒
  4. SurfaceView 改 TextureView :主要是解決手勢動畫的問題

總結來說,位元組跳動客戶端基礎技術 Team 目前對於 Flutter 已經有了一定的研究,並且能夠支援到 View 級別開發,目前文中提到的方案正在進行公司內部開源審查程式,通過後會在位元組跳動官方 Github 上開源。

? 如何構建具有多種 Cell 型別的表檢視

iOS 開發中,可以說幾乎所有的專案都離不開 UITableView 的使用,甚至它的各種變形擴充套件都無處不在。UITableView 運用廣泛的主要原因在於其 Cell 的多變性,在 Cell 數量和順序恆定或展示內容相似的時候,這是比較常規的用法。但是當數量順序甚至展示內容不盡相同的時候,這是比較有趣又極具挑戰的。本文作者則指出傳統寫法在這種複雜情境中的弊端,並使用 MVVM 模式去構建這種動態試圖:

  1. 模仿伺服器響應,建立簡單 JSON 資料,將 JSON 對映到 Model
  2. 基於 Model 建立 ViewModel,它將負責向 UITableView 提供資料,ViewModel 具有一個 Item 陣列,它對應著 UITableView 包含的 Section 陣列
  3. 每種Cell 對應 ViewModel 中的 Item 屬性,可修改或者刪除資料而不需要做任何程式碼修改

這種模式最大的好處,就是在複雜業務情境下將業務和頁面區分出來,免去各種分支判斷及資料修改造成的大量程式碼修改,並且 ViewModel 也易被重用。

? UTF-8 String

文章內介紹了,Swift 5 將字串的編碼格式從 UTF-16 改成 UTF-8,以此提高效能。Unicode-rich textASCII 在 5 之前,用 UTF-16 儲存,在這之後都用單個的 UTF-8 儲存。

選用 UTF-8 的原因:

  • ASCIIUTF-8UTF16 佔用少50%。
  • 高相容性(對作業系統,開發工具,C / Objective-C 橋接)。
  • 減少程式碼大小和編譯時間成本。
  • 無需修改現有程式碼。

更加詳細的說明,請開啟連結。

? Mastering the VIPER architecture

作者介紹了面向協議程式設計在 VIPER 架構上的實踐,並結合程式碼示例講解了 Module, Presenter 和 Entity 協議的定義和使用方法。

推薦閱讀:

? Swift AVFoundation framework — Text-To-Speech tool

本文介紹了 AVFoundation 文字轉語音的相關介面,並詳細介紹了 AVSpeechSynthesizer, AVSpeechUtterance, AVSpeechSynthesizerDelegate 在實際應用中的流程與注意事項。

? Better tests for delegates

文中介紹了兩種測試 delegate 呼叫的兩種決策:面向實現、面向行為。在面向實現過程中,我們更多的關注狀態變化,需要更多的測試 delegate 響應方法的實現。而在面向行為的決策中,我們不需要關注其引數細節,只需要關注其實現的內容。

工具

CocoaPods 歷險 - 總覽

是否應該使用 CocoaPods 在幾年前還是一個爭論不休的問題,然而現在,但凡稍具規模的專案,就沒有不使用 CocoaPods 的。作為一個三方庫版本管理的工具, CocoaPods 對於元件的拆分粒度是非常細微的,我們所呼叫的 pod 命令都是執行本地對應目錄下的指令碼,那這些指令碼檔案到底執行了什麼呢?本文主要分析了 pod install 命令執行的詳細過程,當我們知道大致過程後,就可以對其做一些修改和控制,以達到我們的預期。

程式碼

Snail: An observables framework for Swift

一個輕量級的 observables 庫,不用 KVO & RxSwift 也可以輕鬆觀察變數的變化 & 響應事件了。

swift-log

官方的日誌介面包(Logging API package),使用方(比如 Swift 服務端、跨平臺的應用或庫)可以根據自己的需求配置 log 輸出的具體實現。

音視訊

ggtalk | 區塊鏈到底能幹嘛?

區塊鏈近年來一個是技術圈的熱點,風頭甚至蓋過了 AI,不少技術圈的名人也紛紛投身了區塊鏈相關的創業中。本期 ggtalk 邀請到了微博上鍊圈名人賞味不足,來一起聊聊區塊鏈的一些入門知識,強烈推薦感興趣但一直沒入門的同學收聽。

內推

老司機週報團隊聯合知識小集和 SwiftGG 翻譯組收錄了一份靠譜的內推職位。

如果你想找工作,點這裡:www.yuque.com/iosalliance…

如果你想招人,點這裡:www.yuque.com/iosalliance…

當然,也歡迎你關注我們每一期的週報,我們會在每期週報底部及時更新編輯內推崗位。

關注我們

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

老司機 iOS 週報 #60 | 2019-03-25

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

本期編輯

@四娘@享耳先森@Damonwong@折騰範兒_味精@張嘉夫@Parsifal@aaaron7@kyo@tom510230@anotheren@水水@looping@老老老老老老老驢@小非86@邦ben@紅紙@含笑飲砒霜@JimQ@老峰@zvving@J_Knight_@極速男孩

說明

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

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

相關文章