老司機 iOS 週報 #111 | 2020-04-27

老司機iOS週報發表於2020-04-27

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

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

新聞

? Apple 正在網頁版的 iWork 裡嘗試使用 ObjC + WebAssembly 實現部分功能

@looping:蘋果開發人員在其 Twitter 上透露,最近上線的網頁版 iWork 10.0 裡,部分功能是從原生 App 的 C++ / ObjC 程式碼改為使用 WebAssembly 編譯後用到網頁上的。雖然目前並沒有找到更多資料,但也是可以感覺出蘋果在跨平臺開發上的一些新的嘗試和相關思路。

新手推薦

? Flutter 技能篇: debug 看程式啟動 | 開發者說·DTalk

@邦Ben:本文適合剛接觸 AndroidStudio 的 flutter 新手來看,詳細說明了 debug 除錯的一些基礎功能,以一個簡單的報錯例子一路演示,自行跟著操作一遍,也可以順便了解一下渲染流程。如果你使用 vscode 的話,也可以類比一下,都差不多。

flutter 渲染流程參考文章: Flutter渲染機制—UI執行緒

文章

? 如何斷點到函式的return

在開發斷點除錯中,假如有這樣一個場景:有一個很長的函式,裡面有很多個 return ,而我們想快速斷點到執行的是哪一個 return ,這時候怎麼做比較好呢?單步執行或 return 處挨個斷點?這兩個方法雖然可以生效,但是卻有些麻煩。本文介紹了更方便的方法,通過 LLDB 去快速定位,對我們日常開發而言,是一個很實用的小技巧。

? Testing push notifications on the iOS simulator

@張嘉夫:如果能夠在 iOS 模擬器中測試推送通知,會讓遠端推送功能的開發更加容易,通常需要迭代許多次才能驗證實現的功能是否達到預期。在 Xcode 11.4 之前,我們只能用 NWPusher 等第三方應用和真實的裝置才能測試 Rich Notifications 等功能,雖然效果也不錯,但迭代速度還是不如使用 iOS 模擬器。從 Xcode 11.4 開始,我們只要使用一條新增加的 simctl 命令就能在模擬器中測試推送通知,這篇文章會為你介紹實現的具體細節,包括使用三種不同的方式來觸發遠端推送通知。

? Optionals in Swift Objective-C Interoperability

@J_Knight_:本文介紹了在 Objective-C 定義的 nonnull 屬性(物件),在做 Swift 橋接後的使用上會產生的問題。作者舉了 NSCalendar 和 NSArray 等例子並結合了 _unconditionallyBridgeFromObjectiveC 的方法的原始碼進行了講解。有類似做法的讀者可以閱讀本文來檢驗一下自己在使用上是否會出現問題。

? SE-0281: @main: Type-Based Program Entry Points

@四娘:在 ArgumentParser 釋出了之後,大家也想要類似於 @UIApplicationMain 這樣的註解去宣告入口函式,並且 windows 平臺支援多種入口函式型別,此時 main.swift 就無法很好地滿足使用。

SE-0281 就是為了解決這些問題而出現的,提案的內容也非常簡單,可以使用 @main 註解宣告入口函式:

@main 
struct MyProgram: ApplicationRoot {
    static func main() { ... }
}
複製程式碼

這個提案已經通過並且完成了實現,預計將會在 Swift 5.3 裡釋出。

? 複雜業務如何保證Flutter的高效能高流暢度?

@CrazyCoderShi:高效能高流暢度一直是 Flutter 團隊宣傳的一大亮點, 但是隨著業務的複雜度持續上升,那麼有一個矛盾的問題出現了:這類頁面的效能可能還不如 Native 的表現!這是為什麼?是我們的姿勢不對?本文由鹹魚團隊,他們也遇到了同樣的困惑,並抽絲剝繭,從原理層面帶你逐步定位並解決這類問題。

? Xcode Build Time Optimization

@JimQ:本“Xcode 優化構建時間”系列分為上下兩篇,上篇講指標衡量,下篇講優化措施。

  • 指標衡量:
    • 衡量什麼
      • 乾淨構建的時間
      • 增量構建的時間
    • 衡量構建時間
      • Xcode 構建報告
      • Xcode 構建報告摘要
      • 型別檢查警告,為耗時超過指定檢查時間的任何函式或表示式生成警告
      • 編譯器診斷選項,編輯器內建了多種診斷選項,可用於分析構建
      • 測量 Targets 的構建時間,使用 xcode-build-times 命令工具來了解要構建或可以並行構建的 Targets
      • 使用 XCLogParser 彙總指標,它是 Xcode 生成的 xcactivitylog 的日誌解析器,可提供有關專案中每個模組和檔案的構建時間、警告、錯誤和單元測試結果的大量見解,且可以 HTML 的形式視覺化輸出
    • 自動化
  • 優化措施:
    • 構建設定優化
    • 原始碼改進
      • 查詢編譯緩慢的程式碼,可使用工具 Build Time Analyzer
      • 減少重建工作
        • 在單獨的檔案中定義實體
        • 正確使用訪問修飾符
      • 刪除未使用的程式碼
      • 預構建依賴,使用預構建的動態框架和庫來提高構建效率
      • 程式碼 vs Xibs/Storyboards,構建時間的差異並不明顯
    • 專案增強
      • 改善執行指令碼階段
      • 採用模組化架構,以並行構建 Targets
      • 第三方構建系統

? Cross-Pollination

@AidenRao:有很多好想法,從被批評到整合進蘋果產品中,如:

  • Windows 上的應用程式切換 ⌥ ⇥(macOS 上 ⌘ ⇥)
  • Android 的黑暗模式(已在 iOS 13 中新增)
  • Java 和其他語言的泛型(Swift 的核心功能, 後來新增到 Objective-C)
  • JSX 風格的 dsl 宣告性 UI(SwiftUI 中的函式構建器)

但在蘋果公司這麼做之前,為什麼我們認為這些好主意是異端的?如果你將競爭技術的存在,視為善惡鬥爭,自豪的去宣佈”Pure Swift”或“100% 無 JavaScript”時,如果不是通過一系列的權衡來評估出的解決方案,那只是一種效忠,這種效忠,並不能讓你很好的完成所有的工作。

工具

Debugging superpowers with FLEX

@享耳先森:FLEX 是 Flipboard 團隊出品的 App 除錯工具,在開發過程中整合 FLEX 可以監控網路請求、檢視 UI 樹、檢視沙盒檔案等,注意:FLEX 不能包含在 Release 環境中,否則稽核可能被拒。

ResilientDecoding

@極速男孩:ResilientDecoding 是一個彈性的解碼工具,他可以對可選,陣列,字典或者符合本寶所提供的 ResilientRawRepresentable 協議的自定義型別型別進行解碼。

啄木鳥 iOS 開發工具

@紅紙:啄木鳥 iOS 開發工具是來自於優酷團隊的 APP 內 Debug 工具集合,其包含了常見的 UI 檢查、JSON 抓包、CPU 佔用、Crash 監聽等 17 項功能。能夠不依賴電腦聯調,直接獲取執行時資料快速定位 Bug,提升開發效率。與其他開發工具不同,其多了方法監聽跟 po 命令,執行期間能呼叫任意方法。

XcodeColorSense2

@水水:一個能在 Xcode 中直接預覽16進位制顏色值效果的 Xcode 外掛。無需找其他方式查驗顏色是否正確啦!安裝和使用方式都很簡單,有需要的讀者可以試試哦~

X-SwiftFormat

@EyreFree:Swift 程式碼格式化工具,可整合到到 Xcode 中使用,滿足大部分常見的程式碼格式化需求,可通過 GUI 配置中心管理格式化規則,當然也可以直接編輯 .swift-format。可通過配置快捷鍵快速啟用,很方便,值得一試。

Flr:一個出色的Flutter資源管理工具

@老驢:Flr,讀作 Flutter-R,是一個由網易嚴選智造團隊研發的,用於管理 Flutter 資源的開發工具。Flr 可以幫助 Flutter 開發者在修改專案資源後,自動為資源新增宣告到 pubspec.yaml 以及生成 r.g.dart 檔案。Flr 還提供了三種不同的工具來滿足各種需求,包括了 Android studio plugin, CLI 和 VSCode extension。有興趣的同學可以看看,鑑於最近 Flutter 大火,即便不用學習一下原始碼也是不錯的。

推薦人:YorkFish

程式碼

? Lasso - iOS architectural pattern and framework

@zvving:遵循 redux 思想的 iOS 架構實現。用 Screen 實現最小 redux 模組,通過 Flow 組合配置 Screens。整體實現簡潔清晰,程式碼質量很高,是不錯的架構學習資源,應用於實際專案可能過於理想化。

內推

杭州 - 阿里巴巴淘系技術基礎平臺:高階無線工程師(P6)/ 無線專家 (P7)

  • iOS架構、底層方向
  • iPad、新特性方向
  • 業務開發和架構方向(iOS/Adnroid)

感興趣的歡迎加微信瞭解具體要求。VX: damonwong2。也可以直接傳送簡歷到 coderonevv@gmail.com

老司機推薦

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

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

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

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

關注我們

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

老司機 iOS 週報 #111 | 2020-04-27

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

說明

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

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

相關文章