老司機 iOS 週報 #116 | 2020-06-08

老司機iOS週報發表於2020-06-08

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

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

新手推薦

? 3 steps to speed up storyboard

@極速男孩:storyboard 作為 iOS 的一種對 viewcontroller 的控制的方法被廣泛使用,本文簡單介紹瞭如何快速的使用 storyboard 來對你的 viewcontroller 進行管理。

文章

? ? TrampolineHook - 解決棧汙染問題支援變參 Hook

本文是 TrampolineHook 框架系列文章最新的一篇。TrampolineHook 是一箇中心重定向框架,可以通過一個函式替換/攔截所有你想要的函式的框架。如果對這個庫不瞭解可以先看前面的幾篇文章:

本文主要講該庫在之前實現中的一個錯誤,關於上下文汙染的問題,本文從彙編角度比較深入的講解了這個問題,但並不需要讀者很瞭解彙編的內容,有興趣的同學可以看一下。

? ? 移動前端開發和 Web 前端開發的區別是什麼?

@張嘉夫:前端這門技術,從誕生髮展至今不過寥寥十餘年。如果說前十年是 PC 前端的時代,那後十年一定是屬於移動前端的時代。特別是隨著網路制式的發展,移動裝置在全球範圍內得到了空前的普及,在前端領域,Hybird Web、React Native、Weex、Flutter 等等一系列新的移動前端技術也如同雨後春筍般冒出來。在這篇來自阿里巴巴新零售淘系技術部的文章中,作者分享了其對於「移動前端開發和 Web 前端開發」的理解,具體包括前端發展史回顧、移動前端混合技術的前世今生以及對未來回歸本源的探討。

? ? How the SwiftUI DSL Works

@蓮叔:SwiftUI 算是 Swift 近幾個大版本中最令人興奮的 feature,雖然不少同學在試水後都得出了目前還不成熟的判斷,但這並不影響其定位了未來的 UI 開發方式。本篇文章作者嘗試聊了聊 SwiftUI 實現中的一些關鍵技術,主要描述了 function builder 機制,文章比較淺顯易懂,內容不多,比較適合新手學習。

? ? A Type-Safe FileWrapper

@xiaofei86:在 Document Based Apps 中,NSDocument 作為最重要的基類,提供了自動儲存、執行緒安全、iCloud 衝突解決等功能。NSDocument 可以持有 Data 和 FileWrapper 兩種型別的檔案資料。FileWrapper 為自定義檔案型別的容器,本文通過示例簡單講述了 FileWrapper 的應用,有興趣可以閱讀原文了解,也可以通過蘋果 官方文件 瞭解更多 Document Based Apps 的開發指南。

? Dealing with memory limits in iOS app extensions

@老驢:Notification extension 和 share extension 算是 iOS 中前兩年比較火爆的話題了,這兩年似乎熱點過去,大家關注的也不多,蘋果也沒有在這塊繼續著力,framework 更新的也很少。

這位作者就在開發中遇到了記憶體上限問題,Notification extension 最高只能支援 24 MB 的記憶體佔用,而 Share extension 最多支援 120 MB 的記憶體佔用。而開發中最有可能遇到記憶體上限問題的就是圖片或者是視訊了,作者使用了一些有意思的辦法來繞過這樣的限制,有興趣的不妨來看看。

? How We Use Feature Flagging on iOS

@老峰:Feature Flagging (又名 Feature Toggle、Flip 等)是一種允許控制線上功能開啟或者關閉的方式,通常會採取配置檔案的方式來控制。本文作者以 WordPress 為例講解了通過 配置 Build Configurations 等在 iOS 中實現 Feature Flags,WordPress-iOS 是個開源專案,感興趣的讀者可以點這裡閱讀原始碼。

? Decode and Flatten JSON with Dynamic Keys Using Decodable

@四娘:有時候後端下發的 JSON 檔案會採取動態 key 的形式,那在 Codable 裡該如何實現呢?這篇文章就介紹瞭如何動態 key 的結構該如何解析以及封裝的方式。

程式碼

? InterposeKit

@EyreFree:InterposeKit 是一個可以幫助我們快速、優雅地在 Swift 中進行 Swizzle 的庫,它的作者是 Peter Steinberger,你可能對這個名字沒什麼印象,但你可能聽過他的另一個開源庫 —— Aspects。InterposeKit 是用純 Swift 5.2 編寫的,有完備的文件並經過了全面的測試。它可以用於 Objective-C 例項方法和被 @objc dynamic 修飾的 Swift 函式。推薦在 Swift 中有 Swizzle 需求的同學一試,以下是一些關鍵點:

  • Interpose 直接修改方法的實現,這比基於 selector 的方式要好;
  • 可以通過呼叫 revert() 輕鬆實現鉤子的撤銷;
  • 純 Swift 實現,而不是使用低效的 NSInvocation
  • 沒有型別檢查,雖然帶來了一些 crash 風險但也更加靈活;
  • 必須手動指定結果型別兩次,這是一種為了避免使用 NSInvocation 或彙編的折衷;
  • 當類在執行時被載入時,延遲插入。

內推

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

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

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

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

關注我們

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

老司機 iOS 週報 #116 | 2020-06-08

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

說明

? 表示需某工具,? 表示編輯推薦

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

相關文章