老司機 iOS 週報 #70 | 2019-06-03

老司機iOS週報發表於2019-06-03

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

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

新聞

? 『SwiftOldDriver 精選』調價至 1 元

『SwiftOldDriver 精選』是週報編輯去年做的一個付費專欄,內容是編輯們自己的原創或譯文,總共 20 餘篇。現在正式以一元價格開放,保留一元售價而不完全免費只是為了減少無腦訂閱導致的一系列麻煩事兒~望諒解。

iPhone 蜂窩網路下載限制提升到 200M

@JimQ:iPhone 蜂窩網路下載限制從 150M 提升到了 200M,上次調整還是在 2017 年 9 月 從 100M 提升到 150M。值得一提的是,並非應用主頁上顯示超過 200M 就不能使用蜂窩網路下載了,只要經 App Store 壓縮瘦身之後的應用大小不超過 200M 這個閾值都是可以下載的。

文章

? ? 開啟 Cocoapods 新選項,加快專案索引速度

@紅紙:來自編輯部@四娘關於 Cocoapods 1.7.0 的踩坑作品。其主要內容如下:

  1. 生成多個 Xcodeproj,在 Podfile 檔案中可以加入 generate_multiple_pod_projects 選項,開啟時,生成多個 Project 巢狀在 Pods 這個頂級 Project中,未開啟的狀態為一個 Project 對應多 Target。據@四娘考察這種方式所有的 Item 都會按照類別存放到各自的 section 裡,最終在專案的結構樹裡會以引用的形式呈現,從而加快了索引速度。
  2. 在 Podfile 中 install! 函式只能呼叫一次,其函式是一個配置函式,僅保留最後一次的配置結果
  3. Swift 版本控制和生成多個 Xcodeproj 會有衝突,因為生成多個後,專案結構會發生改變 post_install 函式中 installer.pod_target 就沒辦法獲取所有 pods 引入的 Target
  4. 在使用 Pod 時,我們可以去利用 pry 去除錯 Pod 程式,簡單易懂(如果想更好的去除錯的話,建議直接呼叫 Pod::Command.run(%w(#{你要除錯的命令,eg install})),可以一步步去斷點除錯到每一個函式的執行。)

? ? Preparing a code base for WWDC

WWDC 馬上就要到了,顯然我們目前還並不知道會蘋果具體會發布什麼,但根據以往的經驗,肯定會帶來一些新的技術點,以及廢棄一些老的 API 等等。所以我們依然可以提前為即將到來的 WWDC 做一些準備,如:

  • 去除一些老的 Warnings,它們可能存在很久了。
  • 讓我們的工程結構更加的解耦,以避免像之前蘋果廢棄 UIWebView 時候替換 WKWebView 所帶來的巨大的工作量。
  • 適當做一些單元測試和 UI 測試,這樣能讓我們更加從容面對新的 API 或者程式碼更改。
  • 大的專案基本都會或多或少有一些三方庫在裡面,所以在 WWDC 之前,可以做一些依賴項檢查,瞭解它們內部工作的原理,這樣在新版本升級時候遇到問題我們可以更好的去處理。
  • 使用一些最新的 API ,相信很多同學已經聽說過今年可能會推出 Dark 模式,所以使用官方最新的 API 是減少以後適配成本的最好方式。

? 騰訊新聞前端團隊:Flutter Web 初體驗

@CrazyCoderShi:flutter_web 釋出有一段時間了,業內對其褒貶不一,但不管如何 Google 在持續的推動,在 flutter 1.5.4 以後的版本已經做到 Write once,Run everywhere , 同一份 flutter 程式碼可以在不做任何修改和適配的情況下同時執行在 iOS,Android,Web,Desktop。所以不管從哪個角度看,flutter_web 都是一門值得探索的技術。

本文由騰訊新聞前端團隊推出,可以說是手摸手教你從零開始使用 flutter 來開發 web 前端應用。

? Ordered Collection Diffing

@anotheren:SE-0240 為 Collection 帶來了新的一個新的方法 difference(from:)。就如同方法名本身,這個方法能夠高效地處理集合之間的差異。本文以 UITableView 的資料更新為例,簡明展示了這個新 API 的使用方法。目前這個提案的狀態已經更新為 Implemented (Swift 5.1),相信本週的新 Xcode 就能使用了,不要忘了試一試。

? ? Migrating to Codable from a third party parsing library

極速男孩007:在 Swift4 中,蘋果引入了 Codable 協議。本文以 Argo 為例子,介紹瞭如何從第三方 JSON 解析庫遷移到 Codable 協議中。本文主要通過實現 init(from decoder: Decoder) 和 decode(_ json: JSON) 這兩個協議,並且讓 JSON 物件遵循這個協議,使得物件即可以通過 Argo 也可以通過 Codable 去解析。

? Understanding Compilers – featuring Swift!

@蓮叔:本文以 Swift 為例,科普了編譯器和直譯器的區別以及編譯器的主要組成部分,文中比較有價值的觀點就是對於 Swift 這樣一門比較新、語法也相對複雜的語音,對編譯過程有所瞭解的確是可以對日常開發也有幫助。建議如果不瞭解相關知識的同學們可以看看,不過近些年編譯器相關的文章並不少,橫向比較下來看本文並沒什麼新東西,大佬可以略過。

? Refactoring iOS app with Coordinator Pattern for Navigation

@老驢: 這篇文章的作者從一個實際專案出發,介紹瞭如何使用 Coordinator Pattern 來對專案中的 View Controller 進行解耦,有興趣的話也可以自己動手試一試。

前兩年的有一段時間,這類庫和這類設計思路盛行過一段時間,後來都逐漸沒有了聲音。倒不是這類庫不好,而是在實際應用過程中,設計中的過度解耦會給專案編寫帶來不必要的麻煩,所以在應用過程中應該結合自己專案的情況進行考慮。解耦但不要過度解耦,才是應用的正確之道。

? 技術清談【008期】【代號:超人】

@小T:這是著名 iOS 程式設計師 ChenYilong 整理的技術清談話題,稍微看了一下 issue 列表,基本都屬於要對底層實現或者 Swift 原始碼實現比較瞭解的話題。如果功利來說,屬於面試不會問,工作中也很難遇到的場景,當然如果你是 sunny 組內的同學或者專業做 iOS 底層技術研究的同學除外。總體而言,issue 裡面的問題都值得推敲一下,對於提升 iOS 技術都有很大的幫助。很多時候,解決方案不一定就是目標,可能在尋找解決方案的路上就已經學到了很多。

? 深入瞭解 Swift 中的初始化(Initialization)

@四娘:型別安全是 Swift 的一大特點,其中一個表現就是初始化的確定性,只要一個例項完成了初始化過程,它的屬性就必然初始化完成,不會處在不確定的狀態。

這篇文章的作者總結了自己對於初始化過程的瞭解,加上一些更加接地氣的例子和練習,如果有同學對於這一部分知識還比較模糊的話,推薦一看。

工具

Stride - 跨平臺的 Swift IDE

@含笑飲砒霜:Stride 是 Swift 開發的跨平臺 IDE, 它是自託管的,您可以編輯、構建和執行。目前僅支援 macOS 和 Linux,但在目前的替代品有限的狀態下,它是有用且可用的。儘管目前依然處於早期階段,還有很多除錯尚未實現,但如果您很感興趣,可以在Twitter上關注作者,以獲得 Stride 的進度更新,或者您也可以參與其中,貢獻自己的一份力量。

launchaco

@張嘉夫:為創業專案快速生成產品宣傳網站,包括快速構建自適應網站、利用 AI 設計圖示、域名查詢及註冊的線上工具。

程式碼

? XCTAssertAutolayout

@jimq:通過封裝 XCTAssertAutolayout 斷言為 autolayout 提供測試用例,僅支援 Swift。 原理是 hook UIViewAlertForUnsatisfiableConstraints 獲取有歧義的約束,以此作為斷言失敗的依據。有 UI 測試需求的朋友推薦試用。

內推

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

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

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

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

關注我們

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

老司機 iOS 週報 #70 | 2019-06-03

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

說明

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

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

相關文章