老司機 iOS 週報 #11

老司機iOS週報發表於2018-03-19

老司機 iOS 週報第十期在 GitHub 上的 Star 數超過了 1000,得到大家的認可也堅定了我們把週報繼續做下去的決心。

歡迎江湖人稱吳彥祖的 @葉孤城 加入我們的編輯團隊。

這期開始我們在每篇文章的開頭會用一個動物表示預計閱讀時長:

  • ? 很快就能讀完(1 - 10 mins)
  • ? 中等(10 - 20 mins)
  • ? 慢(20+ mins)

新聞

WWDC 2018 時間確定

Apple 宣佈 WWDC 2018 將於 6 月 4 日至 8 日在聖荷西舉行,現已開放註冊(註冊截至時間是 3 月 22 日),屆時將以抽籤方式確定資格。

另外,Apple 還有 Scholarships 計劃為優秀在校學生提供免費門票,這有一篇 WWDC 2017 Scholarships 獲得者寫的 WWDC18 獎學金指北

文章

? iOS Weekly 的作者整理了一份他的 iOS 部落格訂閱

最近 iOS Weekly 的作者整理了一份他的 iOS 部落格訂閱,小編全部匯入了之後,在列表裡看到了最新很活躍的 Swift by Sundell,老牌大佬 Ole Begemann...,感興趣的同學可以直接下載 OPML 檔案然後直接匯入到 RSS 閱讀器裡。

? Solving a Mysterious Heap Corruption Crash

這是一個悲劇的故事,該作者業務中遇到了一個詭異的記憶體問題引起的 crash,百般追查,歷盡千辛萬苦,懷疑過是複雜 AR 業務程式碼所致,也懷疑過是 C/C++ low level 程式碼記憶體控制不當所致。然後開始瘋狂的一步步移除業務中所有的三方庫,依然 Crash,移除了重業務程式碼,依然 Crash,最後終於確定是 Xcode 的 bug,提交 bug 後被 Xcode 新版本修復,雖然是一個悲劇的故事,但整個過程從發現 bug 到解決 bug 再到細挖為什麼的過程,值得借鑑。

?? AppDelegate 瘦身指南

什麼程式碼都往 AppDelegate 裡放是業內常見的問題。作者整理了 AppDelegate 的程式碼解耦方式:

  • FRDModuleManager:模組管理者統一管理子模組;
  • JSDecoupledAppDelegate:自定義 AppDelegate 類,將 App 生命週期拆分成幾個不同的代理進行解耦,而不是像原生的 AppDelegate 所有代理都在同一個類裡;
  • AppDelegate 分類( Category ):這個方案比較常見了,就是按照職能把程式碼分到不同的 Category 檔案中;
  • JLRoutes、MGJRouter:也是模組化後模組管理者管理的策略,只是結合了路由系統註冊方式和第一種略有不同;
  • Objection:利用輕量級的依賴注入框架解決。不過這個方式不太主流,而且並沒有真正解決 AppDelegate 設計上的問題。

? Getting Started with Flutter

這是很標準的一篇 Getting Started With XX ,分別從簡單介紹,配置環境,helloworld,熱過載除錯,元件複用,網路請求,Table 介面,圖片與網路,使用主題,這幾個方面一一帶你體驗了一把 Flutter,Talk is cheap,程式碼操練起來,親自感受一下。

編輯覺得這是又一個巨型輪子,看看學學用用,業務中是否下決心大規模使用需要筒子們做好對比和衡量吧。

? iOS 微信特殊字元保護方案

相信大家對之前 iOS 裝置碰到特殊字元導致崩潰的問題記憶猶新,後來微信團隊對特殊字元做了保護。

由於無法事先知道字串裡包含特殊字元,所以只能先讓它排版/繪製,看看是否出現問題。做法是,在排版/繪製字串前,先設定標記位,排版/繪製結束後,移除標記位;一旦發現標記位存在,就意味著這字串可能有問題,下次就不顯示這個字串。

? 機器學習與移動端會碰出怎樣的火花?

自從 CoreML 隨著 iOS11 釋出之後,機器學習在移動端的應用就越來越被重視。知乎上也對其進行了熱議,其中 『網友微調』圍繞著『移動裝置適合做機器學習的原因』、『移動端機器學習的具體應用』和 『機器學習在移動端的特點』三方面和大家分享了自己的看法,很有見地。

? 給 NSBundle 新增一個 current 方法

NSBundle 是我們開發中的常見類,但蘋果並沒有提供直接通過 [NSBundle current] 方便地獲得當前的 bundle 的 API。於是該文作者與其朋友開了個腦洞,通過 backtrace() 來獲取呼叫者的函式指標,進而再使用 dladdr() 來得到該函式所在的庫路徑,最後通過這個路徑去 allBundlesallFrameworks 中匹配,來實現了 [NSBundle current] 方法。

? 不同角度看問題 - 從 Codable 到 Swift 超程式設計

喵神新文,圍繞“將一個型別轉換為字典”這個問題,向讀者介紹了三種解決思路和實現細節:Codable、Mirror 以及程式碼生成。而更為重要的點在於喵神想傳遞的思想:如何利用“超程式設計”的思維來解決專案中碰到的重複體力勞動問題。(PS:喵神最近開通了小專欄,非常值得關注!)

? 快速用上 Swift 靜態庫

文章記錄了作者在 Swift 靜態庫上使用的一些實踐。作者使用了一個比較 trick 的技巧,通過在 Podfile 中新增自定義指令碼的方式,快速為每個第三方庫新增 static_framework 支援。不過因為是實踐型別的,如果要引入到自己的專案中,可能還會有一些坑需要自己處理。

? Using Swift Server API 0.1.0

這是一個 Swift Http API 的使用介紹,總共有三篇文章,對於 Swift 服務端開發感興趣的朋友可以看一看:

  1. Raw API:Swift Http 原始 API 的使用介紹
  2. µExpress:用了 350 行程式碼,在原始 API 的基礎上構建了一個類似於 Express.js 的網路框架
  3. Swift Nio:使用最新的 Swift-Nio 處理網路請求

? ? Best iOS Development Tips and Tricks

本文介紹了 Xcode 使用中的一些實用技巧,五分鐘的閱讀即可讓我們掌握一些大幅提升工作效率的 Xcode 配置方法,值得一看(文中視訊源為 YouTube,請注意科學上網)。

? 蘋果ResearchKit中的圖表控制元件

ResearchKit中提供了五種預設的圖表UI控制元件,包含常見的餅圖(pie chart), 單線圖(line chart) ,多線圖(multi lines graph), 和散點圖(discreate graph), 多散點圖(mutl discrate graph)。使用方法也很簡單,和tableView很相似,只需要設定好每種圖表的DataSource即可。但是,關於餅圖線框圖之類的的第三方框架實在太多。我對這些控制元件的使用頻次存疑。

設計

? Great UI Animations tips

主要分析了幾種常見Transition animation的設計方法。可以瞭解很多Transition的設計思路和意圖。比如不同state需要展示同一種內容的情況下應該如何設計轉場等。配合大量gif的解釋說明,非常值得一看。

? ? Designing a better notification experience for iOS

從設計角度分析 Apple 應該如何優化 iOS 目前的通知系統,通過“分組”和“暫時靜音”兩種方式來過濾噪音,讓使用者快速、輕鬆地理解資訊。

工具

Sophie

Sophie 是一款 Carthage 圖形化介面管理工具,目前功能還比較簡陋,但是基本的管理功能都已經有了。對於圖形介面愛好者是一款非常不錯的工具軟體。

程式碼

Open-Source iOS Apps

開源的 iOSwatchOStvOS App 列表,目前收集了超過 700 個專案,GitHub Stars 超過 16000 次,值得參考。

ZIKCellularAuthorization

iOS 10 上國行裝置首次安裝 App 在獲取網路許可權時會有不彈授權 Alert 的 bug,這一系統 bug 讓眾多開發者無可奈何。這個開源作者通過一系列的排查調研,最後使用私有 API 來解決了這一難題,整個解決方案和思路都很值得學習。

另外由於目前 iOS 11 的覆蓋率已經接近 70%,且該問題僅在 iOS 10-10.3.1 中出現,編輯建議要慎重考慮是否將該方案運用到線上應用。

本期編輯

@沒故事的卓同學@四娘@mmoaay@享耳先森@EyreFree@Damonwong@折騰範兒_味精@張嘉夫@AidenRao@Parsifal@葉孤城

說明

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

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

相關文章