老司機 iOS 週報 #82 | 2019-09-02

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

老司機 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

@zvvingRxCombine 嘗試讓 Observable 與 Publisher 能相互轉化,用橋接的方式相容 RxSwift 與 Combine。

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)會推送訊息,歡迎關注。

老司機 iOS 週報 #82 | 2019-09-02

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

說明

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

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

相關文章