老司機 iOS 週報 #9

老司機iOS週報發表於2019-03-02

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

文章

[譯]奔跑吧!RunLoop!

揭示了 RunLoop 的本質和 RunLoop 的執行過程。翻譯有一些瑕疵,喜歡閱讀英文的朋友可以直接看原文。

[譯] 揭祕 iOS 佈局

詳細全面介紹了介面佈局的相關函式的執行順序和作用。

[譯]為什麼你的 APP 在 Sketch 上看起來更好: 探索 Sketch 和 iOS 的渲染差異

如果你非常嚴格的比對 Sketch 的效果圖和真機上的效果會發現,即使引數一致文字排版、陰影、漸變還是會有微小的不同。文章結合例項展示了這些效果有何不同。壞訊息是陰影和漸變的不同並沒有解決方案,只能自主調節引數。

Hook Objective-C Block with Libffi

Objective-C 的方法 hook 可以通過 Method Swizzling 實現,但 block 的 hook 並不一樣。該文分析了 block 的 hook 原理,參照 MABlockClosure 的實現和 Aspects 的 API 設計,基於 libffi 實現了對 Objective-C Block 的 hook —— BlockHook

More Interface Builder Tips And Tricks

一些 Interface Builder 的使用小技巧,便捷快捷鍵,小 Tips,如果你的專案中也在使用 IB,這篇文章能給你帶來幫助。

Ruby 對於 iOS 開發發展的影響

今年是 Ruby 這門語言誕生的 25 週年,作者特別寫了一篇文章介紹了 iOS 開發工具鏈發展史裡 Ruby 發揮的作用,講述 Cocoapods、Fastlane 等等這些工具當時選擇 Ruby 的理由。

小程式支援開啟移動應用到底是怎麼回事?

文章詳細講解了什麼場景下小程式可以開啟 App 以及 App 端程式碼應該怎麼寫。

iOS 編譯器

本文是 objc.io 第六期文章,還有姊妹篇 Build 過程、Mach-O 可執行檔案。文主要探討編譯器主要做些什麼,以及如何有效的利用編譯器。

Synchronous Unit Tests

Swifting.io 的新文章,作者在文中一步一步地實現了一套可讀性和執行效率都很不錯的單元測試方案,讓開發者能以同步的方式編寫單元測試。如果你沒有足夠的時間閱讀文章,也可以直接在 Github 檢視這套方案的原始碼。

XCTKVOExpectation for native Swift key paths

文章介紹了 XCTest 測試框架新增 API XCTKVOExpectation 的一種使用方式,作者封裝了 KVOException 並對 XCTestCase 進行擴充套件,以方便開發人員完成測試用例的編寫。另外,作者已經把所有相關程式碼都開源在了 Github 上。

iOS 微信記憶體監控

本文非常詳細的從資料收集、資料儲存、資料上報,頁面展現、降低誤判幾個方向,講解如何實現線上記憶體監控及 FOOM 導致的系統強殺上報。

FOOM 是指 APP 在前臺因消耗記憶體過多引起系統強殺,微信每天 FOOM 次數與登入使用者數比例接近 3%,同期 crash 率 1% 不到。為此,微信開發此線上記憶體監控工具,FOOM 率由 17 年年初 3%,降到目前 0.67%,效果顯著。

awesome-blockchain

他們說 2016 是 VR 元年,他們說 2017 是人工智慧元年,他們說 2018 是區塊鏈元年。可能是新時代的開端,也可能只是曇花一現的潮流。

弄潮兒,如果你做好準備,這裡有所有區塊鏈(BlockChain)技術開發相關資料,包括 Fabric 和 Ethereum 開發資料。

工具

Sketch 49 更新:邁向互動設計領域的第一步

Sketch 在最新的 49 版本中增加了製作互動設計的新功能,可以使用連線和熱點圖層來連線 Artboard,並且可以在 Sketch,Sketch Cloud 和 Sketch Mirror on iOS 進行預覽。設計和互動在一個軟體中統一已經是目前的發展趨勢,Sketch 這次的更新可以說是極其重要的一步。

An iOS Runtime Headers Search Tool

通常我們檢視系統類的 Undocumented API 或者 Private API 的時候,需要藉助 Class Dump 來進行,又或者去直接去尋找業內已經 dump 後開源的文件,而這個工具是實時線上查詢平臺,支援查詢 『iOS8 ~ iOS11』的 iOS Framework,並會列出該類或者方法在哪些系統版本中使用。

程式碼

騰訊開源了一個高效能圖片框架

去年 Swift 大會上騰訊的工程師介紹過如何構建一個高效能的圖片框架,現在這個框架終於開源出來了,合理的架構和執行緒模型,並特別針對不同場景進行優化,讓它能充分發揮硬體的效能。據悉這個專案已經三年了,這個框架在騰訊內部有很多專案都在使用,已經經過了生產環境的考驗。

FlyoverKit

FlyoverKit 可以讓你 360° 俯瞰 MKMapView,效果令人驚歎,無需額外的操作、所有的配置都保留可用。

FluxCapacitor — This is what makes the Flux design pattern possible

FluxReact 開發中很重要的一種程式設計思想。它在 JavaScript 有很多種實現,比如 官方的 Facebook Flux很多人熟悉的 Redux 等。但這種單向資料流的設計思想在 iOS 開發中使用的並不多,現在相對知名的有 ReSwift,FluxCapacitor 使用 Swift 的 protocols 和 typealias 完成了另一種實現。另外該作者在學習 Flux 這一思維的時候,用多種方式實現了同樣功能的 SimplestCounterSample 以輔助自己理解,也十分推薦。

Swift-Kuery-ORM

IBM 新開源了 Swift-Kuery-ORM,構建於 Swift-Kuery 之上,可以通過外掛連線 PostgreSQLSQLiteMySQL

XHLaunchAd

功能豐富的開屏廣告、啟動廣告解決方案,主要優勢如下:

  • 支援靜態/動態圖片及 MP4 視訊廣告;
  • 支援全屏/半屏廣告,相容 iPhone 和 iPad;
  • 支援廣告點選事件,支援自定義跳過按鈕、新增子檢視、設定完成動畫;
  • 支援網路及本地資源,自帶圖片/視訊下載、快取功能;
  • 支援設定資料等待時間等;
  • 作者長期維護,專案文件較完善,且有技術交流群。

只需簡單配置即可實現複雜業務需求,有需要的同學可以嘗試使用。

MessageViewController

MessageViewController 是 Swift 版本的 SlackTextViewController,是 slack 聊天介面的一個可互動的基礎UI控制元件。MessageViewController 的功能完成度和程式碼質量都特別高。如果有類似 slack 聊天介面的需求或者想學習 slack 聊天介面的實現效果,不妨看一下 MessageViewController。

Swift-NIO

蘋果官方在try! Swift上釋出了Swift-NIO,它是一個事件驅動的非阻塞的網路框架,用來寫高效能網路應用。
蘋果在 Server-Side 方面努力,看得出對 Swift 的重視和對它的期望都很高。

音視訊

iOS 元件化 / 構建優化 / 持續化整合

本視訊介紹了在滴滴出行業務的不斷擴充、客戶端開發團隊人數激增、程式碼量急劇膨脹、開發人員物理地域不同、人員間的協同開發成本、程式碼維護成本成指數型增加的背景下,如何實現穩定高效的協同開發、高效地進行程式碼複用與持續整合以及避免程式碼量巨大導致的單次構建耗時長的問題。其中包含了滴滴的一系列自研工具和對現有開源工具的一些魔改,思路值得借鑑。

隨著集團業務的不斷髮展,研發團隊規模增大(100+),App 活躍持續增長(千萬級),客戶端單一的工程已經不能夠滿足當前業務需求。因此多工程整合的客戶端專案應用而生,工程元件化勢在必行。本視訊對京東金融移動端的元件化做了詳細的介紹,正在做元件化或者有類似需要的同學值得一看。

本期編輯

@沒故事的卓同學@四娘@mmoaay@享耳先森@EyreFree@Damonwong@折騰範兒_味精@張嘉夫@AidenRao@Parsifal

說明

? 表示需翻牆

相關文章