老司機 iOS 週報,只為你呈現有價值的資訊。
你也可以為這個專案出一份力,如果發現有價值的資訊、文章、工具等可以到 Issues 裡提給我們,我們會盡快處理。記得寫上推薦的理由哦。有建議和意見也歡迎到 Issues 提出。
新聞
? 蘋果秋季釋出會將在北京時間 9 月 11 日凌晨 1 點舉辦
一年一度的蘋果秋季釋出會的時間終於落定了,將於 9 月 11 日凌晨 1 點開始。你可以到 Apple 官網,也可以上騰訊視訊、愛奇藝、優酷、嗶哩嗶哩等多個平臺觀看,不用到現場,通通都是前排的待遇。
杭州的朋友,還可以聯絡 Price Tag 的作者 @61 同學,參與現線上下觀影活動。邊喝咖啡,邊觀看直播。報名連結。
文章
? ? 重磅!滴滴跨端框架 Chameleon 1.0 正式釋出
@CrazyCoderShi:Chameleon (簡寫 CML ) 是滴滴開發團隊歷時三年打磨的一套跨端解決方案, 最近終於釋出了 1.0 版本。CML 是一款真正專注於讓一套程式碼執行多端的跨端框架,擁有業內先進的工程化設計,豐富的基礎庫,獨創多型協議,提供標準的 MVVM 架構開發模式統一各類終端, 其能力堪稱最強:
- 支援所有小程式、H5和客戶端, 快應用的支援已經完成開發, 正在測試中
- 一套程式碼執行多端,並且高度一致
- 效能的極致體驗, CML 團隊在新能優化上多了許多工作, 包括包大小、各端載入速度、執行效率等等
- 生態化建設, 從元件庫到除錯工具都有官方標準產出, 並持續迭代
- 全方位能力加持, CML 擁有先進的工程化理念,整體開發、打包構建等流程非常高效
- 為降低原有專案遷移 CML 框架的成本,CML1.0 提供了以下兩種優雅簡潔的漸進式接入方案
- CML1.0 能夠將 CML 元件匯出成各端元件,讓你更自由地使用 CML
- CML 已釋出一款 webpack plugin:easy-chameleon,可直接在原有專案中整合 CML
CML 團隊未來的規劃中還有對 Native 跨端的支援, 比如 Flutter 和 React Native, 強的可怕。
? ? 基於 Mach-O 檔案的靜態連結的分析
含笑飲砒霜:這是系列文章中的其中一篇。靜態庫連結是指自己的模組與靜態庫裡的某個模組(用到的某個目標檔案,或多個目標檔案)連結成可執行檔案。Mach-O 目標檔案是原始碼編譯得到的檔案,檔案裡有機器指令、資料,還有連結時候需要的一些資訊,比如符號表、除錯資訊、字串等,然後按照不同的資訊,放在不同的“段”(segment)中。這篇文章解析了連結過程中空間與地址的分配,以及符號解析與重定位。其實動態連結比靜態連結複雜的多,感興趣的同學可以閱讀該系列中的其他文章。
推薦閱讀
? Code Review 最佳實踐
@享耳先森: 作者認為 Code Review 是軟體開發中的最佳實踐之一:首先可以更好在團隊內做到知識共享,其次可以有效提高整體程式碼質量,及時發現程式碼中可能存在的問題。作者還重點說明了 Code Review 應該怎麼做,如果你團隊中還沒有實行 Code Review 或對 Code Review 有什麼疑問,建議仔細讀這篇文章。
? ? Xcode Hacks to Make Your Life Easier
@老峰:掌握一些常用的 Xcode 快捷鍵,可以幫我們高效的 Coding,本文作者就為我們總結了如下 Xcode 使用技巧:
- 快捷的通過 database model 建立 model:⌥ + Hold left mouse、⌘ and arrows、⌥ and arrows
- 快捷建立建構函式:^ + Enter
- 快捷 Debugging:e 表示式、 breakpoint enable、breakpoint disable、continue
- 快捷瀏覽原始碼、檔案:⇧ + ⌘ + O、⌥ + ⌘ + [、⌥ + ⌘ + ]
文章中附有視訊講述這些快捷操作技巧,感興趣的讀者自行閱讀實踐吧。
? The power of Environment in SwiftUI
@小非86:Environment 是 SwiftUI 中獨有的特性,本文從比較基礎的角度,從對 Environment 的概念和使用技巧,到 Environment 的繼承和依賴注入,都通過簡單示例進行了講解。且文章篇幅較短,比較適合快速閱讀。
? ? A Swift YogaKit Guide to Flexbox
@小非86:Yoga 是 Facebook 開源的一個編寫檢視的跨平臺程式碼,YogaKit 用於 iOS 開發,它基於 Flexbox,讓佈局變得更簡單。本文為使用 Swift YogaKit 進行 Flexbox 佈局一份詳細指南,文章通過大量的程式碼和效果圖形象的向我們展示 YogaKit 的使用,指導我們如何使用 Flexbox 建立出色的佈局。推薦給有需要的讀者閱讀。
? 避免 iOS 元件依賴衝突的小技巧
@J_Knight_:本文作者介紹了一種避免 iOS 元件依賴衝突(當兩個元件依賴了同一個元件的不同版本,並且依賴的版本沒有交集的情況)的方法。大體方案是通過修改 subspec,實現預設中介者以及利用條件編譯的方式,是一個相對比較優雅的解決方案,有興趣的讀者可以點選原文學習具體方案。
? YYText 原始碼剖析:CoreText 與非同步繪製
@紅紙:本文是一篇 YYText 的原始碼分析文章,作者從 CoreText 佈局原理出發,剖析了 YYText 中核心計算、自定義富文字屬性、工具類封裝原因等。有需要了解圖文混排的同學可以參閱~
此外,作者對於 YYKit 中的其他原始碼倉庫也進行了詳細的原始碼分析。詳情可以參考作者的部落格。
推薦人:波兒菜
? 獨立開發者賬號被封與解封回顧
@anotheren:獨立應用 Pin 與 JSBox 的作者鍾穎近期經歷了開發者賬號被封與解封的風波,本文是他自己對本次事件的完整回顧。雖然是誤封,但是處理過程還是很值得學習,建議各位獨立開發者都看一看。
? BlockHook with Invocation(2)
BlockHook 這個庫相信不少同學都聽說過,它解決了在同步呼叫場景下對 Objective-C Block 的 AOP 問題。這篇文章是該庫的作者對 BlockHook 攔截器的介面設計與實現,是對 BlockHook 相關的第二篇文章,沒看過第一篇的可以先看一下第一篇 BlockHook with Invocation(1)。
程式碼
? ? CombineX
@zvving: RxCombine 嘗試讓 Observable 與 Publisher 能相互轉化,用橋接的方式相容 RxSwift 與 Combine。
CombineX 的目標則是提供完全對等 Combine 的開源實現:
- 完整相容 Combine API,目前已粗略實現所有功能
- 支援 iOS 10+, macOS 10.12+, 以及 Linux
- 提供 CombineX.Foundation, CombineX.Cocoa 擴充套件
- CombineX.Compatible:提供底層在 CombineX 與 Combine 之前自由切換的能力
專案仍在早期階段,感興趣不妨參考文件中的指引為專案添磚加瓦。
? ? Flutter 通用基礎庫 flutter_luakit_plugin
@邦Ben:眾所周知,flutter 跨平臺,但是使用體驗還不是很好,為什麼?因為生態還比較弱,沒有成熟可用的三方元件,最明顯的就是資料庫。目前因為不支援反射機制的原因,也沒有好用的 ORM 庫,妥妥裸寫 SQL,或者橋接轉換使用原生資料庫,就兩個字,痛苦。針對這種基礎庫不完備的情況,智寧大佬(Luakit 作者)靈機一動,flutter 在配合已穩定的 LuaKit 基礎庫可以迅速實現一整套完備的解決方案從而誕生了 flutter_luakit_plugin,提高了跨平臺的效率,並且可以利用 Luakit 的指令碼化來實現熱更邏輯層(這意味著你需要重度使用 Luakit 進行維護邏輯層,UI 層使用 flutter)。另外大傢伙都是支援擴充套件的,基礎能力不夠,依然需要自行擴充套件。目前據瞭解,該方案主要使用方為 YY 團隊,並且他們的 flutter 系列文章也推薦一看(見文章底部)。
- 多執行緒介面
- orm 模型介面
- 檔案操作介面
- http 請求
- 非同步 socket 介面
- 全域性通知機制
- Lua 程式碼加解密
PS: 部分同學可能想問:我僅僅只是想用個 ORM 怎麼辦?作者貼心的給出了純 flutter 呼叫的版本來降低使用成本:flutter_orm_plugin。
內推
老司機週報團隊聯合知識小集和 SwiftGG 翻譯組收錄了一份靠譜的內推職位。
如果你想找工作,點這裡:www.yuque.com/iosalliance…
如果你想招人,點這裡:www.yuque.com/iosalliance…
當然,也歡迎你關注我們每一期的週報,我們會在每期週報底部及時更新編輯內推崗位。
關注我們
我們開通了公眾號,每期釋出時公眾號(OldDriverWeekly)會推送訊息,歡迎關注。
同時也支援了 RSS 訂閱:github.com/SwiftOldDri… 。
說明
? 表示需翻牆,? 表示編輯推薦
預計閱讀時間:? 很快就能讀完(1 - 10 mins);? 中等 (10 - 20 mins);? 慢(20+ mins)