老司機 iOS 週報 #59 | 2019-03-18

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

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

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

熱烈歡迎週報團隊的第 30 個編輯 - @極速男孩

新手推薦

在年前我們做了一次問卷調查,我們很重視這次問卷結果,專門組織了一次集體語音會議對問卷中反饋的問題和建議進行了討論。其中很多讀者希望我們能夠推薦一些對新手更加友好的內容,在接下來的時間裡,我們會嘗試收錄一些對新手入門更友好的文章,也歡迎廣大讀者自薦這部分內容,由於是新手向的,我們對此類文章的深度要求並不高,能通俗易懂地介紹分析某個知識點,利於新手吸收,我們都會考慮收錄。

? Help! My app freezes but no error appears

這是一篇非常有趣的關於 “入門 iOS 併發程式設計” 的文章。作者從一個新手容易碰到的 “介面卡死不響應了” 的問題入手,層層分析了這個問題產生的本質是 - UI 執行緒即主執行緒被耗時任務阻塞導致。如果你是一位以 iOS 為入門的新人開發者,這篇文章將能幫助你第一次認識到 iOS 中為主執行緒減負的重要性,也會為你開啟 iOS 併發程式設計的大門。

編輯寄語:可能這篇文章對新手最不友好的一點是它是一篇純英文的,但作為一名開發者,我覺得一定不能排斥英文。作為 iOS 開發者最好的入門教程是蘋果的開發文件和所有 API 文件,都是純英文的。當然,如果你覺得需要從新手繼續進階,戴銘老師「iOS 開發高手課」將會十分適合你,點我試讀或購買,然後新增微信 AwayZ_T 返還小紅包並邀請進入週報讀者群和大家一起學習,老司機喊你快上車~

新聞

? WWDC 2019

一年一度的蘋果生態開發者盛會又要來了。

WWDC 今年會繼續在聖荷西會議中心進行,時間是 6 月 3 日到 6 月 7 日。

今年的主題是 Write code. Blow minds.。按照目前流出的資訊,今年軟體更新的重頭戲會在 iOS 13 上,iOS 會有一次非常大的 UI 更新。另外硬體方面,今年也很可能會在 WWDC 上釋出模組化的 Mac Pro。

一如既往,WWDC 的門票價格是 1599 美元,票價並沒有包括食宿,機票等的費用。如果你有興趣參加,或者是公司有這個福利的話,需要在 3 月 20 日前去官網註冊,蘋果會在 3 月 21 日公佈抽籤結果。

預祝各位參與抽籤的讀者朋友們好運。

文章

? ? Why using isEmpty is faster than checking count == 0

Swift String 中為什麼使用 isEmpty 會比判斷 count == 0 快?該文作者從 count 的工作原理中進行分析和對比。

  • Swift 字串是複雜的字符集合,單個字元可能是由多個字元進行組合形成,例如 ?+?=??,但是 "??".count == 1。每次檢查一個字元所需要的最長時間為 O(n^2),因此如果計算的 String 很長,則 count 會需要較長的計算時間。
  • isEmpty 的計算則是檢查 String 起始索引等於結束索引則為空,時間為 O(1)

同時作者提醒,在 arrays, sets, dictionaries 沒有這種情況。但是建議使用 isEmpty 去判空,語義更為清晰,並且有利於 String 習慣用上 isEmpty 而不是countSwiftLintSwiftFormat 都有檢查該情況。

? ? Websites using Swift and AWS Lambda — Part 1

本文介紹瞭如何用 Swift 輕鬆、愉快地編寫並部署一個輕量網站。

  1. 使用 Swift + HTML + CSS 編寫網站可以充分利用 Swift 的語言優勢,例如程式碼更安全、更容易理解,寫起來也更有意思。
  2. 使用 Lambda、Layers、API Gateway 以及 Certificate Manager(可選)在 AWS 上免費部署(每個月 100 萬次免費請求)。
  3. 易於部署和更新,只需要更新 AWS Lambda 函式即可!
  4. 網站是動態生成的,也就是說可以在查詢資料庫、呼叫另一個 Lambda 函式並請求 API 之後將網站組合起來。
  5. 不需要管理傳統的、有時會非常麻煩的 JavaScript 依賴。
  6. 示例網站是第一個使用 Swift + AWS Lambda 的網站。

? ? Swift Localhost: Making XCUITest Great Again

關於 UI 自動化測試,特別是對網路請求處理的文章以前有過不少推薦,比如 第 41 期iOS UI Automation Tests at Babylon第 56 期Painless UI Testing in iOS: Mocking the Network 等。

本篇文章對改善 UI 自動化測試的思路是通過搭建本地服務(localhost),再將網路請求重定向到本地的方式來做的。同時這篇文章也是作者在 iOSConfSG 2019 上分享的內容,總結了使用 4 個簡單步驟就能在工程裡搭建基於本地服務的 XCUITest:

  1. 通過 CocoaPods 整合 SwiftLocalhost(作者自己維護的),編寫程式碼配置本地服務
  2. 把程式碼裡的網路請求重定向到本地服務上
  3. 在 Info.plist 裡設定 ATS 配置,允許訪問本地網路
  4. 最後就是編寫測試程式碼,模擬請求響應的資料

這裡有亮點的地方是整合 SwiftLocalhost 後就不需要太操心服務端相關的事情,用例寫完直接 command+u 就可以開始測試了,可以避免像環境配置、網路異常等問題,讓開發者更專注於模擬測試資料,保證測試流程在可控範圍內。

? 如何自建 Crash 平臺

本文介紹瞭如何對非符號化的崩潰進行符號化,並介紹一些工具和指令碼對崩潰報告進行符號化的操作。並實現了自己的 macho 解析工具和 crash 分析平臺:

  1. 通過 dSYM 檔案對崩潰資訊進行分析,從而得到他的具體的堆疊地址和偏移地址。
  2. 分別通過 ATOS , lldb , Dwarfdump 對崩潰報告進行符號化。
  3. 分別用 dwarfdump 和自己實現的 atosl 指令碼,對崩潰進行做符號化。並嘗試去搭建一個自己的 crash 分析平臺。

? Linking Objective-C Code

本文首先簡單介紹了連結器,庫,二進位制檔案,符號,選擇器和編譯器的相關知識作為鋪墊,然後介紹了 Objective-C 程式的連結過程,並且解釋了 -all_load-Objc 以及 -force_load 三種常用連結標誌在連結過程中所起到的的作用。

? 一個在 Objective-C 和 Swift 中實現剖面導向程式設計的故事

蘋果官方並不支援 AOP?非也。看作者帶你走過一段從分析 KVO 原理到設計通用的 AOP 框架的歷程。 全文重在設計過程,用植物嫁接打比方,金句不斷,細讀頗具趣味。

注:剖面導向程式設計 == 面向切面程式設計 == AOP(Aspect Oriented Programming)

? PSPDFKit and Swift

PSPDFKit for iOS 是用 C、C++、Objective-C(++) 開發的大型專案。在這篇文章裡,PSPDFKit 官方親自講述作為 SDK 開發商對於 Swift 的看法,大家都在擁抱 Swift,為何 PSPDFKit ofr iOS 還是堅持使用 Objective-C?在即將正式釋出的 Xcode 10.2 中,Swift 5 將包含穩定的 ABI,PSPDFKit for iOS 是否會遷移到 Swift?作者詳細分析了 Swift only 的優點和缺點,並得出結論:我們很熱愛 Swift,在很多專案裡採用了 Swift 語言,並且不斷為 Swift 編譯器貢獻新功能,但 Swift 並不適合我們的 SDK,在可見的將來裡,我們會繼續堅持使用 Objective-C。

? Why we stopped using fastlane - Life in the slow lane

相信現在很多團隊都在用 Fastlane,推薦本文是期望大家聽到更多的聲音。

本文作者在 2018 年寫了一篇 Fastlane 的使用文章,現在,他來回顧一些 Fastlane 不好的地方:

  • 沒有解決 Xcode 本身的問題
  • Fastlane 本身很龐大,有太多的依賴項
  • Fastlane 自身有許多 Bug
  • 太多人在用以至於 issue 太多,核心問題得不到解決

? HTTPS 溫故知新(一)— 開篇

本文是 halfrost (霜神)HTTPS 系列 學習筆記的第一篇,主要介紹了以下幾方面:

  1. 為什麼需要 HTTPS
    • HTTP 資料沒有加密
    • HTTP 無法驗證通訊對方的身份
    • HTTP 無法防止資料被篡改
  2. HTTPS 帶來的好處
    • 使用 HTTP/2 獲得更高的效能
    • 提高 SEO 排名
    • 更好的推薦資料
    • 更高的安全性
    • 提高網站的信任和信譽
    • HTLM5 新特性 iOS ATS 要求
  3. HTTPS 安全的本質
    • HTTPS 採用混合的加密機制,使用公開金鑰加密用於傳輸對稱金鑰,之後使用對稱金鑰加密進行通訊
    • HTTPS 通過使用 證照 來對通訊方進行認證
    • TLS / SSL 提供報文摘要功能來驗證完整性
  4. HTTPS 中的 TLS / SSL 協議
    • TLS 記錄層協議
    • TLS 密碼切換協議
    • TLS 警告協議
    • TLS 握手協議
    • TLS 應用資料協議

計算機網路基礎是開發者需掌握的知識,但往往會被忽略,瞭解這些計算機基礎知識為我們構建完整的計算機知識體系頗有益處。

? 開發小知識

如作者言,最近一段時間面試中發現很多開發者都只停留在知道、聽說過的層面,卻很少能回答的好是什麼、為什麼。作者一口氣整理了 78 個 iOS 以及計算基礎相關知識點,簡短明瞭直指關鍵(不錯的面試指南?),如果看完覺得 so easy,恭喜你已經脫離了知道會用的初級階段了?。

? 最詳細版本|UI2Code 智慧生成 Flutter 程式碼——版面分析篇

AI 寫程式碼,相信很多同學聽到這個命題都會很感興趣。UI2CODE 專案是閒魚技術團隊研發的一款通過機器視覺理解+AI人工智慧將UI視覺圖片轉化為端側程式碼的工具。本文全面分析了這個專案中 UI 前景提取和背景分析是如何做的。通過影象處理與深度學習相結合,在識別準確度,定位精度上都有了明顯的提升。有興趣的同學可以研究一下。

程式碼

Flare-Swift

Flare 是一款強大的設計和動畫工具,可以讓 app 和遊戲的設計師、開發者輕鬆新增高品質動畫。Flare 的主要功能是讓設計師可以實時、直接操作最終產品中的 assets,從而實現快速迭代、避免重寫程式碼。Flare-Swift 則是 Flare 的 Swift 執行時,可以通過 Export to Engine 來匯出 Flare 檔案。

音視訊

? ggtalk | 聊聊跨平臺:後起之秀 Flutter

Flutter 現在的熱度自然不用多說,國內各個公司都開始了在業務腫的嘗試,包括美團。本週的 ggtalk 邀請到了美團御姐(宇傑)一起深入聊了美團在 Flutter 中的相關實踐,也聊了很多 Flutter 的過去、現在和將來。

內推

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

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

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

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

關注我們

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

老司機 iOS 週報 #59 | 2019-03-18

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

本期編輯

@四娘@享耳先森@Damonwong@折騰範兒_味精@張嘉夫@Parsifal@aaaron7@kyo@tom510230@anotheren@水水@looping@老老老老老老老驢@小非86@邦ben@紅紙@含笑飲砒霜@JimQ@老峰@zvving@J_Knight_@極速男孩

說明

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

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

相關文章