老司機 iOS 週報 #104 | 2020-03-09

老司機iOS週報發表於2020-03-09

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

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

新聞

近期 iOS 開發者需要關注的官方新聞

@looping:主要內容如下:

  • 目前 iOS 13 覆蓋率已經達到 77%
  • 從 4 月 30 日起,所有提交到 App Store 的 iPhone 應用都必須使用 iOS 13 SDK(Xcode 11) 打包,也就是說要完成 iOS 13 適配
  • 再次強調了從 4 月 30 日起,所有提交到 App Store 的應用都必須使用 storyboard 作為 launch screen,並要求 iPhone 應用要適配所有的 iPhone 螢幕尺寸
  • 另外,稽核條款也有更新(Updated App Store Review Guidelines Now Available),可瀏覽知識小集團隊整理的變更內容:劃重點:《App Store 稽核指南》更新條目一覽

文章

? ? Project LightSpeed: Rewriting the Messenger codebase for a faster, smaller, and simpler messaging app

@zvving:Facebook 新版 iOS Messager 為了達成『更快、更小、更簡單』的目標,進行了一項罕見的工作:重構架構並重寫所有程式碼。

  • 重寫效果:保留大多數功能,啟動快一倍,大小為之前四分之一,程式碼從 170w 行降低到 36w 行
  • 追求架構全域性最優的四原則:
    • 優先使用系統實現,少部分跨平臺邏輯擴充套件 C 實現
    • 合併重用 UI 邏輯
    • 基於 SQLite 打造通用平臺 MSYS:驅動 UI 業務,自動化測試 100% 覆蓋
    • 統一客戶端與服務端互動&同步機制
  • 面對未來的程式碼增長,為每個功能設定複雜度預算,長期評估質量

架構的抉擇來自於 FB 工程師對如何用最新技術打造 IM 專案的整體思考:使用最新系統實現,追求複用,針對 IM 打造 DB 驅動核心,保持簡單。讀起來頗有『重劍無鋒,大巧不工』的味道。

順帶一提:這是一次 native to native 的重寫,和 RN 沒有直接關係。

? ? 系列文章 - Swift Intermediate Language 初探

第二篇 - 真實案例引發的 iOS 底層實現窺探

@享耳先森:Swift 是構建在 LLVM 上,使用 LLVM 中間表示(IR) 和 LLVM 不同後端生成機器語言。除此之外,Swift 編譯器在生成 IR 之前,還設計了一門新的高階中間語言 Swift Intermediate Language,簡稱 SIL,SIL 會對 Swift 進行高階別的語意分析和優化。

當你遇到一些無法理解的表面現象,沒有辦法通過文件或者前人經驗解讀問題的實質,想要嘗試探究程式語言背後的實現細節,那麼就需要跨越語言本身的瞭解,向下去專研編譯器的實現細節。系列文章使用專案中實際遇到的一個真實案例,從一個具體的 UITableView 實現的例子引出,試圖通過 SIL 這個中間語言,探究 Swift 背後的一些實現細節,幫助我們理解一些問題。

推薦人:@kingnight

? Flutter +MLKit = ❤

@J_Knight_:本文分享了一個 Flutter 與 MLKit 結合起來的 Demo:給名片拍照後提取其中的郵件地址。具體從下面三個步驟來展開:

  1. 照相(使用 Flutter 的 camera package)
  2. 使用 MLKit 提取照片中的文字(使用 textRecognizer 例項來提取出圖片中的文字)
  3. 尋找文字中的郵件地址(使用正規表示式)

而且在每一步驟作者都提供了相關程式碼,並在文章中提供了 Demo 地址:Business-Card-Mail-Extractor

? ? dna --- 一個 dart 到 native 的超級通道

@老驢:Flutter 最近是越來越火了,有越來越多的大廠開始進行嘗試。

dna 就是餓了麼團隊針對 Flutter 使用中的痛點:原生能力的呼叫,做的一個 channel 型別的框架。本文中也敘述了在 Android 和 iOS 下的實現的一些具體細節,有興趣的同學也可以學習參考一波。

? My experience replacing CocoaPods with SwiftPM

@anotheren:Xcode 11 中已經自帶整合了 Swift Package Manager,隨著越來越多第三方庫的支援,切換到 SPM 已經逐漸成為可能。本文介紹了當前切換到 SPM 存在的優勢與不足,現在主要影響的問題還有:

  1. 不支援 Objective-C 和 Swift 的混合使用
  2. 不支援資原始檔

? 深入剖析 WebKit

@kyo:雖然蘋果從 iOS 8 開始就引入了 WKWebView,但在過去很長一段時間裡是允許 UIWebview 和 WKWebView 共存的。蘋果從 iOS 13 開始將 UIWebview 列為 Deprecated API,意味著開發者講不得不升級至 WKWebView。而 WKWebView 和 UIWebView 是完全不同的。如果想要更好的瞭解 WKWebView,那麼就有必要深入瞭解一下 WebKit。本文是 @戴銘 老師關於 WebKit 的一篇文章,對於升級至 WKWebView 遇到的一些問題,或者想更深入瞭解 WebKit ,這裡可能就有你想要的答案。

推薦人:@sigsegv

? iPhone可以執行Android了

@EyreFree:Project Sandcastle(沙堡計劃,專案地址:projectsandcastle.org/),目前支援在 iPhone7 / 7 Plus 裝置上執行 Android,本文記錄了作者完整的嘗試過程,有興趣的朋友可以看一下。

工具

MultipeerKit

@含笑飲砒霜:MultipeerKit 是一個 Swift 軟體包,它允許 iOS、macOS 和 tvOS 裝置通過 Wi-Fi 網路,點對點 Wi-Fi 和藍芽在它們之間交換資料。可以通過檢視 Public API 資料夾中的 Swift 檔案,瞭解使用 MultipeerKit 的更多資訊。

Xcode Build Settings

@AidenRao:Build Settings 有數百種配置,這個網站整理了每一個配置的含義,可以隨時用來查詢。結合 MatttXcode Build Configuration Files,瞭解使用 xcconfig 來管理 APP 的 Build Settings。

內推

老司機週報團隊聯合知識小集和 SwiftGG 翻譯組收錄了一份靠譜的內推職位。

如果你想找工作,點這裡:www.yuque.com/iosalliance…

如果你想招人,點這裡:www.yuque.com/iosalliance…

當然,也歡迎你關注我們每一期的週報,我們會在每期週報底部及時更新編輯內推崗位。

關注我們

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

老司機 iOS 週報 #104 | 2020-03-09

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

說明

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

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

相關文章