老司機 iOS 週報 #83 | 2019-09-09

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

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

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

新聞

App Store Connect warning: UIWebView API deprecation

@looping:上月(8月)底陸續有人在打包上傳到 App Store 時收到蘋果稽核的反饋郵件,提到他們將會停止接收還在使用 UIWebView API 的應用,希望開發者在下次提交的時候處理好這個問題。同時在 GitHub 上觀察到有使用 UIWebView 的大部分主流開源庫也收到了開發者提的蘋果廢棄 UIWebView API 的 issue,並且很多庫都已經做好了更新。雖然蘋果提醒開發者處理這個問題,但是沒有給出稽核規則具體的執行時間,所以應該會預留一些時間供開發者對工程程式碼進行技術遷移。為了應對這個問題,我們建議接下來做好以下幾個事情:

  • 列出自己工程裡有用到 UIWebView 的地方,並想辦法逐步遷移到 WKWebView
  • 關注工程裡用到的開源類庫和三方 SDK,有更新的及時更新
  • 做好準備,等待蘋果稽核的進一步訊息

新手推薦

? 從 Flutter Go 到 Flutter Go web - 手把手帶你輕鬆玩轉 Flutter-web(一)

@極速男孩:Google 在今年的 Google 大會中釋出了 Flutter for Web ,本文介紹瞭如何使用 Flutter-go-web 去建立一個 flutter-web 的專案,並給出了具體示例

文章

? 在閒魚實習做 Flutter 是什麼感受?

@老峰:本文作者分享在閒魚學習上手 Flutter 的過程,通過重構釋出頁,熟悉專案工程,熟悉專案流程,學習並優化已有框架。最後也給出了 Flutter 的初步學習路線,以及對職場新人的建議,感興趣的讀者可以看看。

? ? Should you write your app in SwiftUI?

@水水:本文就是否應該在你的 APP 中使用 SwiftUI 進行了討論,列舉了比較完整的幾個優缺點進行對比,希望給猶豫不決的讀者有所啟發和更進一步的瞭解。

? iOS除錯Block引用物件無法被釋放的一個小技巧

@J_Knight_:而本文作者介紹了一種使用 dis -s 指令來檢視 block 所對應的實現程式碼的方法:通過在 lldb 控制檯輸入 dis -s [block 地址],就可以反彙編該地址所對應符號資訊以及開始一部分的彙編實現,我們就可以知道該地址所對應 block 所在的方法了。

? 馬蜂窩視訊編輯框架設計及在 iOS 端的業務實踐

@蓮叔:視訊拍攝與視訊編輯模組逐漸成為很多超級 App 的必備模組之一。除了像抖音和快手這樣的短視訊應用,像比如點評和馬蜂窩這樣的 O2O app在面臨內容形式從圖文到視訊,生產方面從 PGC 到 UGC 的轉變下,都需要在 APP 中實現視訊拍攝和編輯模組。視訊編輯模組相比傳統的客戶端元件,技術棧除了平臺的 API 之外還包括一系列音視訊處理的知識,存在一定的門檻。馬蜂窩這篇文章比較系統的介紹在在 iOS 上實現一套視訊編輯框架需要做的事情,是很好的入門素材,建議有興趣的同學可以看看。

? Dark Mode on i​OS 13

@紅紙:作者寫的標題有點大,本文實際僅針對於 iOS 13 上顏色的管理提及了 6 個方面(色值/HEX值/系統色值/元件預設色值/Color Set/Xib Color/)。其主要包含如何查詢/替換工程中應用的色值以用於適配 iOS 13。

? 歷時五天用 SwiftUI 做了一款 APP,阿里工程師如何做的?

@四娘:淘寶內部嘗試使用 SwiftUI 編寫一個內部資料監測的 App,簡單介紹了一下 SwiftUI 的資料流以及 UI 的自定義,文末對於 SwiftUI 給出了很正面的評價:

此專案在短短的 10 個工作日內就能完成,不得不說 SwiftUI 的開發效率真的驚人,雖然目前還有一些 Bug ,但是相信在未來,SwiftUI 會是 Apple 平臺 UI 佈局的解決辦法,關於 SwiftUI 如何在淘系落地業務,還在持續探索中。

? The Curious Case of the Core Data Crash

@anotheren:Twitterrific 的開發者多年來一直被一個 Core Data 的 Crash 問題困擾,但是一直找不到問題的確切原因。直到近期 TestFlight 反饋上線以後,他發現了一些蛛絲馬跡。原來 Twitterrific 被切換時可能會有一些後臺下載任務,完成後需要寫入 CoreData。雖然後臺下載能夠正確完成,但資料還未完全寫入 Core Data 時,就被錯誤的標記了後臺任務完成,於是應用就被 iOS 系統殺死了。這時在 Crash Report 中就會報告一個 Core Data 的問題,但是實際問題卻不在 Core Data 這邊。如果你也有類似的問題,不妨看看作者的分析。

? 在 Flutter 中如何把報錯資訊通過服務上傳

@CrazyCoderShi:App 開發中一個比較重要的環節就是錯誤捕獲上傳, Flutter 應用也不例外. 本文介紹瞭如何通過 Sentry 來捕獲 Flutter 應用的錯誤並上傳, 文末附上了完整的 Demo. 這裡小編順帶提醒一句: Flutter 1.9.x 對應用的報錯進行大量的改良 ???

? RxSwift非同步事件追蹤定位工具的研發歷程

@AidenRao:當你使用 RxSwift 來實現一些簡單的功能如傳送一次網路請求、監聽按鈕點選事件等會讓你的程式碼看起來非常直觀簡潔,但是如果你使用 RxSwift 實現了一個非同步熱流且在不同的類之間層層傳遞和加工轉換之後程式碼的可讀性就大大降低,甚至因為抓不到非同步事件產生的堆疊而出現難以除錯的情況。

為解決 RxSwift 的除錯難題,作者通過閱讀原始碼分析 RxSwift 操作符實現原理,然後利用 Swift 反射機制來 dump “Observable Link”,最後又根據 Swift 語言的函式派發機制和名稱空間機制設計了一套安全高效的 hook Swift 的動態及靜態方法的方案,通過這套 hook 方案完成了對流事件傳遞鏈上的關鍵函式的攔截處理從而順利實現了精準定位和除錯 RxSwift 中非同步事件的目標。

工具

? Unused code cleanup in iOS projects

@zvving:無用程式碼總隨著專案迭代猥瑣發育,逼迫我們養成定期清理的習慣。

本文簡單介紹幾種清理方式,尤其是能精準的分析 Swift 無用程式碼的 Periphery,推薦一試。

程式碼

KKJSBridge

@享耳先森: 一站式解決 WKWebView 支援離線包、Ajax 請求和 Cookie 同步的問題 (基於 Ajax Hook 和 Cookie Hook):

  • 基於 MessageHandler 搭建通訊層
  • 支援 ajax hook 避免 body 丟失
  • Cookie 統一管理
  • WKWebView 複用
  • 相容 WebViewJavascriptBridge

TTAnalyzeLoadTime

@張嘉夫:通過 Mach-O 檔案 NonlazyClassList 構建動態庫進行 iOS load 方法耗時檢測:

  • 倉庫中提供了原始碼以及二進位制的檔案,原始碼提供了整個 AnalyzeLoadTime 的全部檔案 TTLoadTime.mm,二進位制檔案為一個動態庫,動態庫為儘可能提前執行 Load Method Swizzling 提供了可能。
  • 重寫 _getObjc2NonlazyCategoryList、_getObjc2NonlazyClassList,可以快速拿到全部 load 的所屬 Class 以及 load 的 IMP 地址。
  • 防止執行環境被破壞使用 method_setImplementation 構建 block 執行原函式。
  • 尋找 mach-o 中的 load 以及 Swizzle 共耗時 4 毫秒。

LookinServer

@JimqLookin iOS 端的程式碼已開源( macOS 端的程式碼並未開源)。作為 iOS UI 除錯工具,主要看點包括與所連線 Mac 的點對點通訊,當前頁面 UI 資訊的結構化提取、使用、傳輸與匯出,UI 圖層的 2D/3D 預覽,UI 繼承樹的展示,點選的 UI 控制元件資訊展示,指定方法監聽等,對此比較好奇的同學可以一讀。

音視訊

ggtalk | 沒事刷刷演算法

@AidenRao:本期磊子和 wamaker 會聊聊演算法。演算法是個大話題,這期講的只是兩個從業者的小故事,看看他們如何認識演算法,如何學習演算法,如何看待演算法。

內推

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

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

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

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

關注我們

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

老司機 iOS 週報 #83 | 2019-09-09

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

說明

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

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

相關文章