老司機 iOS 週報 #114 | 2020-05-25

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

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

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

新手推薦

? CS193p Spring 2020 (Developing Applications for iOS using SwiftUI) 開始更新

@極速男孩:史丹佛大學的 CS193p 課程是針對 iOS 開發所推出的一個基礎教程。在2020年春季的更新中,加入了在去年 WWDC 中推出的 SwiftUI 的內容。更多的內容可以看這裡

文章

? 一波 N 折的攜程酒店 Swift-Objc 混編實踐

@含笑飲砒霜:在 WWDC2019 大會上,隨著 Swift5.0 釋出之後,沉寂多年的 Swift 終於走上了快速發展的道路。iOS 開發語言的重心已經在悄悄倒向 Swift,本文即在講述攜程酒店在引入 Swift 混編帶來的各種問題及解決方案,可供開發者們借鑑參考。

? The Future of Swift on the Server

@蓮叔:自從 IBM 在 Swift 上打了退堂鼓後,Server-side Swift 社群受到了不小的打擊。大家紛紛猜測會不會這個命題已經不再成立。這篇文章帶來了不少的好訊息,甚至認為 2020 將會是 Server-side Swift 的利好年,其中最主要就是 Swift6 的 feature 中絕大多數都直接或間接的和 Server-side 有關或者利好。還有 Swift 的核心團隊迎來了 Tom Doron 和 Saleem Abdulrasool, 一個是 SwiftNIO 的負責人,一個在嘗試把 Swift 移植到 Windows,這些跡象都說明 Swift 的核心團隊對於讓 Swift 跳出 Apple 生態的決心。其他還有不少令人振奮人心的訊息,具體建議大家直接看文章。

? Building a Design System for iOS

@張嘉夫:為了便於設計師和工程師之間的溝通協作,作者為 iOS App 構建了一個設計系統,並在這個系列文章中介紹了他的經驗,包括排版、顏色和動畫等部分。設計系統能夠定義產品的設計語言,包含可重用的元件,有明確的設計標準,可以將它們組合在一起來構建任意一款 app。採用設計系統的優勢是可以提高設計的一致性、提高團隊工作效率、方便輔助功能的開發,此外元件的可重用性還擴大了設計的應用範圍。

? 更方便、更強大: Flutter package 生態系統更新

@邦Ben:Flutter 這類新技術出現,最大的缺陷之一就是配套生態弱。近期,Google 為了提升 Flutter package 生態系統的可信度,增加了釋出者認證和評分。根據各項指標評選出 270 個專案賦予 Favorite 徽章。這意味著,有 Favorite 徽章的三方庫,你可以相對放心的使用。同時,Flutter 團隊和英國的 Invertase 合作進行推進 Google Flutter 外掛的優化(例如 firebase)。綜上,這意味著 Flutter 生態會進一步得到改善,隨著參與人數的日益增多,將會越來越好。

? Implementing design system components on iOS

@享耳先森:Native View 如何進行元件化抽象並複用一直是個難題,作者通過一個例項介紹他的思路,並提供了 demo 專案。作者將可能複用的 View 抽取成 components,並提供對應的 ViewModel,同時,ViewModel 可以組合實現不同的 Protocol 完成諸如選中等事件分發。

? Fish-Lottie:純 Dart 如何實現一個高效能動畫框架?

@CrazyCoderShi:Lottie 是一個由 Airbnb 開源的橫跨 Android,iOS,Web 等多端的一個動畫方案,它以 JSON 的方式解決了開發者對複雜動畫實現的開發成本問題。最近閒魚開發團隊在 Flutter 端實現了 Lottie - fish-lottie 。本文詳細地介紹了 Lottie 架構以及 fish-lottie 實現思路?。

? Verge — Start “store-pattern” state management before beginning Flux in UIKit iOS app development — preparation starting SwiftUI

@zvving:本文是 Verge 上手指南:從一個資料驅動頁面的小型業務場景出發,介紹如何引入 Verge 提供良好的業務程式碼隔離。

Verge 是 Flux 架構的又一 iOS 實現,設計與 Vuex 基本一致,View 同時相容 UIKit 及 SwiftUI,事件繫結支援 RxSwift 及 Combine。 更多內容請參考 Verge-Docs

? 震驚!生產力提效 300% 的祕訣全公開

@JimQ:工作要高效,方法很重要,這是一篇寫給技術人的個人工作學習管理的方法論。如果你對精力管理、多層次的工作/學習計劃、番茄工作法、定額工作法、批處理、多工並行、圖層工作法這些概念一知半解,快到碗裡來吧。值得一提的是,本文不只講方法其然,還講其所以然,邏輯體例清晰,排版重點突出,配上作者本人真實場景的思維導圖,是一篇深度好文,不是標題黨。

? iOS Rendering 渲染全解析(長文乾貨)

離屏渲染使用不當常常會導致螢幕卡頓,造成不好的使用者體驗,所以通常我們會盡量避免使用離屏渲染,例如減少圓角剪裁。但除了減少圓角剪裁,還有什麼方式可以避免離屏渲染?以及離屏渲染使用過多為什麼會造成卡頓?本文從計算機的渲染原理開始介紹,分析了螢幕成像和卡頓,然後講到 iOS 中的渲染框架,最後引入離屏渲染這一問題,非常系統地讓我們 iOS 的渲染原理有個比較深入的認知。

? 大話 Socket

@水水:要了解Socket首先要了解 TCP,而 Socket 是抽象出來的使用 TCP/UDP 的概念模型,遮蔽掉了晦澀的底層協議的實現,是一個介面。文字以圖文趣味的方式帶讀者瞭解 TCP 的三次握手和四次揮手。相信你讀完會讓你對 TCP 有更好的理解。

工具

Introducing Piranha: An Open Source Tool to Automatically Delete Stale Code

@xiaofei86:最近,Uber 開源了可自動刪除無用程式碼的工具 Piranha。Uber 使用特性標記(Feature Flags)來做 A/B Test 和灰度釋出,當這些功能完成測試或釋出後就產生大量的無用程式碼,從而為專案帶來技術債務。Piranha 通過掃描原始碼來刪除無用功能標誌相關的程式碼,從而使程式碼庫更乾淨,更安全,效能更高且更易於維護。Uber 已經在 Android 和 iOS 中使用 Piranha,並已使用它刪除了大約兩千個過時的功能標記及相關程式碼。感興趣的讀者可以閱讀原文了解 Piranha 的實現,遇到的困難,以及在 Uber 自動化流程中的應用。

程式碼

Nuke 9

@老峰:Nuke 9 是一個 Swift 版的圖片載入庫,Github 擁有近 5k Star,它有詳細的文件,簡潔的 API,支援更多的圖片格式,使用全新的圖片處理圖形解碼協議,支援圖片預載入,更重要的是有高效的效能,比較遺憾的是目前僅支援 iOS 11+。

SwiftCoroutine

@四娘:一個 Swift 協程的第三方庫實現,提供了 Future 和 Channel 等功能:

// 在主執行緒執行協程
DispatchQueue.main.startCoroutine {
    
    // 返回 CoFuture<(data: Data, response: URLResponse)>
    let dataFuture = URLSession.shared.dataTaskFuture(for: imageURL)
    
    // 掛起協程 await CoFuture 的結果,並且不會阻塞執行緒
    let data: Data = try dataFuture.await().data

    // 把 data 轉成 UIImage
    guard let image = UIImage(data: data) else { return }
    
    // 在 global queue 執行耗時任務,在不阻塞執行緒的同時 await 結果
    let thumbnail: UIImage = try DispatchQueue.global().await { image.makeThumbnail() }

    // 在主執行緒將 image 設定給 UIImageView
    self.imageView.image = thumbnail
}
複製程式碼

音視訊

macOS 10.15: Slow by Design

@老驢:在379 期的 ATP 中討論了他們在升級了 macOS 10.15 之後明顯感覺系統變慢。本文的作者就根據這個去排查問題的根源,找出解決方案,並記錄下其中的每一步。

不知道有多少人感知到了這個問題的存在,如果你對系統底層感興趣的話,不妨來看看這些作者們是怎麼一步一步發現問題根源並解決問題的。

內推

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

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

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

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

關注我們

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

老司機 iOS 週報 #114 | 2020-05-25

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

說明

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

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

相關文章