老司機 iOS 週報,只爲你呈現有價值的信息。ios
你也能夠爲這個項目出一份力,若是發現有價值的信息、文章、工具等能夠到 Issues 裏提給咱們,咱們會盡快處理。記得寫上推薦的理由哦。有建議和意見也歡迎到 Issues 提出。git
@極速男孩:斯坦福大學的 CS193p 課程是針對 iOS 開發所推出的一個基礎教程。在2020年春季的更新中,加入了在去年 WWDC 中推出的 SwiftUI 的內容。更多的內容能夠看這裏 。github
@含笑飲砒霜:在 WWDC2019 大會上,隨着 Swift5.0 發佈以後,沉寂多年的 Swift 終於走上了快速發展的道路。iOS 開發語言的重心已經在悄悄倒向 Swift,本文即在講述攜程酒店在引入 Swift 混編帶來的各類問題及解決方案,可供開發者們借鑑參考。macos
@蓮叔:自從 IBM 在 Swift 上打了退堂鼓後,Server-side Swift 社區受到了不小的打擊。你們紛紛猜想會不會這個命題已經再也不成立。這篇文章帶來了很多的好消息,甚至認爲 2020 將會是 Server-side Swift 的利好年,其中最主要就是 Swift6 的 feature 中絕大多數都直接或間接的和 Server-side 有關或者利好。還有 Swift 的核心團隊迎來了 Tom Doron 和 Saleem Abdulrasool, 一個是 SwiftNIO 的負責人,一個在嘗試把 Swift 移植到 Windows,這些跡象都說明 Swift 的核心團隊對於讓 Swift 跳出 Apple 生態的決心。其餘還有很多使人振奮人心的消息,具體建議你們直接看文章。swift
@張嘉夫:爲了便於設計師和工程師之間的溝通協做,做者爲 iOS App 構建了一個設計系統,並在這個系列文章中介紹了他的經驗,包括排版、顏色和動畫等部分。設計系統可以定義產品的設計語言,包含可重用的組件,有明確的設計標準,能夠將它們組合在一塊兒來構建任意一款 app。採用設計系統的優點是能夠提升設計的一致性、提升團隊工做效率、方便輔助功能的開發,此外組件的可重用性還擴大了設計的應用範圍。安全
@邦Ben:Flutter 這類新技術出現,最大的缺陷之一就是配套生態弱。近期,Google 爲了提高 Flutter package 生態系統的可信度,增長了發佈者認證和評分。根據各項指標評選出 270 個項目賦予 Favorite 徽章。這意味着,有 Favorite 徽章的三方庫,你能夠相對放心的使用。同時,Flutter 團隊和英國的 Invertase 合做進行推動 Google Flutter 插件的優化(例如 firebase)。綜上,這意味着 Flutter 生態會進一步獲得改善,隨着參與人數的日益增多,將會愈來愈好。架構
@享耳先森:Native View 如何進行組件化抽象並複用一直是個難題,做者經過一個實例介紹他的思路,並提供了 demo 項目。做者將可能複用的 View 抽取成 components,並提供對應的 ViewModel,同時,ViewModel 能夠組合實現不一樣的 Protocol 完成諸如選中等事件分發。app
@CrazyCoderShi:Lottie 是一個由 Airbnb 開源的橫跨 Android,iOS,Web 等多端的一個動畫方案,它以 JSON 的方式解決了開發者對複雜動畫實現的開發成本問題。最近閒魚開發團隊在 Flutter 端實現了 Lottie - fish-lottie 。本文詳細地介紹了 Lottie 架構以及 fish-lottie 實現思路👍。框架
@zvving:本文是 Verge 上手指南:從一個數據驅動頁面的小型業務場景出發,介紹如何引入 Verge 提供良好的業務代碼隔離。ide
Verge 是 Flux 架構的又一 iOS 實現,設計與 Vuex 基本一致,View 同時兼容 UIKit 及 SwiftUI,事件綁定支持 RxSwift 及 Combine。 更多內容請參考 Verge-Docs
@JimQ:工做要高效,方法很重要,這是一篇寫給技術人的我的工做學習管理的方法論。若是你對精力管理、多層次的工做/學習計劃、番茄工做法、定額工做法、批處理、多任務並行、圖層工做法這些概念只知其一;不知其二,快到碗裏來吧。值得一提的是,本文不僅講方法其然,還講其因此然,邏輯體例清晰,排版重點突出,配上做者本人真實場景的思惟導圖,是一篇深度好文,不是標題黨。
離屏渲染使用不當經常會致使屏幕卡頓,形成很差的用戶體驗,因此一般咱們會盡可能避免使用離屏渲染,例如減小圓角剪裁。但除了減小圓角剪裁,還有什麼方式能夠避免離屏渲染?以及離屏渲染使用過多爲何會形成卡頓?本文從計算機的渲染原理開始介紹,分析了屏幕成像和卡頓,而後講到 iOS 中的渲染框架,最後引入離屏渲染這一問題,很是系統地讓咱們 iOS 的渲染原理有個比較深刻的認知。
@水水:要了解Socket首先要了解 TCP,而 Socket 是抽象出來的使用 TCP/UDP 的概念模型,屏蔽掉了晦澀的底層協議的實現,是一個接口。文本以圖文趣味的方式帶讀者瞭解 TCP 的三次握手和四次揮手。相信你讀完會讓你對 TCP 有更好的理解。
@xiaofei86:最近,Uber 開源了可自動刪除無用代碼的工具 Piranha。Uber 使用特性標記(Feature Flags)來作 A/B Test 和灰度發佈,當這些功能完成測試或發佈後就產生大量的無用代碼,從而爲項目帶來技術債務。Piranha 經過掃描源代碼來刪除無用功能標誌相關的代碼,從而使代碼庫更乾淨,更安全,性能更高且更易於維護。Uber 已經在 Android 和 iOS 中使用 Piranha,並已使用它刪除了大約兩千個過期的功能標記及相關代碼。感興趣的讀者能夠閱讀原文了解 Piranha 的實現,遇到的困難,以及在 Uber 自動化流程中的應用。
@老峯:Nuke 9 是一個 Swift 版的圖片加載庫,Github 擁有近 5k Star,它有詳細的文檔,簡潔的 API,支持更多的圖片格式,使用全新的圖片處理圖形解碼協議,支持圖片預加載,更重要的是有高效的性能,比較遺憾的是目前僅支持 iOS 11+。
@四娘:一個 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
}
複製代碼
@老驢:在379 期的 ATP 中討論了他們在升級了 macOS 10.15 以後明顯感受系統變慢。本文的做者就根據這個去排查問題的根源,找出解決方案,並記錄下其中的每一步。
不知道有多少人感知到了這個問題的存在,若是你對系統底層感興趣的話,不妨來看看這些做者們是怎麼一步一步發現問題根源並解決問題的。
老司機週報團隊聯合知識小集和 SwiftGG 翻譯組收錄了一份靠譜的內推職位。
若是你想找工做,點這裏:www.yuque.com/iosalliance…
若是你想招人,點這裏:www.yuque.com/iosalliance…
固然,也歡迎你關注咱們每一期的週報,咱們會在每期週報底部及時更新編輯內推崗位。
咱們開通了公衆號,每期發佈時公衆號(OldDriverWeekly)會推送消息,歡迎關注。
同時也支持了 RSS 訂閱:github.com/SwiftOldDri… 。
🚧 表示需某工具,🌟 表示編輯推薦
預計閱讀時間:🐎 很快就能讀完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)