老司機 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 初探
@享耳先森:Swift 是構建在 LLVM 上,使用 LLVM 中間表示(IR) 和 LLVM 不同後端生成機器語言。除此之外,Swift 編譯器在生成 IR 之前,還設計了一門新的高階中間語言 Swift Intermediate Language
,簡稱 SIL
,SIL 會對 Swift 進行高階別的語意分析和優化。
當你遇到一些無法理解的表面現象,沒有辦法通過文件或者前人經驗解讀問題的實質,想要嘗試探究程式語言背後的實現細節,那麼就需要跨越語言本身的瞭解,向下去專研編譯器的實現細節。系列文章使用專案中實際遇到的一個真實案例,從一個具體的 UITableView
實現的例子引出,試圖通過 SIL
這個中間語言,探究 Swift 背後的一些實現細節,幫助我們理解一些問題。
推薦人:@kingnight
? Flutter +MLKit = ❤
@J_Knight_:本文分享了一個 Flutter 與 MLKit 結合起來的 Demo:給名片拍照後提取其中的郵件地址。具體從下面三個步驟來展開:
- 照相(使用 Flutter 的 camera package)
- 使用 MLKit 提取照片中的文字(使用 textRecognizer 例項來提取出圖片中的文字)
- 尋找文字中的郵件地址(使用正規表示式)
而且在每一步驟作者都提供了相關程式碼,並在文章中提供了 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 存在的優勢與不足,現在主要影響的問題還有:
- 不支援 Objective-C 和 Swift 的混合使用
- 不支援資原始檔
? 深入剖析 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 有數百種配置,這個網站整理了每一個配置的含義,可以隨時用來查詢。結合 Mattt 的 Xcode Build Configuration Files,瞭解使用 xcconfig 來管理 APP 的 Build Settings。
內推
老司機週報團隊聯合知識小集和 SwiftGG 翻譯組收錄了一份靠譜的內推職位。
如果你想找工作,點這裡:www.yuque.com/iosalliance…
如果你想招人,點這裡:www.yuque.com/iosalliance…
當然,也歡迎你關注我們每一期的週報,我們會在每期週報底部及時更新編輯內推崗位。
關注我們
我們開通了公眾號,每期釋出時公眾號(OldDriverWeekly)會推送訊息,歡迎關注。
同時也支援了 RSS 訂閱:github.com/SwiftOldDri… 。
說明
? 表示需翻牆,? 表示編輯推薦
預計閱讀時間:? 很快就能讀完(1 - 10 mins);? 中等 (10 - 20 mins);? 慢(20+ mins)