老司機 iOS 週報 #35 | 2018-09-10

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

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

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

新聞

Swift Server 工作組

Swift Server 工作組現在正式宣佈進入下一個階段,工作組接下來的目標是建立一套健康強壯的生態系統,讓開發者可以更容易找到高質量的庫和工具。其實早在 2016 年這個工作組就已經成立了,當時的目標是建立一套通用的底層 API,供上層的 Swift 服務端框架使用,這就是 Swift-NIO,那麼接下來實際要做些什麼呢?

類似於 Swift 的核心開發團隊,這個工作組會負責提供總體的技術方向和制定標準,圍繞 Swift Server 去構建一系列的服務端生態,工作組的成員包括了來自蘋果,IBM 和 Vapor 的工程師,他們也會積極參與開發,並且希望社群也可以參與到這個過程中,目前工作組已經在論壇裡列了一份草稿去描述未來的工作方向,包括了工具鏈,Database Driver,分散式系統架構等等。

BTW,Swift 官網把 Server Work Group 放到了 Focus Areas 那一欄裡,表現出了對於服務端重視。(同一欄裡的還有 ABI Stability)

10 月 3 號起所有 App 必須在 App Store Connect 裡配置隱私政策連結

10 月 3 日起,所有新的應用和更新的應用程式都必須在 App Store Connect 裡配置隱私政策連結。隱私政策必須清晰且直白的告知使用者,他們的應用會收集什麼資料,以及根據他們的隱私保護協議,這些被收集好的資料會被如何利用,幷確認是否有第三方機構有權接觸到這些資料。

文章

? Early returning functions in Swift

Early Return, 顧名思義,就是早點兒 return 的意思。作者指出當我們做一些分支邏輯的時候,結合 guard 來在不滿足條件的時候直接 return 掉 function,可以使得我們的程式碼更加清晰,以及更易於 debug。不過我個人認為對於類似的邏輯,更合理的邏輯應該是用 do{} while(false), 在不滿足條件的時候直接 break 這樣確保函式有一個單一的 exit point,更有可維護性。除了 Early Return,文章還推薦使用函式來封裝複雜的條件判斷,使程式碼更具可讀性。

總體來說,文章深度一般,但是探討的 case 還是比較有趣的,可以看看。

? TODO FIXME And Compiler Directives

Swift 4.2 中新增了兩個新的編譯器命令,#warning("message")#error("message"),可以讓你的程式碼在編譯的時候,產生警告及錯誤。

? iOS App 連線外設的幾種方式

如果開發的應用功能涉及到和硬體互動,那麼知道 iOS app 連線外設有幾種方式就很重要了。

  • 無線的連線是日常裡非常常見的藍芽、WIFi。
  • 有線分成兩派:
    • MFI:蘋果認證的外設。親兒子 CarPlay 是特供的 NCM。其他外設則是基於 External Accessory Protocol,通過引入 ExternalAccessory.framework 進行通訊。但是 MFI 的申請門檻非常高。
    • 沒什麼卵用的 USB 熱點共享。

spirit-jsb 推薦

? iOS 如何精確還原 UI 稿多行文字間距

大家開發中一定遇到過文字間距如何精確還原的問題,不論是 PhotoShop + 標註工具還是 Sketch 。文章介紹了通過設定 minimumLineHeight maximumLineHeight,然後利用 baselineOffset 修正完美還原多行文字間距。

? Why you’re not supposed to call description

大家在使用 Swift 的時候,一定會經常把一些任意的字串、整型或者物件作為除錯資訊的一部分來輸出到控制檯。可能你注意過 CustomStringConvertible 和 CustomDebugStringConvertible 這兩個協議,還有 String(describing:) 但是卻不太清楚其中有什麼區別。本文作者講解了這幾個型別分別做些什麼,以及為什麼使用時呼叫 String(describing:) 和 String(reflecting:) 是最佳的選擇。

? Practical Dynamic Type

在 iOS 11 之前,如果想根據 iOS 系統字型大小來動態調整字型尺寸,只能觀察 UIContentSizeCategoryDidChange,並在變動發生時手動渲染檢視。但 iOS 11 推出了一些改進,方便 app 針對視弱使用者開發輔助功能,作者在這篇文章裡展示瞭如何實際利用 iOS 11 對 Dynamic Type 的提升,對視弱使用者提供完整的輔助功能,同時還能支援之前的 iOS 版本。

? iOS App 後臺任務的坑

Peak 最近一直在調研和分享 Background Crash 相關的知識,比如 32 期週報中推薦的『iOS App 後臺 Crash 調查』一文。而這篇文章則是他最近這段時間調研結果的總結。文中提到,涉及 Background Task 的 Crash 主要有以下三種型別:

  • 0xdead10cc - 為了保證 Extension 和 Host App 對 DB 操作的資料庫完整性,系統強殺應用;
  • 0xbada5e47 - 發起過多的 Background Task,或者 Background Task 在超時之後會呼叫 expiry handler 超過幾秒鐘,都會被系統強殺;
  • 0x8badf00d - 主執行緒卡死,被系統的 WatchDog 強殺;

另外此類 Crash 第三方的收集框架捕獲不到,所以需要藉助蘋果自帶的 Crash 日誌才能排查。

? 打造高可擴充的 iOS KeyValueStore

本文循序漸進地講解了如何打造一個高可擴充的 iOS KeyValueStore。從最開始一個 Key,一個 Data 的表,逐步講解如何支援儲存後設資料,分組,索引。行文流暢,沒有廢話,值得一看。

? MacOS 的安全和隱私指南

本文翻譯自 drduh 的一篇文章, macOS Security and Privacy Guide。如今使用者電腦的安全及隱私問題越來越被重視起來,無論是公司還是個人。本文對於想要提高個人 Mac 的安全性以及隱私性的人比較有幫助。文章從 Web、 VPN、防火牆、系統服務等很多點詳細討論了 MacOS 的安全和隱私問題,讀完這篇文章,相信對於這方面的很多疑問都可以迎刃而解。

? Swift Knowledge Base updates for Swift 4.2

Swift 4.2 正式版再過幾天就要釋出了,這一次更新雖然只跨了一個小版本,但還是帶來了許多實用的新特性,還沒來得及瞭解的同學推薦看一下這篇文章。

? Hacking Hit Tests

來自 Soroush Khanlou 的一篇文章。文章介紹了 HitTest 這個來自 UIKit 的快被大家遺忘了的方法。

在一些特定情況下,開發者可能會需要 Override HitTest 方法來達到一些特定的目的。作者就遇到了類似的情況。而 Override HitTest 在很多時候能給開發帶來更多的可能。相信大家若是對 HitTest 有更深入的瞭解,也能對 iOS 開發有更深的理解。

? CLI: improved

作為開發人員,一般都離不開命令列工具,本文的作者分享了自己在命令列工具上的一些積累和經驗,幫助大家更好地提升工作效率

  • cat的升級工具
    1. 你可以使用 ccat 來對cat的結果進行顏色分類
    2. 你可以使用 bat 來對cat的結果進行二次檢索和分頁
  • ping的升級工具
    1. 你可以使用 prettyping,這個工具對ping的返回結果做了一層GUI的封裝
  • ctrl+r(回溯過往輸入的命令)的升級工具
    1. 你可以使用 fzf 來更好地進行回溯匹配
  • top的升級工具
    1. 你可以使用 htop 獲得更多的互動命令來顯示系統硬體資訊
  • find的升級工具
    1. 你可以使用 Alfred,這個 app 能夠幫助你更好地檢索檔案
    2. 你可以使用 fd 來獲得更好的檔案檢索功能
  • du的升級工具
    1. 你可以使用 ncdu,這個工具可以跟 iTerm2 更好地結合使用
    2. 你可以使用 nnn,這是一個磁碟空間管理的高效能工具
  • man的升級工具
    1. 你可以使用 tldr 更好地閱讀幫助文件
  • grep的升級工具
    1. 有些時候,grep的對於複雜的過濾規則力不從心,這個時候可以考慮用ack || ag來代替
  • grep et al的升級工具
    1. 你可以使用 jq 來更好地處理 json 轉換的問題
  • 更多更好的工具等待挖掘中
    1. ponysay替代cowsay
    2. csvkit替代awk et al
    3. noti替代display notification
    4. entr替代watch

設計

? Lessons Learned From the RWDevCon 2018 Design Lab

在今年 RWDevCon 2018 大會的 Design Lab 中,兩個資深 UI/UX 設計師解答了 Ray Wenderlich 讀者有關 app 設計的問題,其中包含了很多常見解決方案,具體分為以下四個方面:格式塔理論、原生元件及行為、競品研究和產品文案。閱讀這篇文章可以讓你在建立移動應用時避免犯同樣的錯誤。

Mac 高效開發指南

bestswifter 同學一直非常的重視工作效率,本書從系統配置、Mac 工作流、編輯器之神:Vim、Git 從入門到進階、終極武器 Zsh 等方面去打造一個高效的工作流,致力於提高 Mac 工作效率的實用手冊。不管你是入門新人,還是擼碼老手,都能從書中學習到很多你平時不會注意的,提升工作效率的點。效率上去了,你才能有更多的時間,去對自我進行提升。

音視訊

泊學技術視訊

構建自己的Docker映象 Docker用類似git的方式管理了我們對容器的修改,這也就意味著,我們可以“提交”這些修改,檢視修改的歷史記錄,以及製作新的映象。

使用Dockerfile自動化映象構建 如何自動化映象的定製過程呢?你可以把每一步修改的動作寫在Dockerfile裡,然後執行docker build就好了。

通過Docker執行任意版本的Swift 這段視訊裡,我們基於Swift官方提供的二進位制程式,製作一個可以執行任意版本Swift的映象,有了它,我們就能更方便、安全的實驗各種Swift新特性了。 [視訊連結]

內推

關注我們

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

老司機 iOS 週報 #35 | 2018-09-10

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

本期編輯

@沒故事的卓同學@四娘@享耳先森@Damonwong@折騰範兒_味精@張嘉夫@AidenRao@Parsifal@aaaron7@方秋枋kyotom510230anotheren水水looping@JasonYuh@老老老老老老老驢

說明

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

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

相關文章