老司機 iOS 週報 #14 | 2018-04-09

老司機iOS週報發表於2018-04-09

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

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

老司機 iOS 週報 #14 | 2018-04-09

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

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

老司機精選專欄

我們在小專欄上開通了一個收費專欄:SwiftOldDriver 精選專欄的收入會用於週報編輯部日常運營。平均每週專欄會更新一篇文章,持續更新至 18 年底。現在訂閱的優惠價格為 49 元,下週價格會恢復為 59 元。如果願意支援我們歡迎訂閱,相信內容也不會讓你失望。

專欄的第一篇文章 《[譯] iOS Continuous Delivery 除了 Fastlane 我們還有另外五種選擇》

新聞

允許使用者管理儲存在 iCloud 中的資料

為幫助開發者遵守歐盟即將推出的《通用資料保護條例》(GDPR),蘋果提供相應原生 API 和 Web API,支援開發者幫助使用者對 CloudKit 裡的資料進行匯出、限制或者刪除。且當使用者停用其 Apple ID 或者限制其資料時,開發者需要處理 CloudKit API 返回的錯誤資訊。

CocoaPods 1.5 支援 Swift 靜態庫了

CocoaPods 這周更新到了 1.5,主要是加強了對於 Swift 靜態庫的支援,新增一個選項去自動處理 Module 標頭檔案的搜尋路徑,給 Podfile.lock 增加了更多資訊。正在維護開源庫的同學建議仔細閱讀這篇 Release Note。

文章

? Swift Tip: Capture Lists

通常我們用 [unowned self] 這種方式解決引用迴圈。其實我們也可以通過捕捉列表直接宣告使用的例項,這樣就不會在閉包裡引用到 self:

observation = viewModel.observe(\.navigationTitle, options: [.initial, .new]) { [navigationItem] _, change in
    guard let v = change.newValue else { return }
    navigationItem.title = v
}

複製程式碼

? 追蹤 Objective-C 方法中的 Block 引數物件

本文創新地提出了一種監控回撥 block 是否有被正確執行的解決方案 — BlockTracker。通過將包含 block 引數的函式關聯到特定的 tracker 物件上,就可以監聽到該函式的所有 block 引數被呼叫、被銷燬的時機甚至呼叫的次數。在協助我們 debug 問題的同時還能為我們分析一些黑盒函式提供參考。

值得點讚的是,本文毫不吝嗇的花了很大的篇幅來講其實現原理,對 OC Runtime,OC 與 C 互動等方面有興趣的讀者千萬不可錯過。(建議配合 BlockTracker 的前身:BlockHook 介紹 一起閱讀)。

? iOS 中的 Copying

本文對 iOS 開發中的拷貝做了較詳實的介紹,對淺拷貝與深拷貝的概念進行了解釋,並且對可變物件、不可變物件的 Copy 與 MutableCopy 操作進行了分析,同時也給出瞭如何進行深拷貝與為自定義類新增拷貝操作支援的方法。

? Calling Go code from Swift on iOS and vice versa with Gomobile

本文詳細介紹了作者在 iOS 工程中呼叫 Go 的踩坑過程,主要包括以下內容:

  • 一些常見錯誤或意外狀況,以及針對它們的解決方案;
  • 怎樣在 Swift 中呼叫一個 Go 的建構函式來創造一個 Go 的結構體例項;
  • 怎樣在 Go 中定義一個需要用 Swift 程式碼來進行實現的介面;
  • 將 Swift 實現傳遞給 Go 的建構函式,併發起雙向通訊。

對 Go 在 iOS 端的應用感興趣的同學可以看一下,應該能有不少收穫。

? 在 iOS 中如何正確的實現行間距與行高

NSAttributedString 中的行間距 lineSpacing 並不是設計師和我們通常理解的行間距,要實現和設計稿完全一致的行間距需要結合使用 lineHeight 和 lineSpacing。而如果需要保證 iOS 和各種 Android 裝置上的行間距完全相同,則不應使用 lineSpacing,而應該藉助於 lineHeight 和 baselineOffset 來實現。

? Swift 專案中涉及到 JSONDecoder,網路請求,泛型協議式程式設計的一些記錄和想法

這篇文章很詳細的描述了關於 JSONDecoder 的使用方法及內部實現原理。對於還沒有上手使用 JSONDecoder 的各位來說,是一篇很好的教程。

? iOS 程式設計師效率提升利器之 AppleScript

AppleScript 是蘋果自家的指令碼語言,Peak 利用這款指令碼語言提高了自己工作效率,並分享了他的兩個應用場景——『自動化跟蹤查詢 crash 流程』和『重構 Objective C 程式碼』。

? SnapKit 最佳實踐

四娘寫的 SnapKit 最佳實踐文章。主要分享了幾個 SnapKit 的使用建議,可以讓程式碼更加簡潔和優雅。

? Common iOS development mistakes

文章總結了一些常見的 iOS 開發中會犯的錯誤。涵蓋的面比較廣,涉及到程式設計、開發、除錯和測試等各個階段。同時還指出了幾個提高質量的方向,值得一讀。

? 越獄 iOS 全域性開啟 WebView 遠端除錯

iOS 7 之後,在移動裝置和 mac 端的 Safari 上均開啟開發者功能之後,可以開啟 Mac Safari 的 WebInspector 從而進行 Web 頁面除錯。包括頁面資源,Dom結構,JS除錯,控制檯等等,我們可以用 WebInspector 來觀察除錯自己 App 內部的 H5 頁面執行狀況。但是這個除錯功能只對 Xcode 真機除錯狀態下的 App 和系統瀏覽器 Safari 開啟,無法檢視與除錯別人的 App 中的網頁,藉助這款越獄外掛,我們就可以做到全域性開啟 WebView 的遠端除錯了,文章中還有原始碼連結

工具

MerchantKit

現代 iOS 內購管理框架,極大地簡化了獨立開發者的工作,可以追蹤被購買的專案、檢索購買、管理訂閱到期日期、恢復購買、驗證購買等等。MerchantKit 為具有一系列內購專案的 app 而設計,是為應用增加 pro 版本的絕佳方式,不論是一次性購買還是採取訂閱方式。

程式碼

VisualProgrammingLanguage

這是一個有趣的視覺化程式設計開源庫,只需要動動手指或者 Apple Pencil,即可新建語法節點,連線節點的輸入與輸出,然後生成目的碼。不過它現在只能算一個可行性證明,效率還很低,如果你有興趣,可以幫助作者一起完善。(也許以後它能讓程式設計教學變得更輕鬆簡單,而且有趣。)

本期編輯

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

說明

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

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

相關文章