老司機 iOS 週報 #206 | 2022-06-27

語言: CN / TW / HK

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

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

《WWDC22 內參》

上週一共更新了 13 篇,每篇質量都非常高,由於篇幅問題,開頭先推薦三篇可能大家更感興趣的,其他的放到週報最後了~

🌟 【WWDC22 10092】遇見 Passkey

蘋果一向以對使用者隱私的嚴格重視和出色的隱私保護能力而廣受讚譽。passkey 是蘋果在使用者隱私保護與資訊保安方面提出的一個完整的解決方案。本文將帶你一起來了解這一方案是什麼、為什麼和怎麼用。

🌟 【WWDC22 110357/110358】Swift Regex: 蓄謀已久的正則優化

Chris 畫了有五年的大餅 Swift Regex 終於要落地啦!一種號稱要超越 Perl 的字串處理方式,一種兼顧簡潔和直觀的正則表示式構建方法,一種使正確處理 Unicode 編碼輕而易舉的抽象模型。Swift Regex 的步伐雖然緩慢,凡堅信不疑的,主必賜福於他。(官方原文:So we go out and evangelize our clearly superior approach to anyone who will listen. Adoption is slow but promising.)

🌟 【WWDC22 10054】SwiftUI 新導航方案

導航是所有 App 不可或缺的功能。SwiftUI 在釋出時就為我們帶來 NavigationView 來支援簡單的導航場景,但存在許多不足。幸運的是 WWDC22 為我們帶來 NavigationStack 和 NavigationSplitView 來解決各種痛點。 本文通過一個真實的例子《唐詩三百首》詳細講述新的方案的適用場景及使用建議,幫助讀者熟悉和遷移到新的導航方案。

新手推薦

🐕 How to Start iOS Development Career

@老峰:作者通過系列文章羅列了 iOS 開發上手主要知識點,主要包含如下內容:

  • Swift 語言:學習資源以及學習方法
  • 構建 UI 介面:Using Interface Builder&Build programmatically;UIKit&SwiftUI
  • iOS 基礎概念:資料儲存、網路請求、多執行緒、記憶體管理
  • 測試:單元測試、整合測試、快照測試、應用程式流測試
  • 架構&工具:未完

🐎 逐步實現基於原始碼的 Swift 程式碼覆蓋率

在這篇短文中,作者將向你介紹其研究 Swift 程式碼覆蓋率檢測方案時找到的最佳實踐,包括:

  • 如何生成 *.profraw 檔案並通過命令列測量程式碼覆蓋率
  • 如何在 Swift App 專案裡呼叫 C/C++ 方法
  • 如何在 Xcode 中測量完整 Swift App 專案的程式碼覆蓋率

文章

🌟 🐕 基於 Bazel 的 iOS Monorepo 工程實踐

@JonyFang: 一篇實用的技術分享,主要介紹了 BILIBILI 基於 Bazel 的 iOS Monorepo 工程實踐,內容結構如下:

  1. 介紹 BILIBILI 客戶端工程開發模式演進的背景;
  2. 解答什麼是 Monorepo?有哪些成熟的 Monorepo 工具?
  3. 介紹選型 Bazel 原因,著重介紹了 Monorepo 以及 Bazel 帶來的優勢;

目前 B 站客戶端的 Monorepo 模式還在進化中,未來會有越來越多的編譯優化的自研規則實裝到我們的 iOS 專案中,目前分散式編譯能力也已經提上了日程。歡迎對 Monorepo 或 Bazel 感興趣的同學和我們一起進行技術討論,也歡迎加入我們的 CI/CD 團隊,深度參與改造和建設 iOS 端 Monorepo 工程體系。

🐕 西瓜影片 iOS 播放器技術重構

@ChengzhiHuang:西瓜影片中有各種影片題材,業務邏輯大量耦合,也是業務的最核心模組。本文聚集於業務播放器的重構(並非 VideoEngine 層),通過將播放器拆分為:極簡播放器、基礎播放器、業務播放器 三層;將業務任務化;降低各層耦合 等手段,最後在可維護性、效能、業務等多方面都拿到了不錯的收益,具體的分層方案與思想大家可以借鑑,但最後都要根據業務複雜度來選擇最合適的劃分。

Using the ‘some’ and ‘any’ keywords to reference generic protocols in Swift 5.7

@zvving:相比 ObjC,Swift 協議帶來更豐富的實用場景和更嚴格校驗的型別資訊。當我們遵循蘋果的建議,嘗試在專案中落地面向協議程式設計時,在引數型別、範型關聯等場景,型別資訊帶來大量的限制,這導致我們不得不大量應用型別擦除,能解決問題,也帶來更多的理解成本。

Swift 5.1 引入 some 關鍵字(opaque return types),讓基於協議的返回型別更易用。而 Swift 5.7 更進一步,讓 some 更靈活的應用與函式引數及範型等場景,同時引入 any 關鍵字帶來官方的型別擦除語義用於型別容器場景。至此,在例項型別更明確的場景使用 some 關鍵字,型別容器場景使用 any 關鍵字,Swift 在面向協議程式設計中真正達到簡潔同時兼顧靈活。

🐎 App Store Server API 實踐總結

@J_Knight_:本文分享了蘋果開放的 App Store Server API 的介面: - 查詢使用者訂單的資料 - 查詢使用者歷史資料 - 查詢使用者內購退款 - 查詢使用者訂閱專案狀態 - 提交防欺詐資訊

還介紹了線上環境和沙盒環境的測試伺服器地址。而因為這些介面的呼叫需要先通過 JWT ( JSON Web Token) 的方式授權,所以也介紹了該授權方式的具體操作,例如生成金鑰和簽名等等。文章的後半部分提供了這些介面的呼叫示例以及相關的錯誤碼等的相關資訊。

拓展閱讀:【WWDC22 10040】 探索 In-App Purchase 整合和遷移

🐕 Announcing the Language Workgroup JUNE 15, 2022Ted KremenekTed Kremenek

@含笑飲砒霜:自 Swift 成為開源專案以來,Swift 社群共同完成了許多工作。現在,將啟動語言工作組,它將承擔監督語言和標準庫的主要職責。有了一個致力於語言發展的工作組,核心團隊將在專案的整體監督和方向上投入更多。核心團隊成員將擔任管家,協調各個工作組的工作,並制定建立一個更加活躍的開源專案和周邊社群的戰略。

🐕 SwiftUI 狀態管理系統指南

@EyreFree:SwiftUI 與 Apple 之前的 UI 框架的區別不僅僅在於如何定義檢視和其他 UI 元件,還在於如何在整個使用它的應用程式中管理檢視層級的狀態。SwiftUI 沒有使用委託、資料來源或任何其他在 UIKit 和 AppKit 等命令式框架中常見的狀態管理模式,而是配備了一些屬性包裝器使我們能夠準確地宣告我們的資料如何被我們的檢視觀察、渲染和改變。這篇指南能很好地概述 SwiftUI 的各種狀態處理機制,文中強調的概念涵蓋了所有基於 SwiftUI 的狀態處理的絕大多數用例,推薦對 SwiftUI 感興趣的朋友閱讀。

🐕 WWDC 2022 Viewing Guide

@Barney 今年的 WWDC 有 175 個 sessions 和大量的新特性要學,光是看影片就要花費大量的時間。東西太多抓不住重點?沒關係,不如先按本文的分類從感興趣的入手。

🐕 Rendering SwiftUI views within UITableView or UICollectionView cells on iOS 16

@JimQ:今年的 WWDC 終於帶來了在 UITableView/UICollectionView Cells 中渲染 SwiftUI 檢視的能力,但並不是可以完全混用了,僅限於 Cells(比如 UITableViewHeaderFooterView 就不能用),Cells 與 SwiftUI 之間要依賴 UIHostConfiguration 的橋接支援,使用一個新的 UIHostConfiguration 物件 wrap SwiftUI 檢視並賦值給 cell.contentConfiguration。John Sundell 的這篇文章可以帶領大家瞭解更多詳情,並充分利用這一新特性。

🐕 Google I/O Extended | Flutter 遊戲和全平臺正式版支援下 Flutter 的現狀

@極速男孩:今年 Google I/O 上谷歌主要展示了 Flutter 對遊戲開發的支援和全平臺支援的能力。谷歌通過一款 pinball 的小遊戲來展示 Flutter 如何通過 Skia 渲染引擎和 Flame SDK 來提供遊戲開發的能力。在 3.0 中 Flutter 提升了 macOS 和 Linux 上應用穩定性,讓開發者在儘可能多的共享 UI 和邏輯的基礎上,更靈活的利用底層邏輯作業系統。

🐕 wakeup in XNU

@水水:關注效能的讀者可能會碰到有一種有一種被系統 kill 型別是 weakup,又因為收集到的日誌不足以定位問題,本文通過另一種思路去解決這個問題。整體介紹了weakup是什麼、系統如何統計的以及關鍵的是如何治理。 - 為什麼要統計 wakeup - wakeup 是什麼 - wakeup 如何統計的 - wakeup 治理 - 監控與防劣化

🐕 What’s new in Swift 5.7

@AidenRao:Swift 5.7 變化巨大,新特性中包括正則表示式, if let 速記語法,以及圍繞 anysome 關鍵字的一致性改動,在本文中,作者會通過一些示例來介紹這些新特性。

中文翻譯:【WWDC22 110354】Swift 新特性介紹

🐕 Flutter 高延遲渲染流水線排程

@CrazyCoderShi: Flutter 長久以來以高效能著稱,但你可能好奇 Flutter 上的卡頓是什麼引擎的,又應該如何解決。本文由 U4 核心組帶你揭祕 Flutter 體系下的渲染流程,並從中找到卡頓的原因,抽絲剝繭,進階必看

WWDC22 內參更新

🌟 【WWDC22 110379】建立一個響應速度更快的媒體應用

本 session 主要對 AVFoundation 中原本不是很合理的同步 API 做了非同步優化,同時將 async/await 應用到了更多 API 中,讓 API 更安全的同時還能保持易用。涉及到的模組包括影片截圖、影片編輯、自定義資源載入。

🌟 【WWDC22 10002】利用 Virtualization 構建虛擬機器,從未如此簡單

本文介紹了平臺虛擬化技術的方案型別,分析了 macOS 上的虛擬化方案。通過 Virtualization.framework 和基於這個框架的命令列工具,我們一起建立可用的 macOS 虛擬機器、Linux 虛擬機器(GUI)、Linux(CLI),感受現代虛擬機器強大的效能。利用 Virtualization 打造屬於專屬自己的虛擬機器,從未如此簡單!

🌟 【WWDC22 110341】簡訊過濾器原理和更新

本文將主要聚焦於 iOS 16 中 IdentifyLookup 框架的新特性。全文共分為 3 個部分: - 第一部分是回顧整個簡訊過濾 API 的發展。 - 第二部分是對 簡訊過濾的原理介紹。 - 最後一部分是一個簡單的 Demo 示例實踐。

🌟 【WWDC22 10049】探索 iOS 16 中 WKWebView 的新功能

本文主要是探索 WKWebView 在 iOS 16 中的新功能,全文主要分為 4 部分: - 第一部分是 對 Web 內容的互動新增了 3 種方式,同時新增了 20 種 CSS 視口單位和查詢互動功能。 - 第二部分是新增了對特定 URL 其顯示內容攔截的功能。 - 第三部分是 iPadOS 中新增了加密媒體的功能。 - 第四部分是支援在第三方瀏覽器中除錯 App 內嵌的 Web頁面。

🌟 【WWDC22 110350】Swift 併發的視覺化和優化

本文主要是討論 Swift 併發程式碼的優化,並介紹了一個 Instrument 14 提供的一個視覺化工具。session 的內容可以分為 3 個部分: - 一、回顧 Swift 併發程式碼基礎 - 二、結合程式碼片段展示如何用 Instrument 來解決效能問題,包括 Main Actor 阻塞 和 Actor 競爭 - 三、最後討論了一些 Swift 併發的潛在問題包括執行緒池耗竭和續體誤用

🌟 【WWDC22 110354】Swift 新特性介紹

Swift 一直致力於讓程式設計變得更簡單,並以此為目標不斷地進行迭代。本文將對 Swift 5.7 的新特性進行介紹,主要分為以下五個部分: - 1. 社群最新動態 - 2. Swift Package Manager 外掛 - 3. Swift 底層效能優化 - 4. Swift 併發模型 - 5. Swift 語言優化

🌟 【WWDC22 10065】即插即用:將 Apple frameworks 新增到您的 Unity 遊戲專案

本文將幫助開發者如何在 Unity 應用或遊戲中快速整合 Apple 的一些原生功能外掛,以提升作品的體驗。本次 WWDC , Apple 為我們帶來了六個基於 Unity 版本的外掛:Apple.Core、Game Center、Game Controller、Accessibility、Core Haptics 和 PHASE。我們將分別介紹它們的功能,以及如何快速編譯、匯入到開發者的專案中。文末,還給出了使用這些外掛的一些場景以及注意點。

🌟 【WWDC22 110336】 Screen Time API 的新特性

本文將介紹 Screen Time API 在 iOS 16 的新特性以及基於此可以實現的功能。全文分為三個部分: - 1. 回顧 iOS 15 中 Screen Time API 特性 - 2. Screen Time API 在 iOS 16 的新特性介紹 - 3. Screen Time API 新特性的實踐

🌟 【WWDC22 10115/10119】優化 CoreData & CloudKit 實現

本文將結合開發者個人專案案例,旨在通過單元測試、Instruments、日誌收集三方面,覆蓋開發流程的三個重要方面:探索、分析與反饋,幫助開發者優化實現方案實現,做出更好的產品。同時瞭解到 CloudKit 的同步流程與相關係統服務。

🌟 【WWDC22 10040】 探索 In-App Purchase 整合和遷移

本文主要聚焦於 App Store Server API 和 App Store Server Notifications。從去年 WWDC21 蘋果推出了 StoreKit v2、App Store Server API v1 和 App Store Server Notifications v2,今年 WWDC22 基於這些功能的基礎上,增加了一些新的 API 和一些服務的優化。另外,針對大家對這些新特性有一些疑慮,如 JWT/JWS、相容性、安全性、訂閱通知、整合和遷移等等,蘋果進行了詳細的解答,還提供非常多的最佳實踐的案例和優化建議。

摸魚週報

@摸魚週報 #57:第 57 期摸魚週報來了,這期排版做了一些改動,一起來看下本期概要:

  • 本期話題:WWDC22 講座集錦,Apple 夏令營課程迴歸
  • 本週學習:Xcode Playground Tips
  • 內容推薦:蘋果開發者大會落幕,介紹一些 WWDC22 推出的新技術和新內容
  • 摸一下魚:Apple Logo Artwork,收錄蘋果獨特多彩風格的媒體版本 Logo

內推

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

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

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

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

關注我們

我們是「老司機技術週報」,一個持續追求精品 iOS 內容的技術公眾號,歡迎關注。

關注有禮,關注【老司機技術週報】,回覆「2021」,領取 2017/2018/2019/2020 內參

同時也支援了 RSS 訂閱:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。

說明

🚧 表示需某工具,🌟 表示編輯推薦

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