老司機 iOS 週報 #112 | 2020-05-11

老司機iOS週報發表於2020-05-11

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

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

新聞

? Apple 將於 6 月 22 日起召開虛擬全球開發者大會

受今年新冠疫情的影響,早些時候蘋果就已經宣佈今年的 WWDC 會以線上形式繼續進行,而現在正式官宣明確了時間為 6 月 22 日。這是第 31 屆開發者大會,而今年的 WWDC 又是以全新的線上形式舉行,相信也會帶來全新的體驗。

忘了 WWDC 19 講了些啥?歡迎查收週報編輯們參與編輯的專題特輯 - WWDC 19 內參

Flutter 1.17 釋出

@CrazyCoderShi:Flutter 2020 年的第一個穩定版本釋出了???,這次的新版本主要以增強穩定和修復歷史 Bug 為主。在 iOS 端支帶來了 Metal 的支援,使得效能大幅提升,同時對 Flutter 的包體積做了不小的優化,新元件的增加等等。不想看英文的同學可以看中文版, 同樣推薦一起釋出的 Dart-lang Release Note

文章

? 一次關於 Swift 在 iOS 生態圈裡的現狀調研

SketchK 的一篇資料調研筆記,可以幫助大家看清當前國內 iOS 開發形式。

總的來說,國外 Swift 社群活躍度已經比 Objective-C 高了,國內大廠也在推進,具備 Objective-C 與 Swift 混編能力,如果你還沒上車,現在買票吧。

? ? 百度小程式框架效能優化實踐

在移動網際網路時代,眾多的跨平臺、動態化方案,其本質都是在尋找 NA 和 H5 之間的平衡。從渲染層面上,可分為 NA 渲染(RN、Flutter 等),以及 H5 渲染(小程式)。在一個平臺型的 APP 裡,目前業界最廣泛使用的方案就是小程式,因為它可以有效降低生產者和使用者的使用成本。小程式作為 H5 渲染流派,靈活性已經被證實,所以效能一直是最受關注的技術點。本文介紹了百度小程式在效能優化方面的實踐,從框架啟動、小程式包下載、小程式包載入以及渲染等 4 個方面進行了全面的優化。

? ? 我是如何讓微博綠洲的啟動速度提升30%的

@含笑飲砒霜:啟動速度是 App 給使用者的第一印象,對使用者體驗來說至關重要。本文主要講述對微博綠洲 App 的啟動優化並闡述優化原理,主要從以下兩個方面入手:

  • 動態庫轉靜態庫, 優化了 dylib loading time
  • 通過二進位制重排,讓啟動需要的方法排列更緊湊,減少了 Page Fault 的次數

? Flutter 勢頭正盛 | 2020 春季速遞

@邦Ben:Flutter 如今已經發布了 1.17 穩定版本,迭代速度還挺不錯的。該文大體介紹了一下目前的應用情況,例如:使用最多的國家前五是:印度、中國、美國、歐盟和巴西;在 Play Store 上 Flutter 應用約 5w 個。還介紹了亞洲以外的最大的數字銀行 Nubank 選擇了 Flutter 的原因(有視訊)。有興趣可以點進去了解了解。

? The big Facebook crash of 2020 and the problem of third-party SDK creep

@張嘉夫:Facebook SDK 引發了大規模應用崩潰,原因是 Facebook 伺服器向其 SDK 傳送了錯誤的資料,並導致 SDK 中的程式碼崩潰,進一步導致執行該 SDK 的 app 終止執行。這篇文章提出了第三方 SDK 可能帶來的問題,由於它們是在編譯時連結的動態庫,會讓 Facebook、Google 等資料收集、挖掘公司對這些 app 擁有控制能力。Facebook 導致的應用崩潰問題就是該能力的體現,他們彷佛擁有了一個 “kill app 開關”。隨後作者提出了兩種技術解決方案,第一種方案是在不使用 Facebook SDK 的情況下實現 Facebook 登入,另一種方案則是將這種型別的 SDK 和主 app 的程式碼通過“沙盒”進行隔離。最後作者還提出了人為解決方案,例如限制市場部門向 app 新增第三方資料分析程式碼的權力。

? 拆!對比詳解 Flutter Widget 和 CSS,你關心的佈局原理都在這兒了

@looping:本文對比了 Flutter Widget 和 CSS 佈局原理的差異,客觀地分析了兩者的優缺點,並且對它倆的優勢能否互補也做了進一步的探討評估,同時還分享了實踐過程中遇到的一些問題和解決方案,對這塊技術感興趣的同學可順其思路好好研究一番。

? 圍觀 GitHub 重磅推出的四大新功能

@紅紙:近期 Github 推出了四項新功能,以幫助開發社群協同工作:

  • Codespaces: GitHub 中完整的開發環境,雲編輯器 + 雲託管的開發環境
  • GitHub Discussions: 開發者新的對話空間,issue 跟 PR 隨時都可能會被關閉,但是 discussion 不會被關閉,可以用來維護 FAQ 或者協作文件
  • Code scanning and secret scanning: 利用 Code scanning 對每一次 git push 進行安全漏洞掃描,結果會直接體現在 PR 上。Secret scanning 可以監視私有倉庫中的已知 secret 格式,並在發現它們時立即通知開發人員。
  • GitHub Private Instances: 這是一個面向企業客戶的全新的、全託管選項,提供增強的安全性、合規性和策略功能。

? History of Auto Layout constraints

@EyreFree:本文介紹了 Auto Layout 自 iOS 6 引入後如何發展至今的過程,通過舉例方式讓讀者直觀感受到蘋果如何一步步解決 Auto Layout 的約束程式碼冗長性問題。在您閱讀完本文之後,您可能會考慮淘汰第三方佈局庫,並開始直接使用標準 API。

? 一道 Block 面試題的深入挖掘

@JimQ:又到了複習 Block 原始碼(找工作)的時間,作者從一道 Block 面試題出發,深入原始碼為大家剖析 Block 儲存域,Block 捕獲的變數傳遞型別,__block 修飾過的變數傳遞型別及其在 Block 中的儲存域變化,並結合 __weak 說明符,探討如何解除迴圈引用,避免記憶體洩露。

? Realm.Object 與 NSObject 的轉換中 swift 協議妙用的體現

@anotheren:Realm 是一個跨平臺的移動資料庫引擎,在實際業務中,我們一般會把業務模型和 Realm 的儲存模型分開。本文介紹瞭如何設計協議及其預設實現來快速完成 NSObjectRealm Object 的相互轉換。對於還處在大量混編階段的團隊,這是一個不錯的案例。

? 如何快速列出 App 的所有 +load 方法

@水水:一個基於 lldb 的 breakpoint 命令快速列出 App 的所有 +load 方法的實用小技巧,大家可以收藏起來,萬一要用到呢~

工具

opentrace-ios

@極速男孩:opentrace-ios 是在 iOS 上實現 BlueTrace 協議的一個開源 APP。BlueTrace 一開始是新加坡政府開發的一個便於公共衛生機構使用低功耗藍芽對 COVID-19 的接觸者進行追蹤的工具,後來這個協議背影用到了全球。同樣這個 APP 有安卓版本,具體可以檢視連結

程式碼

? TrampolineHook

@J_Knight_:TrampolineHook 是一個可以替換和攔截目標函式的框架。它可以用來檢視任意函式的耗時和呼叫鏈路以及幫助實現日誌功能等等。其流程設計是:

  • 把需要替換的原方法 IMP A 取出來,儲存起來。
  • 給這個原方法塞一個動態分配的可執行地址 B。
  • 當執行這個原方法的時候,會跳轉到 可執行地址 B。
  • 這個 B 經過一段簡短的運算操作,可以獲取到原先儲存的 IMP A。
  • 在跳轉回 IMP A 之前,統一攔截函式先做些想做的事情,比如檢查是不是主執行緒呼叫等等。

而且在該流程下,可以保證引數暫存器、返回地址等不會錯亂。讀者也可以從下面的三篇文章(框架作者原創)來看一下該框架的從思路到實現的演進過程:

? SwiftTrace

@xiaofei86:SwiftTrace 是用來追蹤 Swift 和 Objective-C 中 non-final 類的方法呼叫的框架,它是 Xtrace 的 Swift 版本,通過將 Swift 類的函式指標替換為指向唯一組合語言 “Trampoline” 入口點的指標來完成 Hook。通過 SwiftTrace 除了可以追蹤類、例項、協議,還可以為成員函式建立切面,以在執行函式實現之前或之後呼叫一個閉包,在閉包中你甚至可以修改傳入的引數或返回值。

? Localize

@老峰:Localize 是一個很小的 Swift 實現的執行指令碼,來提升本地化工作效率。主要包含:清除空格,按 Key 排序、檢測未使用對的 Key、檢測缺失的 Key、檢測未翻譯的 Key、檢測冗餘的 Key 等功能,使用簡單隻要在 Build Phases 配置 Run Script 即可,在國際化工作中有類似需求的同學可以研究一下。

音視訊

71: “Polymorphic interfaces” with special guest Dave Abrahams

@四娘:Swift by Sundell 的播客訪談這期請了一個重量級嘉賓 Dave Abrahams,他之前是 C++ 委員會的一員,參與過 C++ STL 和 Boost 的早期開發,後來在 Apple 參與了 Swift 的開發,現在在 Google 做 Swift For Tensorflow 的開發。(如果大家記得 WWDC 講 Swift POP 的那個 Session,講者就是他)

這次聊了他早期的 C++ 開發經歷和 Swift 標準庫的一些設計決策,包括王垠在Swift 語言的設計錯誤吐槽過的 Value Semantic Array,這個決定當時在 Swift 團隊內部也引起了成員的強烈反對,對這段故事感興趣的人非常推薦收聽這期播客。

內推

北京 / 成都 - 抖音:應屆 / 高階 / 專家 iOS、安卓、Server 都有大量 HC,歡迎

  • 應屆學生,一起和大佬學習擼碼姿勢。
  • 熟練老手,一起做有挑戰的事情。
  • 行業專家,一起在抖音這個平臺,實現更大個人價值。

保證每一封簡歷,我都跟進進度,給與反饋。有任何想了解的,可以加我微信: jingmu1994,也可以直接傳送簡歷到 raozhizhen@gmail.com

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

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

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

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

關注我們

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

老司機 iOS 週報 #112 | 2020-05-11

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

說明

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

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

相關文章