老司機 iOS 週報,只為你呈現有價值的資訊。
你也可以為這個專案出一份力,如果發現有價值的資訊、文章、工具等可以到 Issues 裡提給我們,我們會盡快處理。記得寫上推薦的理由哦。有建議和意見也歡迎到 Issues 提出。
新聞
非 Touch Bar 版 13 寸 MacBook Pro 存電池隱患,蘋果將免費修理
Apple 已經確定,少數 13 英寸 MacBook Pro(無觸控欄)電腦的某個元件可能會出現故障,導致內建電池發生膨脹。這並不是安全問題,Apple 會免費更換符合條件的電池。受影響的裝置生產日期在 2016 年 10 月至 2017 年 10 月之間,根據產品序列號確定電池是不是符合更換條件。
文章
? ? 深入理解 iOS Rendering Process
文章深入的介紹了一下 iOS 的渲染機制,從整體的 iOS 渲染架構總覽,到 OpenGLES 與 Core Graphics 的渲染管道,再到渲染提交前的 Layout Display Prepare Commit ,最後又介紹了一下 animation 的動畫實現,更深刻的瞭解了渲染機制有助於在日常的開發工作中遇到渲染效能問題時,能夠梳理歸納檢測問題程式碼的思路。
? JavaScriptCore 與 Promise 那點事
文章使用 JavaScriptCore 構建一個 JavaScript 和 Native 程式碼混合的環境。為了解決 JavaScript 裡的 Callback Hell 引出 Promise 物件,並實現一個 Native 的 Thenable 物件,達到在 Native 環境下實現 Promise 的函式的效果。
? ? Conditional conformances in Swift
介紹了 Swift 4.1 新引入的特性 Conditional Conformaces 的基本用法以及優勢,並分析了兩個實用場景:遞推設計(Recursive design)和多重請求(Multipart request)。
? Behavior-Driven Testing Tutorial for iOS with Quick & Nimble
相比於傳統的 UI Testing,行為驅動測試(BDT,Behavior-Driven Testing,類似的概念還有用於軟體工程開發領域的 BDD,Behavior-Driven Development)只專注於 App 在某一操作後的表現行為是否如預期,而不關心表現行為具體是怎麼實現的。RW 這篇文章介紹了 BDT 的概念,並通過一個例子生動形象地教學瞭如何使用 Quick 和 Nimble 兩個測試框架進行行為驅動測試。對於想通過優化測試流程來提高專案質量的同學,這篇文章的內容很值得閱讀與嘗試。
? Video Depth Maps Tutorial for iOS: Getting Started
iOS 11 推出了一個全新的特性:針對雙攝像頭裝置錄製的視訊可以提供深度資訊。這對於視訊處理而言是一個巨大的進步,在以前純基於 2D 影像分析的基礎上,結合深度資訊可以更輕鬆的實現背景虛化、風格變換等很 fancy 的效果。
Raywenderlich 這篇文章介紹了這個特性的應用,文章秉承其一貫的優點:非常易讀且結合實踐,建議做音視訊的同學可以閱讀,儘早嘗試在業務中應用這個新特性。
? 實現一個自定義檢查規範的 Clang 外掛
作者從 給OC程式碼新增型別檢查 的需求入手,大致介紹了一下 Clang 外掛能做什麼 和 Clang外掛怎麼去開發 兩件事情。對於想嘗試 Clang外掛開發 的人來說,是一篇不錯的參考文章。
? What`s New in Swift 4.2
Swift 4.2 馬上要釋出了,作者簡單介紹了一下 4.2 已經落實的功能。
- Enum 新增 CaseIterable 協議,支援 allCases 屬性;
- 新增編譯標記
#warning
和#error
; - 動態成員變數查詢
@dynamicMemberLookup
, 這是一個比較有意思的改動,是 Chris Lattner 為了支援 Python 而加上的。推薦閱讀 – 關於這個改動的討論 - 布林值切換
toggle()
; - 集合移除支援過濾器。
中文版可以看一下 @知識小集 的這篇 文章。
? metalkit.org 全站翻譯
推薦一個學習 Metal 的資源:metalkit.org
有一系列 MetalKit 教程,網友 @XanderXu 將其翻譯成中文,推薦給對 Metal 有興趣的同學。
? 深入剖析 JavaScriptCore
現在大前端的發展大潮下,JS 與客戶端結合越來越緊密,大家都知道 JS 可以任意下發程式碼,在執行期動態執行,這一切都是通過 JavaScriptCore 這個 JS 引擎來實現的,本篇作者會帶著大家深入剖析 JavaScriptCore 最底層的工作原理,去探索 JS 程式碼從編譯到執行都是怎樣運作的,內部都包含了哪些模組,最後還介紹了除了 JavaScriptCore 之外其他的 JS 引擎。
? iOS 應用逆向工程資料彙總
逆向是一個神祕有趣的領域,很多需求借助逆向可以看看其他 App 怎麼實現的,這兩年也有若干常用工具發生了變化,產生了一些新的工具。這篇文章總結下基礎的 App 逆向的方法,也全方位收集了多種資料包括工具 / 書籍 / 文章 / 論壇。
? Making your iOS application easy to read with these simple steps.
優秀的程式設計師會用盡可能簡單的方式來解釋他們的程式碼,幾個步驟,讓你的 iOS 程式碼容易閱讀。理解程式碼不應該是去理解“如何”實現的,而是要理解想要“達成”什麼。
? How to Make a Game Like Candy Crush with SpriteKit and Swift: Part 1
這個教程分為三個部分,教你如何使用 SpriteKit 和 Swift 製作一款類似 Candy Crush Saga(糖果傳奇)的遊戲。在這個教程中可以學習到與 Swift 有關的列舉、泛型、下標、閉包和擴充套件等知識,還可以學習到遊戲的架構和最佳實踐。
? RTL 適配歷程
RTL 語言(如阿拉伯語)的適配一直是一個比較令人頭疼的問題,本文以 Apple 官方文件 為基礎同時結合作者的自身實踐,從佈局、手勢、圖片等多個方面對 iOS 9 之後的 RTL 適配做了詳細的歸納與總結,同時給出了具體的示例程式碼,有相應需求的同學絕對不要錯過。
工具
谷歌開源 iOS 輔助功能自動測試框架 GTXiLib
GTXiLib 採用 Objective-C 編寫,能與現存的 XCTests 測試框架整合。並在 XCTest 結束呼叫 tearDown 前,執行所有註冊的可用性檢查。當 GTXiLib 檢測失敗時,XCTest 的測試也會失敗,兩者相輔相成,能夠幫助開發者更好的為每個人提供無障礙服務。
程式碼
JPVideoPlayer 3.0 使用介紹
JPVideoPlayer 是我使用過最棒的基於 AVPlayer 的封裝庫。曾經在某個在足球專案中深度使用過。當時除了下載這個功能還不完善其他使用體驗接近完美。比如,一句話就可以把任何 View 當做播放容器。
現在作者重構了專案的邊下邊播功能和 Cell 中的內嵌播放器功能。只能說,如果你的專案中有這類需求,那麼 JPVideoPlayer 是不二選擇。
另外,程式碼的結構和風格也值得閱讀。
Swift Tagged
同樣都是 id,同樣都可以用 Int
來表示,但使用者的 id 和文章的 id 明顯是不能混用在一起的,Swift Tagged 這個庫就為我們提供了一種便利的型別宣告方式 typealias Id = Tagged<User, Int>
,能夠讓我們在編譯期避免欄位誤傳的問題。
BTW,這是 Kickstarter 兩位前任工程師,創辦的網站 Point Free 出品的一部分內容。
專欄
鍾穎的開發筆記
鍾穎前後供職於騰訊、阿里巴巴、微軟,同時也是業內知名的獨立開發者,個人開發過 Pin,JSBox 等備受好評的高質量應用。『鍾穎的開發筆記』記錄了他的一些開發經驗與技能,內容主要有:
- 獨立開發經驗(Pin & JSBox)
- 通用程式設計技能
- 大公司面試與研發流程(BAT & 微軟)
- iOS 與 Mac 領域相關技能
- 我的應用相關的故事
比如本期週報的『JavaScriptCore 與 Promise 那點事』就是出自他的小專欄,專欄內已產出 6 篇心得,目前僅需 ¥64 即可訂閱。
關注我們
我們開通了公眾號,每期釋出時公眾號會推送訊息,歡迎關注。
同時也支援了 RSS 訂閱:github.com/SwiftOldDri… 。
本期編輯
@沒故事的卓同學,@四娘,@mmoaay,@享耳先森,@EyreFree,@Damonwong,@折騰範兒_味精,@張嘉夫,@AidenRao,@Parsifal, @葉孤城,@aaaron7
說明
? 表示需翻牆,? 表示編輯推薦
預計閱讀時間:? 很快就能讀完(1 – 10 mins);? 中等 (10 – 20 mins);? 慢(20+ mins)