老司機 iOS 週報 #96 | 2019-12-23

老司機iOS週報發表於2019-12-23

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

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

文章

? iOS 微信編譯速度優化分享

@J_Knight_:作者首先列舉了調研過的,目前已有的編譯速度優化方案,然後分享了微信使用的編譯速度優化方案:

  1. 優化標頭檔案搜尋路徑
  2. 關閉 Enable Index-While-Building Functionality
  3. 優化 PB/模版,減少冗餘程式碼
  4. 使用 PCH 預編譯
  5. 使用工具優化標頭檔案引入;儘量避免標頭檔案裡包含 C++ 標準庫

而且在分享具體方案的過程中,還簡單介紹了編譯原理的知識,以及分析耗時的工具。對編譯速度優化感興趣的讀者可以學習一下此文章。

? Flutter: 首個面向環境計算打造的 UI 平臺

@邦Ben:文章中寫道,在這個新興世界中,大家關注的焦點也開始從單一裝置轉向環境——一個允許您隨時隨地獲取服務和軟體的環境。我們將其稱為環境計算 (ambient computing)。

從這裡我們可以瞭解到 Flutter 跨平臺的決心和願景。文章中大略總結了 Flutter 的近況,沒了解過的可以看下,然後挑感興趣的深入瞭解一番。

  • Flutter 釋出 1.12
  • Flutter web 支援 beta 版
  • 可以釋出 macOS App
  • Dart 2.7 釋出
  • Supernova / Rive / Adobe 等在設計與原型工具中,增加對 Flutter 的支援,還支援設計稿匯出 Flutter 程式碼

? React Native 在美團外賣客戶端的實踐

@looping:MRN(Meituan React Native)是美團研發團隊基於 React Native 開源框架,並結合美團業務場景,定製化開發的一套動態化框架。

本文從接入 MRN 後應用的整體架構,業務開發在現有技術棧上的選型,動態化後對研發流程的變化,在運維上對業務可用性的監控以及使用 MRN 後對效率的衡量等方面的實踐做了非常詳盡的介紹。

如果有在建設動態混合開發方案,或對這塊的工程化感興趣的同學,推薦仔細閱讀,從中還是能得到很多參考和啟發的。

? Swift API Availability

@xiaofei86:本週 NSHipster 為你帶來 @available 的詳細用法,與 #available 的對比,以及在第三方 Framework、Swift Packages 中的使用建議。

? 百度 APP iOS 暗黑模式適配的完美解決方案

@張嘉夫:由於 Dark Mode 只支援 iOS 13 以上的系統,為了給全系統所有使用者最好的體驗,百度研發出了一套皮膚主題框架,不僅可以全系統支援 DarkMode,還可以擴充套件多套皮膚主題。本文主要從皮膚主題框架實現、色值表的管理以及配套工具鏈等方面詳細的介紹了百度 App iOS 暗黑模式的適配。目前系統所有控制元件及其 Color 屬性和 Image 屬性均已支援這套皮膚主題框架,業務方只需使用簡單的 API 設定 Color 和 Image,即可實現主題換膚。同時為了提升一鍵重新整理所有檢視主題的效能,採用了 NSHashTable 弱持有控制元件的方案,通過測試資料得出: 在上萬個檢視量級下, HashTable 效能是遠遠優於通知的方式。

? iOS 開發除錯概覽

@紅紙:本文是一個概覽文章,簡述 iOS 開發過程中,常用的一些除錯手段。

  1. 常用的一些 LLDB 命令,擴充套件介紹了一下 chisellldb_commands 兩個 lldb 的擴充套件倉庫
  2. 常見的異常捕獲方式。全域性異常、EXC_BAD_ACCESS、Memory Leak
  3. Xcode 自帶的除錯方法。條件斷點編輯、UI Debugger、主執行緒檢查等等
  4. 第三方工具,Charles 網路除錯工具和百寶箱 WoodPecker 集網路沙盒等功能於一體的除錯工具

注:推薦 《Advanced Apple Debugging & Reverse Engineering》 一書,從中你能瞭解到更加細節的除錯方法

? iOS 專案技術還債之路《二》IAP 掉單優化

@anotheren:本文介紹了作者團隊對於 IAP 的掉單優化,對於下單及驗證流程進行了詳細的分析,並介紹了優化後的實踐方案。如果你也遇到類似的 IAP 問題,不妨一起討論一下。

? 亮劍 - Stinger 是如何在速度上吊打 Aspects 的

@JimQ:如題,餓了麼團隊進行了一項卓越的工作,其開源的 AOP 庫 Stinger 的執行速度比目前最具統治力的 AOP 庫 Aspect 快了大約 20 倍。本文從基本原理對比、測試速度對比、原始碼分析對比、各項功能對比四個層面與 Aspect 進行了綜合 PK,其言吊打,亦不為過。

? 聊聊 Symbol

在日常開發中,我們或多或少都應該接觸過 Symbol ,而真正使用到它的地方可能並不多。其實 Symbol 在編譯期和執行時都扮演了重要的角色,但瞭解 Symbol 、Symbol Table 等概念對我們在一些問題的定位甚至做程式架構都很有幫助。

? Objective-C Direct Methods

@AidenRao:Direct Methods 是 Objective-C 上新的方法呼叫機制(最早可能出現在 Xcode 11.x 上),呼叫 Direct Methods 時,它直接呼叫其基礎實現,而不是通過 objc_msgSend。由於 objc_msgSend 在優化上已經做了很多,Direct Methods 並不會有太大的效能優勢。實際的優點:Direct Methods 是私有方法,並不能被外部訪問,也可以防止被 Objective-C 執行時動態地呼叫。不過根據實現此功能的 Pierre 所說,此優化的主要好處是減少了程式碼大小。

工具

PodfilelockToPng

@EyreFree:便利小工具,通過 Profile.lock 快速生成專案庫依賴關係圖,由作者 Orange-W 自薦。同類工具還有 prettyEFPodsAnalyzer 等。

程式碼

SwipeCellKit

@老峰: UITableViewCell/UICollectionViewCell 側滑元件 Swift 版,支援左右滑動、圖示文字自定義、自定義拖拽動畫等,可優雅的實現 Cell 側滑事件。

flutter dart 私有倉庫

@CrazyCoderShi:作用跟 Pod 私有庫類似,作為公司內的私有備份還是很有必要的。同時包含了一個簡單的搜尋頁面,強烈推薦。

推薦一款 Postman 的開源替代品: Postwoman

@水水:大家都知道,Postman 是一個非常受歡迎的 API 介面除錯工具,小編自己也用過哦~,它提供有 Chrome 擴充套件外掛版和獨立的 APP,不過它的很多高階功能都需要付費才能使用。而 Postwoman 是一個 Postman 的免費、快速且美觀的替代方案,作為一款開源的 Postman 替代品,主打特性有如下一些:

  • 輕盈,可直接線上訪問;
  • 簡約,採用簡約的 UI 設計精心打造;
  • 支援 GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH 方法;
  • 支援驗證;
  • 實時,傳送請求即可獲取響應。

有興趣的朋友可以點選Postwoman GitHub 專案官網下載體驗啦~

內推

位元組跳動-視訊(北京)團隊收 iOS/Android/Flutter/服務端/前端/QA。初中高階開發+實習都可以喲。收到的每一份簡歷都會幫大家跟蹤流程。簡歷傳送至:silence007pp@bytedance.com 如果感興趣可以加微信詳細聊一下:LuaPlayer

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

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

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

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

關注我們

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

老司機 iOS 週報 #96 | 2019-12-23

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

說明

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

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

相關文章