老司機 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 進行混合開發的經驗,主要是解決如下問題
- FlutterView 在一些小場景碎片化的問題。譬如短期內無法完成頁面級別的 Flutter 化,Native View 和多個 Flutter View 必須混合存在的情況。類似的還有 Feed 流中的 Flutter Cell,列表頁中的某些 ItemView 是 FlutterView。
- 記憶體管理問題:回收不活躍頁面佔用的記憶體
- 共享執行緒:收斂全域性執行緒為公共的4個執行緒
- SurfaceView 改 TextureView :主要是解決手勢動畫的問題
總結來說,位元組跳動客戶端基礎技術 Team 目前對於 Flutter 已經有了一定的研究,並且能夠支援到 View 級別開發,目前文中提到的方案正在進行公司內部開源審查程式,通過後會在位元組跳動官方 Github 上開源。
? 如何構建具有多種 Cell 型別的表檢視
iOS 開發中,可以說幾乎所有的專案都離不開 UITableView 的使用,甚至它的各種變形擴充套件都無處不在。UITableView 運用廣泛的主要原因在於其 Cell 的多變性,在 Cell 數量和順序恆定或展示內容相似的時候,這是比較常規的用法。但是當數量順序甚至展示內容不盡相同的時候,這是比較有趣又極具挑戰的。本文作者則指出傳統寫法在這種複雜情境中的弊端,並使用 MVVM 模式去構建這種動態試圖:
- 模仿伺服器響應,建立簡單 JSON 資料,將 JSON 對映到 Model
- 基於 Model 建立 ViewModel,它將負責向 UITableView 提供資料,ViewModel 具有一個 Item 陣列,它對應著 UITableView 包含的 Section 陣列
- 每種Cell 對應 ViewModel 中的 Item 屬性,可修改或者刪除資料而不需要做任何程式碼修改
這種模式最大的好處,就是在複雜業務情境下將業務和頁面區分出來,免去各種分支判斷及資料修改造成的大量程式碼修改,並且 ViewModel 也易被重用。
? UTF-8 String
文章內介紹了,Swift 5
將字串的編碼格式從 UTF-16
改成 UTF-8
,以此提高效能。Unicode-rich text
和 ASCII
在 5 之前,用 UTF-16
儲存,在這之後都用單個的 UTF-8
儲存。
選用 UTF-8
的原因:
- 在
ASCII
中UTF-8
比UTF16
佔用少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)會推送訊息,歡迎關注。
同時也支援了 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)