老司機 iOS 週報 #51 | 2019-01-07

老司機iOS週報發表於2019-01-07

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

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

新聞

iOS 靠譜內推專題

號外號外~這裡有一份靠譜的 iOS 內推職位列表,希望能給大家在這個裁員寒冬帶來一點暖意。

他們的 2018 年總結

在看完 50他們的 2018 年終總結,相信大家都有所收穫。本期同樣也為大家帶來了一些小夥伴們自己的年終總結,希望這些總結能夠幫助到大家。

文章

? ? Understanding Xcode Build System

本文介紹了Xcode Build System的各個部分,幫助我們提升對於 Xcode 編譯的基礎知識。很多的包體積減少方案也是基於這個基礎知識之上,對於 iOS 開發人員來說很有必要了解

  1. Preprocessor(預處理):這個階段處理一些語法糖的東西,譬如一些編譯巨集的展開
  2. Compiler(編譯):將 Swift 工程編譯成一箇中間語言,一般採用兩個編譯器,一個是 Swift 語言編譯器,一個是 OC、C++/C 編譯器(為了解決混編的問題)
  3. Assembler(彙編):將中間語言統一轉成作業系統能理解的二進位制程式碼
  4. Linker(連結):將一切依賴的外部庫加入到二進位制包中
  5. Loader(裝載):變成一個可執行程式,新增程式執行的入口,以便作業系統能夠直接跑起來

? ? OCEval - 動態執行 ObjectiveC 的熱修復方案

蘋果在18年多次對基於 runtime & JavaScriptCore 的熱修復方案進行全面的打壓,導致 JSPatch 以及其混淆 or 變種,變得難以過審。但是本文作者依然在熱修復的探索上尋找並實現了一條新的方案 OCEval。OCEval 的本質是作者自己實現了一個 OC 語法的簡單直譯器,包含了基礎的詞法分析與語法分析,從而能夠在執行期將 OC 程式碼生成抽象語法樹 AST 然後進行執行。這樣就可以將OC這種原本必須經過編譯再執行的語言,擴充套件為 js 那樣的解釋執行,從而能夠做到動態下發程式碼並且執行。同時再通過 runtime 進行 aspect 那樣的 hook 操作,實現熱修復線上程式碼。整個程式碼都已經開源,對編譯原理有興趣的同學值得深入好好學習一下。

? [App 探索] JSBox 中幽靈觸發器的實現原理探索

JSBox 中有一項奇特的功能 - 幽靈觸發器,它在 App 程式被殺死的情況下,也可以將通知固定在通知欄,即便使用者點選清除,也能馬上再彈出,永遠不消失。本文作者通過一系列的實踐研究分析了這個 “幽靈觸發器” 功能的實現原理,最終以 Demo 的形式給出了一個可行的實現方案,希望對感興趣的讀者提供幫助。

JSBox 是由鍾穎開發的一個提供 JavaScript 整合開發環境的 iOS 應用,可以通過它來構建各種有趣的效率工具,其中有很多巧妙的功能實現值得我們研究探討。

? 10w+ 字詳解 Runtime

如題,本系列 Runtime 文章總共九篇,總字數為 10w+。一個技術要點能寫 10w+ 不容易,能把一個技術要點迴圈漸進、細緻確當、系統全面地講清楚,真正做到一個系列搞定,足見作者的匠心。如果不想再被 Runtime 題材的文章“碎片化”,那就從這裡開始吧!

? 技術年貨:美團技術沙龍合輯大放送——85 個演講,70+ 小時視訊

雖然美團近期在面臨裁員風波,但不可否認的是美團是國內對技術分享做的最好的公司之一了。本文詳細整理了今年所有線上線下美團技術沙龍的演講稿和視訊,覆蓋前端、後臺、系統、資料、演算法、測試、運維等技術領域。這份“饕餮盛宴”必然會深受追求卓越的同學的喜愛。

? How to use raw strings in Swift 5

當字串應用於正則或初始化 JSON 等場景時,轉義字元會給我們帶來一些小煩惱。比如試試查詢 \(sth) 的正則如何實現? Swift 5 中,新增了 Raw String 語法(用井號包裹,#"raw string"#), 通讀本文,可以快速瞭解 Swift 5 中的原始字串該如何應用。

擴充套件閱讀:SE-0200

? iOS 效能優化之計算多行 Label 高度的新方法

本文中“根據字型來計算字串總寬度,從而得到多行 Label 高度”的想法,也比較新穎,網上也沒有找到資料,但是某些讀者日常開發中可能會碰到,本文比較系列的從發現問題到解決問題進行了闡述。如果這篇文章能夠給讀者們造成一些啟發,也能夠讓這篇文章發揮價值。

? ? Swift CoreNFC as quick as possible

正如標題所寫的,這是一篇快速使用 CoreNFC 的教程。本文總結了使用 CoreNFC 的主要流程和一些需要注意的細節。文章內容足夠用來了解 CoreNFC 了,但如果想感受或者弄清一些細節,最好還是實踐一下。

設計

? [譯] 色彩無障礙性產品設計指南

數字產品的無障礙設計旨在為所有人提供精緻的使用體驗,這些人包括有視覺、語言、聽覺、身體或者認知障礙的人。關於無障礙設計的討論有很多,但你是否想過色彩的無障礙設計?這篇文章會介紹如何使用你已經知道的設計原則來進行色彩無障礙設計。

工具

少數派 2018 年終盤點以及編輯推薦

本統計中列舉了這過去一年裡,文章,APP,編輯的受歡迎的榜單。在這份年終報告中,我們可以看到一些耳熟能詳的應用,也看到一些我們並沒有留意到,但別人很喜歡的應用。各位童鞋不妨看一下 2019 是否有適合你新應用。

AssetImportKit

AssetImportKit 是一個用 Swift 編寫的跨平臺庫(macOS、iOS),可以在執行時將 Assimp 支援的檔案轉換為 SceneKit 場景。

Mach-O Kit

Mach-O Kit 是一個 Objective-C 框架,用來分析 Darwin 平臺的 App 所使用的 Mach-O 二進位制檔案。Mach-O Kit 簡單易用,並且是安全的,即使解析一個格式錯誤的 Mach-O 檔案也不會導致程式崩潰,可以放心使用。

程式碼

DynamicJSON

DynamicJSON 使用了 Swift 4.2 中引入的新特性 @dynamicMemberLookup 來實現 JSON 資料的快速訪問。相比傳統方式,你不再需要使用方括號和雙引號。

音視訊

ggtalk | 創業那點事:普通開發者的回憶、反思和迷茫

這是 ggtalk 創業系列的第二期,從在創業公司工作過的普通開發者的口中瞭解對於很多工程師而言,在創業公司是一種怎樣的感受, 主要由翻譯組的樑傑、珂珂和 MM 來做分享。其中最典型的,就是個人發展和公司發展頻繁的衝突和變化。公司業務經常變化,雖然能夠磨鍊工程師不斷的接受新的挑戰,但也會造成無法在某一個細分領域不斷深入。工程師在類似的境遇下該如何權衡,如何選擇,相信大家聽完這一期節目,會有新的感受。

Typed Notifications

通過 Notification 時其中一個問題就是傳送方跟接收方都必須通過約定去傳值,Swifter Talk 這一集就探討了如何通過型別化 Notification,統一使用對應型別的 Descriptor 去完成 payload 的編碼和解碼,去完成一套型別安全的通知系統。

內推

關注我們

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

老司機 iOS 週報 #51 | 2019-01-07

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

本期編輯

@四娘@享耳先森@Damonwong@折騰範兒_味精@張嘉夫@Parsifal@aaaron7@kyo@tom510230@anotheren@水水@looping@老老老老老老老驢@小非86@邦ben@紅紙@含笑飲砒霜@JimQ@XanderXu@老峰@zvving

說明

? 表示需翻牆,? 表示編輯推薦

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

相關文章