老司機 iOS 週報 #8

老司機iOS週報發表於2018-02-26

新的一年,歡迎第十位編輯 @Parsifal 的加入。

新聞

App Store 描述截圖從 5 張增加到 10 張

蘋果再次對 App Store 更新了上架規則,新的規則宣佈,開發者對於其開發的 App,在截圖介紹部分可以新增 10 張螢幕截圖,而之前是 5 張。

四月起,所有提交稽核的 APP 都要基於 iOS 11 的 SDK 開發

蘋果發出最新通知,從 2018 年 4 月開始,所有提交稽核的 APP 都要基於 iOS 11 的 SDK 開發,且支援 iPhoneX 的 Super Retina 螢幕

這也意味著,開發者至少需要使用 Xcode 9 來開發 App ,並確保他們的 APP,在 iPhoneX 上根據安全區域進行了適配。

文章

? 探索 iOS 記憶體分配

介紹了 iOS(OS X)系統中 VM 的相關原理,以及如何使用 VM Track 模板來分析 VM Regions,通過深入瞭解 iOS 的記憶體分配,可以有針對性的對記憶體進行優化。

? 移動場景下通訊協議 FlatBuffers、ProtocolBuffers、MessagePack 選優

JSON 有可讀性高、易於使用的優點。但是也有解析費時、解析記憶體耗費高、及資料量大的缺點。除了 JSON,現在主流的還有 MessagePack、FlatBuffer、ProtocolBuffers 通訊協議。文章綜合不同場景對比了這幾種通訊協議的優劣。

Just Controllers

iOS 上的 MVC 模式最後會導致 VC 中有大量程式碼在業界已經達成了共識。優化的一種方式是把 VC 中的程式碼拆分到 child view controller。實踐中你會發現 child view controller 的使用起來並不像 UIView 一樣簡單,要注意它和 parent view controller 的生命週期控制。View controller 中的 view 使用起來和一個單純的 UIView 例項也有不同。有的場景自定義一個 controller 類包含 UIView 也許會是一個更好的主意。

UIVisualEffectView Tutorial: Getting Started

利用 UIKit 中提供的 UIVisualEffectView 來實現常見的模糊背景的效果簡單又好用。文章介紹了模糊的演算法原理和 UIVisualEffectView 的使用方式。

Unit testing asynchronous Swift code

介紹了單元測試中處理非同步程式碼的幾個小技巧:通過設定 XCTestExpectationinverted 屬性來驗證任務是否完成;將非同步閉包新增到同步執行緒中,接著在同步執行緒中執行一個空的閉包來判斷非同步操作是否執行完成;在程式碼中通過 mock 將非同步的操作封裝為同步的操作方式來避免處理非同步的情況。

iOS Developer Roadmap

國外開發者維護的 iOS 開發技能導圖,作者將 iOS 開發中所涉及到的技能總結為一個個 topic,並提供對應 topic 的學習資源。無論你是還未入門的小白,還是想繼續提升的開發者,亦或是正在準備面試的求職者,都可以利用這份圖譜進行知識學習和梳理。

iOS IP 直連原理剖析

移動網際網路的網路狀況十分複雜,三大運營商、3G、4G、Wi-Fi、地點等任何一個狀態的改變都會導致網路狀況的變化,IP 直連可以跨過運營商 LocalDNS 伺服器解析過程,從而達到降低延遲、避免劫持的效果。本文對 iOS IP 直連原理進行了剖析,高度概括,通俗易懂,值得一看。

iOS Code Signing Tutorial Series

由 Shashikant Jagtap 釋出的 iOS Code Signing 相關係列部落格,總共五篇。眾所周知,iOS Code Signing 對於大部分 iOS 開發者來說,一直都是最神祕的存在,儘管有所謂的官方文件。顯然作者也發現了這個問題,所以他採用了親身實踐的方式,力求更簡單的為讀者解讀 iOS Code Signing 的一些細節,小編大體看了下,確實通俗易懂很多。(PS:有在做技術文章翻譯的童鞋可以考慮把這個系列翻譯成中文,造福更多開發者~)

我是怎麼慢慢變懶的(2) : Jenkins 全自動化

作者根據自己的實際專案經驗,寫了一篇總結。大概講了「我搭建了一個怎麼樣的 Jenkins 環境」以及在搭建過程中遇到了哪些問題。

工具

Snipaste for Mac 公測版推出

具體介紹可以看少數派的文章:Snipaste for Mac 公測版推出,改變你在 Mac 上的截圖體驗

程式碼

ZHStatusVolume

設定音量時隱藏系統的 hud,將音量變化展示在狀態列上。用 OC 寫的,相容 Swift,剛剛釋出第一個版本,如果使用中有問題歡迎聯絡我@沒故事的卓同學

ReactiveLists

ReactiveLists 基於 React 程式設計思想,封裝 UITableView 和 UICollectionView 的 API,使用該 API 可以編寫 無狀態函式 來生成列表頁面。作者認為,在向 UIKit 元件提供資料上,這些無狀態函式相比 DataSourceDelegate 更易於閱讀和迭代,而且還易於測試。

作者關於 ReactiveLists 的介紹:Open Sourcing ReactiveLists for iOS

Uber 的 App 開發架構 RIBs

Uber 的跨平臺開發框架 RIBs,架構名由 Router, InteractorBuilder 的首字母組合而成,表示了該架構的構成。優勢如下:

  • 在 iOS 和 Android 間共享同一套架構;
  • 可測性和隔離性,便於進行單元測試同時各個獨立的 RIB 類間高度解耦;
  • 提供程式碼生成、記憶體洩漏檢測、靜態分析和執行時整合等一系列開發工具;
  • 一種可伸縮的架構,已被證明可適用於幾千人基於統一程式碼庫開發的場景。

一種適合響應式程式設計和大專案的架構,對架構有興趣的同學一定不要錯過。

SwifterSwift

SwifterSwift 是一個用 Swift 編寫的 Extension 的集合,涵蓋了開發過程中大部分會用到的方法和函式,是一個不錯的工具庫。同時 SwifterSwift 大概有 SwiftStdlib Extensions、Foundation Extensions、UIKit Extensions、AppKit Extensions、CoreGraphics Extensions、CoreLocation Extensions、Misc. Extensions 等一系列分類。

音視訊

? ? Swift’s Reflective Underpinnings

Swift 核心開發團隊成員在 Swift Summit 上的演講視訊。介紹了 Swift 的動態能力的構建基礎,提及了未來 Swift 版本中可能引入的動態特性。其實在 Swift 中已經有一些反射的能力,每個型別在內部都有 metadata ,可以查到這個型別的欄位、方法,只是沒有暴露出來。強烈推薦 Swift 愛好者觀看,乾貨很多。

另外 Swift Summit 的其他視訊也都分享在了 Skilled 網站上,大家可以關注一下。

本期編輯

@沒故事的卓同學@mmoaay@EyreFree@Damonwong@張嘉夫@AidenRao@Parsifal

說明

? 表示需翻牆,? 表示店長推薦

相關文章