老司機 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()
來得到該函式所在的庫路徑,最後通過這個路徑去 allBundles
和 allFrameworks
中匹配,來實現了 [NSBundle current]
方法。
? 不同角度看問題 - 從 Codable 到 Swift 超程式設計
喵神新文,圍繞“將一個型別轉換為字典”這個問題,向讀者介紹了三種解決思路和實現細節:Codable、Mirror 以及程式碼生成。而更為重要的點在於喵神想傳遞的思想:如何利用“超程式設計”的思維來解決專案中碰到的重複體力勞動問題。(PS:喵神最近開通了小專欄,非常值得關注!)
? 快速用上 Swift 靜態庫
文章記錄了作者在 Swift 靜態庫上使用的一些實踐。作者使用了一個比較 trick 的技巧,通過在 Podfile 中新增自定義指令碼的方式,快速為每個第三方庫新增 static_framework 支援。不過因為是實踐型別的,如果要引入到自己的專案中,可能還會有一些坑需要自己處理。
? Using Swift Server API 0.1.0
這是一個 Swift Http API 的使用介紹,總共有三篇文章,對於 Swift 服務端開發感興趣的朋友可以看一看:
- Raw API:Swift Http 原始 API 的使用介紹
- µExpress:用了 350 行程式碼,在原始 API 的基礎上構建了一個類似於 Express.js 的網路框架
- 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
開源的 iOS
、watchOS
和 tvOS
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)