老司機 iOS 週報 #89 | 2019-11-04

老司機iOS週報發表於2019-11-04

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

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

新聞

SSWG Annual Update

@looping:本文是 SSWG (Swift Server Work Group) 小組向我們分享的他們在去年設定的工作目標上的最新進展。文章一開始介紹了他們的工作方式,即通過一個叫做 孵化過程(Incubation Process) 的機制,或流程(類似 Swift Evolution)來保證在類庫和工具演進上的質量。接著列舉了通過該流程產出的 9 個提議,分別對應 9 個類庫,以及在 Linux 上輸出的一些工具。最後描述了接下來 2020 年的工作重點,雖然對要演進的內容只做了簡短描述,但也讓人感覺是清晰明確和有所期待的。

文章

? ? iOS 13.2 為何殺 App 這麼頻繁以及什麼是 wakeup

@zvving:升級 iOS 13.2 後微信在後臺頻繁被殺給大量使用者帶來困擾。網路上微信 wakeup 分析日誌流傳甚廣,也有人因此斷定微信不遵守 iOS 後臺喚醒規則,因此被殺。

Wakeups: 45001 wakeups over the last 192 seconds (234 wakeups per second average), exceeding limit of 150 wakeups per second over 300 seconds
複製程式碼

圖拉鼎查閱資料後,用這篇文章告訴大家:日誌中的 wakeup 並不是使用者使用意義上的後臺喚醒,而是執行緒喚醒。比如呼叫peformSelector:onThread:或者dispatch_async都會觸發執行緒喚醒。 目前能確定的是 wakeup 呼叫不是微信等 App 被殺掉的直接原因,不能簡單歸因後臺頻繁被殺是開發商微信問題。

事實上,頻繁後臺被殺的不僅僅有微信,希望蘋果和相關開發商早日解決此問題。

? Packages 的開發和提交

@CrazyCoderShi:在 Flutter 專案的開發中通過 Package 可以建立易於共享的模組化程式碼, 所以如何建立 Package 是一個必會技能, 本文可謂是手摸手帶你完全掌握 Package 的開發方法, 並且對多端的實現有詳細的講解.

? Draft Proposal: Swift PM Package Resources

@享耳先森:Swift PM 終於要有正式的資源打包及載入方式了。這個提案的主要內容想解決 Swift PM 如何約定資源儲存路徑及各平臺下如何用一致的程式碼進行載入。

? MetricKit

@AidenRaoMetricKit 是 iOS 13 中的一個新框架,用於收集 APP 的各項效能指標。諸如耗電,啟動時長,互動耗時,磁碟使用等指標。 文章介紹了 MetricKit 及它的使用方式,也提供了一個收集 MetricKit 資料的自建 Web 服務方案。幫助你,提供更好的使用者體驗。

? ? macOS 核心之從 I/O Kit 電量管理開始 | 楓言楓語

@蓮叔:對於絕大多數 iOS 開發者朋友來說,電量管理都是相對陌生的話題,一方面是系統往往不會提供特別友好的 API,另一方面需求確實也不多。不過這並不妨礙以電量管理作為口子去了解學習系統核心的知識。本文作者也是從這個目的出發,分別介紹了 macOS 中的電量管理的 API 以及使用方法,順帶介紹了 mach_port 的通訊機制,最後也介紹了 iOS 上的一些使用。整體內容比較詳實,推薦對系統程式設計感興趣的同學研究。

? iOS 除錯 Rust

@EyreFree:本文記述了作者在成功進行 iOS 編譯和部署 Rust Library 後對編譯產物的具體使用和除錯過程。Rust 是一門為記憶體安全和速度而設計的系統級程式語言。由 Mozilla 打造,目的是用來開發下一代高效能跨平臺軟體,它能夠在 Android 和 iOS 平臺間以一種高效能和安全的方式共享程式碼,又比 C++ 容易使用得多。如果你對此感興趣,作者後續還寫了一篇 Xcode 除錯 Rust 進一步介紹了更多除錯姿勢。

? Mac下通過Apple Configurator 2獲取ipa包

@含笑飲砒霜:想要獲取蘋果應用商店的 ipa 包可以通過 PP 助手直接下載,而且都是已經砸過殼的,但是現在 PP 助手上很多軟體已經不再更新了。如果有系統在 9.0 以下的蘋果裝置也可以通過手機直接匯出,但是現在 9.0 以下的手機已經寥寥,抑或是通過越獄機匯出。還有一個匯出 ipa 包的方法,就是本文所說通過 Apple Configurator 2 匯出,操作簡潔明瞭。

? 閒魚前端基於serverless的一種多端開發解決方案

@極速男孩:本文主要介紹了通過 serverless 來統一前端的 viewmodel 層,前端不需要任何的資料處理邏輯,而僅僅需要根據後端返回的資料來直接進行展示。這樣使得前端不需要了解業務邏輯也可以完成頁面的開發,也方便對 viewmodel 層進行復用。

? SwiftSyntax 詳解

@老峰:本文詳細介紹了SwiftSyntax 開源庫,使用它我們可以分析、生成、優化 Swift 程式碼。文章包括 Swift 編譯器結構介紹,SwiftSyntax 主要結構,SwiftSyntax API 示例,以及 SwiftSyntax 的一些實際應用(檢測未使用程式碼,語法高亮等),對編譯原理或者程式碼分析、生成、轉換工具實現原理感興趣的讀者可以研究研究。

推薦閱讀:

? Announcing the pod merge plugin for Cocoapods!

@四娘:在使用 Cocoapods 時一個常見的問題就是動態庫數量的增加會大幅降低 App 的啟動速度,解決方案有兩個方向,其中一個是動態庫合併。但之前動態庫的合併基本上都需要大家手寫指令碼去完成,現在 Cocoapods 社群就釋出了一個新的外掛去簡化這個過程:

group "Networking"
  pod "AFNetworking"
  pod "SDWebImage"
end
複製程式碼

只要編寫動態庫合併的宣告檔案,在 pod install 時外掛就會自動完成動態庫的合併,使用這種方式可以減少 13-30% 的啟動時間,唯一美中不足的就是無法接入二進位制庫,必須以原始碼接入才可以。

工具

InjectionIII

@EyreFree:InjectionIII 允許您在 iOS 模擬器中以增量方式更新類方法的實現,而無需重新生成或重新啟動應用程式,從而為開發人員節省了大量時間。

dirtrace - 終極資料夾內容佔比檢視工具

@水水: dirtrace 這個小工具的作用是把一個資料夾的內容,用 Chrome Tracing 展示出來,表示出檔案的大小以及資料夾之間的父子關係,還提供了視覺化瀏覽方法。 附上原始碼地址:github.com/everettjf/d…, 有興趣的朋友可以研究和使用哦~

內推

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

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

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

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

關注我們

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

老司機 iOS 週報 #89 | 2019-11-04

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

說明

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

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

相關文章