老司機 iOS 週報 #85 | 2019-09-30

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

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

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

通知

明天就國慶長假了,本期也是國慶前的最後一期週報,長假期間週報將暫停一期,節後恢復正常節奏。祝大家長假快樂~

新聞

Swift Release Process

@四娘:Swift 宣佈接下來的 5.2 版本會專注於提升效能。

開源 React Native 元件庫 beeshell 2.0 釋出

@looping:近期美團釋出了 React Native 元件庫 beeshell 2.0,共計開源 38(33 個元件與 5 個工具)個功能。同時本文也對這套元件的系統設計和方案實現進行了詳細的講解,並描述了這套工具在測試和開發除錯上的探索,最後也列出了他們對元件庫開源建設的長期規劃。感興趣的同學可以持續關注下。

新手推薦

iOS 實踐檢查清單

@Parsifal:一份較細緻的 iOS 專案實踐檢查清單,列舉了 iOS 專案從“建立-開發-調優-釋出”不同階段分別需要注意到的一些細節,適合新人入門上手前幾個專案時做自查。

文章

? 將 flutter_web 遷移到 flutter1.9+

@邦Ben:前不久的 Google 大會上公佈了 Flutter 1.9,該版本最大的 feature 就是正式支援 Flutter web,這篇文章簡要的翻譯了一下遷移 Web 到 1.9 版本的方式。按需閱讀即可。

Flutter web 還存在不少問題

  • 已經的效能問題還沒解決
  • 不支援 hot reload
  • 不支援 flutter plugins
  • 不支援 dart:io,只走 http
  • 還不支援 Platform.is

? Flutter 無痕埋點

@CrazyCoderShi:無痕埋點一直是各端都在不斷探索的一個方向, Flutter 由於剛剛誕生不久, 這方面的資料甚少, 作者從 Flutter 原始碼層面探尋到不少解決方案, 不失為一個不錯的參考. 另附上鹹魚技術組的 Flutter 埋點方案作為補充參考:

本文由 楓自飄零 自薦。

? Apple Push Notification Device Tokens

@享耳先森:iOS 13 釋出後,不少推送廠商都通知開發者們升級 SDK,Mattt 特地寫文章介紹此次改動。

APNS DeviceToken 的型別其實是 Data,具體含義和格式是個黑盒,只是 App 拿到 Data 後需要提交給各自的服務端,這就涉及到將 Data 進行格式轉換的問題。

iOS 7 之前 Foundation 沒有 NSData -base64EncodedStringWithOptions 方法,開發者們發現可以使用 NSData description 方法輸出再進行轉換,而 description 其實是一個 Debug 方法,具體實現隨時會改。

? Flutter Face Detection

@老驢:這是一篇比較基礎的用 Flutter 和 Firebase 來實現面部識別的教程。

作者介紹瞭如何使用 Firebase ML Kit 和 Flutter 中 CustomPainter 類相結合,在圖片上直接顯示出面部位置。

總體來說,這算是個不錯的入門教程,有興趣的話不妨看看。

? iOS 13 適配要點總結

@anotheren:iOS 13 正式釋出已經快兩週了,本文總結了各種看得見和看不見的遷移問題,如果你還沒有動手遷移,是時候開始了。例如 Dark Mode / Sign In with Apple 這類改動更是需要聯動產品和設計,需要儘早準備。

? Xcode 11 初體驗

@J_Knight_:本文作者從工作流,編輯器,設計工具,程式碼管理,Debug 工具,效能分析工具,模擬器等方面介紹了 Xcode 11 的更新內容;本文圖文並茂,介紹得比較全面,值得參考。

? SwiftNIO —— Swift 版的 Netty

@xiaofeu86:SwfitNIO 是一款基於事件驅動的跨平臺網路應用程式開發框架,其目標是幫助開發者快速開發出高效能且易於維護的伺服器端和客戶端應用協議。本文是一篇整理性文章,從網路程式設計的幾種併發模型到 Netty 的介紹再到 SwfitNIO,內容比較全面,適合想要了解 SwfitNIO 和併發程式設計的人閱讀。

? Swift Concurrency Manifesto 中文翻譯

@極速男孩:這篇文章旨在來為 Swfit 討論出一種 first-class 的併發模型。這個提案主要提供了 async/await 和 Actor 兩種不同的方法。更多的內容可以參考作者的原文

? ? 一個 delegate 被宣告為強引用又被悄悄地改掉了

@JimQ:本 tip 來自一條 tweet。UIViewController.presentationController.delegate 的 delegate 在 iOS 13 之前的宣告是 strong 的,導致 delegate 的兩端相互強引用無法正常釋放,蘋果在 iOS 13 悄咪咪地改為了 weak,但對於 iOS 12 及之前的版本這個記憶體洩漏問題則會一直存在,有使用 UIPresentationController 的同學留意一下。

? WCCgiMock - 客戶端模擬網路回包工具介紹

@紅紙:CgiMock 工具可以幫助開發者在不侵入程式碼的情況下,構造模擬資料,模擬網路回包。WCCgiMock 實現了兩種工作模式:

  1. 第一種是在 Cgi 請求階段攔截請求,返回預設好的模擬資料給業務層。
  2. 第二種模式是,在請求階段不攔截,等到後臺返回回包後,將模擬資料與後臺回包進行合併,再返回給業務層。

與此同時,此工具具有以下特點:編寫語言跨平臺、內部DSL設計、響應式資料、用例組織能力、熱更新除錯等。遺憾的是 WCCgiMock 暫時還未開源,作者正在籌劃準備當中,盡情期待。

? 一種檢視 Block 中引用的所有外部物件的實現方法

@looping:本文通過分析 Block 內部佈局結構來檢視一個 block 所引用的外部物件,原理如下:

  1. 系統在編譯 block 時會把所有要訪問的外部物件或變數複製到 block 物件例項內部;
  2. 當一個 block 中有引用外部物件或變數時,它的 Block_layout->flags 值中就會有 BLOCK_HAS_EXTENDED_LAYOUT 標誌;
  3. 如果有 BLOCK_HAS_EXTENDED_LAYOUT 標誌,那麼所有引用的外部資料成員的擴充套件描述資訊就能在 block 的 Block_layout->descriptor 中找到;
  4. 其中佈局描述資訊又能在 Block_descriptor->layout 上找到,包括引用物件的指標修飾型別和數量;
  5. 這樣一來,就能通過計算偏移來得到外部物件的地址,並轉化成 OC 物件輸出。

作者在文中不僅對 block 結構進行了解析和說明,同時還給出了完整的程式碼實現和使用方式,是一份很好的學習資料。

? 我開發了一個 SwiftUI 庫,將 CSS 引入 iOS 開發

@Damonwong: 今年 WWDC 推出的 SwiftUI 和以往 iOS 接觸的介面開發方式完全不同,是一套全新的設計。坦率的說,整套設計更接近於目前的 Web 開發。作者也正是看到了這點,對是否能將 CSS 的設計引入到 SwiftUI 中做了一些探索,寫了一些總結。並開源了 SwiftUI-CSS 感興趣的可以瞭解一下。

當然,目前 SwiftUI 還處於極度不穩定的階段,不建議大家盲目跟風學習,學有餘力稍微瞭解一下是不錯的,現階段學習並運用到實際應用中是不切實際的。

音視訊

ggtalk | 從石油到 iOS,聽聽思琦的轉行經歷

@Parsifal:關注我們週報的讀者相信對思琦(@SketchK)都會有印象,因為他是我們目前 Logo 的設計者。這次 GGTalk 思琦和樑大一起聊了他是如何從石油相關專業轉化成功到 iOS 開發的歷程。

樑大:在我認識的人當中,思琦絕對是最厲害的那一批。當然我說的不是天賦,有些人就是天才,你怎麼努力也無法超越。思琦厲害的地方在於思考分析能力和執行力。從有轉行想法開始,收集資訊、瞭解行業、分析不同職位,最終確定 iOS。然後開始轉行,培訓班、自學、開源專案、發文章、準備面試、拿到 offer。入職美團之後,完善知識體系、嘗試不同方向、不斷給自己提出挑戰,每一年都在飛速成長。

內推

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

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

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

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

關注我們

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

老司機 iOS 週報 #85 | 2019-09-30

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

說明

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

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

相關文章