老司機 iOS 週報 #106 | 2020-03-23

老司機iOS週報發表於2020-03-23

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

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

新聞

App Store 對 COVID-19 相關應用的稽核要求

@享耳先森:蘋果此前發出通知:為了保證資料來源的可靠性,要求 COVID-19 相關應用必須以機構身份提交。同時,正常的稽核流程可能需要比較長的時間,鼓勵 COVID-19 相關應用在提交稽核時發起「TimeSensitive Event」請求優先稽核。

新手推薦

Determining which frameworks use UIWebView

@老峰:蘋果已經棄用了 UIWebView,從 2020 年 4 月開始將不再接受新的 UIWebView 應用,從 2020 年 12 月開始將不再接受老的 UIWebView 應用升級。本文介紹了檢測三方庫是否包含 UIWebView 的方法:

  • 原始碼:grep -r 'UIWebView' .
  • 非原始碼(.framework):nm .framework/ | grep -i UIWebView

文章

? ? 效能深度分析之 System Trace

@五子棋:作者從 Time Profiler 的原理出發,闡述了效能優化過程中僅僅使用 Time Profiler 的一些瓶頸。然後引出了平時大家可能較少使用的 System Trace。通過一個具體載入 Dyld Lib 的例子來直觀的對比 System Trace 能夠對效能優化起到什麼樣的 “補缺” 式幫助。最後作者還補充了一些技術原理,來幫助大家更好的理解效能優化中的一些關鍵點,總之是一篇具有深度的 Instrument 佳作。

? ? FlutterBoost1.0到2.0,我一共做了這幾件事

@CrazyCoderShi:FlutterBoost 目前已經來到 2.0 版本,在從 1.0 到 2.0 的過程中,踩了不少坑,本文是 FlutterBoost 小組對於升級過程中坑點的一個全盤解析,社群一直反饋的白屏和閃屏問題也在此次迭代中得到了解決。

? 基於時間輪片方式處理超時任務

@J_Knight_:如果每次判斷某個任務是否超時的時候都要開啟定時器的話,對效能上會帶來一定的消耗。本文作者參考了使用時間輪片的方式去處理 TCP 心跳連線的方案,實現了一個基於時間輪方式來處理超時任務的框架,從一定程度上避免了效能的消耗。作者結合了程式碼框架程式碼和使用示例進行了講解,並在文末附上了 demo。

推薦閱讀:時間輪片(Timing Wheel)實現心跳機制

? 一個不規範的 Category 寫法導致的“血案”

@含笑飲砒霜:文中舉例通過線上監控發現專案前後兩個版本在沒有較大改動的前提下,啟動時間縮短了並且包體積也變小了,然後追根朔源找到是因為一個 UIView 分類把實現寫在了標頭檔案導致。

因為這個分類會被工程中很多地方 import,而實現如果直接寫在標頭檔案中,相當於標頭檔案的內容直接 copy 到對應檔案,對應符號也編譯到了對應的 .o 檔案中,導致 .o 檔案變大,所以會導致包體積變大。另外由於是 copy 到多個檔案內,相當於生成了多個具有相同方法的分類,導致 UIView 的方法列表變長,進而導致在 UIView 訊息傳送過程中的查詢時間變長,因為又會導致啟動時間變長。

? MediaPipe - 跨平臺機器學習應用開發框架

@老驢:MediaPipe 是 Google 開發並開源的資料流處理機器學習跨平臺應用開發框架。作為基於圖的資料處理管線,MediaPipe 適用於視訊,音訊,感測器資料等這些時間序列資料。

框架主要想要解決的是效能,充分利用裝置功能等在跨平臺機器學習開發中比較有難度的問題。MediaPipe 同時還提供了視覺化圖編輯器,使用的時候,對新手更加友好。有興趣的童鞋們不妨來看看。

? Avoiding massive SwiftUI views

基於 UIKit 開發的應用程式,很容易使我們開發出 “Massive View Controller” ,因為 ViewController 通常承擔了過多的職責。SwiftUI 是 Apple 去年釋出的一個全新 UI 框架,它採用宣告式的介面開發方式,沒有各種 view controllers ,可以使我們更容易寫出低耦合的程式碼。但即便如此,如果要避免 “Massive View Controller” ,依然需要進行一些良好的設計。本文介紹瞭如何在基於 SwiftUI 開發的前提下,將 UI 分解成更小的模組,讓職責更單一,這會有助於我們寫出更易迭代和維護的程式碼。

工具

Profiling and debugging your Combine code with Timelane

@zvvingTimelane 是一個響應式程式設計除錯工具,結合 Instrument 提供更直觀、互動式的除錯過程,同時支援 Combine 和 RxSwift。這篇文章告訴你如何上手 Timelane,告別 print 的除錯方式。

GitHub 手機客戶端正式釋出

@xuyanlan:GitHub 手機客戶端已經正式釋出在了 Google Play 和 AppStore。

程式碼

FLUI

@loopingFLUI 是一個基於 Flutter 開發的 UI 框架,擁有完善的使用示例和文件,同時支援動態化渲染、Dark Mode 等特性,喜歡 Flutter 的同學可以好好學習研究一番。

內推

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

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

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

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

關注我們

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

老司機 iOS 週報 #106 | 2020-03-23

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

說明

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

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

相關文章