老司機 iOS 週報 #57 | 2019-03-04

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

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

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

老司機週報 LOGO 全面更新!

首先非常感謝 @SketchK 為我們設計的十分貼合『老司機』一詞的重金屬風格 LOGO。幾經波折,我們終於可以對外發布我們的全新 LOGO 了,而且版權已經註冊並完成審批,希望這次不會再翻車!作為 LOGO 的設計者 @SketchK 他對此次設計以及週報有一份自己的理解,以下是他的想法,而我們聰明的讀者會怎麼解讀這個 LOGO/Banner 呢,歡迎留言告訴我們~

@SketchK:在設計之初,問了一些身邊的朋友,老司機在你心裡是什麼樣子的?有的朋友說老司機是那種熟悉道路,開車老練的計程車司機,也有朋友說老司機應該是那種帶大家搬磚致富的卡車司機,當然也有人說老司機就是那種飯桌上帶大家開“車”的司機。但對於我而言,提到老司機或者老司機週報,我腦海裡浮現的畫面是:一個校車司機每天帶著一波熱愛 Swift 的人去探索當今最前沿,最有趣,最具挑戰性的知識和技術。而我們這些每天閱讀老司機週報的人就是這輛校車上的學生,充滿了對未知領域的好奇與熱情。大體是因為有了這個想法,才有了最後的這個 LOGO 設計稿。最後呢,希望老司機週報的讀者能喜歡這個 LOGO,也希望大家能繼續支援老司機週報這個組織,更希望 Swift 這門語言能夠被更多的人所熟知和喜愛。

話題

#1 上週話題 | Swift ABI

讀者 | @alexlee002:

新專案可能會優先選擇 swift, 但得看對公司原有技術棧的依賴程度。ABI 穩定是一個里程碑,如果 OC 和 swift 相互呼叫能做到 Java 和 Kotlin 那樣就更好。

週報編輯 | @tom:

對於我們來說暫時沒啥意見的,畢竟我們早就已經 all in swift 了。我們選型 Swift 還是從效能上面考慮的,相機應用對於程式碼速度和 crash 率有挺高的要求的。對於相機應用來說,效能提升幾十毫秒也很牛逼了。這樣子可以讓相機幀率從 50 變成 53,使用者體驗棒棒噠。

最後,強烈推薦 週報編輯 |@四娘Swift ABI 的看法

如果你也有什麼關於 Swift ABI 的看法,也可以在我們的 Github Issue 上評論,與週報編輯一起討論。

#2 本週話題 | 協程

說起協程,很多人可能還比較陌生,它是一個 60 年代就已經提出概念,是一種在非搶佔式多工場景下生成可以在特定位置掛起和恢復執行入口的程式元件。

目前在服務端中應用比較廣泛,在高併發場景下使用極其合適,可以極大降低單機的執行緒數,提升單機的連線和處理能力,而在移動研發中,前端的 JavaScript,安卓的 kotlin 也都已經支援了協程,唯獨對於 iOS 來說,Swift 的語言級協程支援還在路上,蘋果官方也沒有意願給 objective-c 新增協程能力的意願。

好在,上週阿里巴巴也開源的 coobjc 為我們 iOS 開發者解決了這個困惑, coobjc 同時給 objective-C 和 swift 都提供了協程功能。

所以這周想和大家一起探討一下協程相關的問題。歡迎大家移步到 #2 本週話題 | 協程 和我們一起探討。

新聞

Flutter 1.2 釋出,帶來全新的 Web 開發工具!

Flutter 從去年開始,勢不可擋,一路突飛猛進。Flutter 團隊也一直不停的擴充著 Flutter 的應用範圍,努力實現著 Flutter 更多的跨平臺需求。

在 MWC 2019 上,Flutter 1.2 正式亮相,這次的最大的亮點是提供了新的 Web 開發工具。這個開發工具也會在之後加入到 VS Code 等其他開發工具中去。

CocoaPods-1.6.0

CocoaPods 1.6.0 有以下兩大更新:

  1. 編譯設定的生成部分被完全重寫:在一個比較大的專案中,使用重寫過的該版本執行 pod install 的時間比之前的版本降低了 77%。
  2. 1.6.0 開始會為每個測試 spec 生成一個單獨的測試 target,而不是像之前把多個測試 spec 合併為一個測試 target。

另外,1.6.0 存在一個連結失效的 bug,已在後面的 1.6.1 版本解決,詳情:CocoaPods/issues/8493

文章

? ? 阿里開源 iOS 協程開發框架 coobjc 原始碼分析

阿里開源了 iOS 協程開發框架 coobjc

參與一些大前端開發,寫了很多 js 的同學們,相信對 ES6 的新特性 async await 是非常的喜愛,能夠允許你在同步的程式碼邏輯中,書寫非同步的程式碼。一般這種協程能力有的是語言層面直接支援,有的來自於框架。如今淘寶團隊的大神們為 iOS 的 Objective-C 的語言也帶來了協程框架。“當你還在寫 UI Button 寫介面的時候,別人已經在用匯編寫 iOS 語法庫了”,沒錯 coobjc 在 OC 的基礎上通過彙編對暫存器的直接控制,來儲存/中斷/掛起/恢復一段邏輯的上下文,從而實現上下文的切換,再加上編譯器與語法糖的擴充套件,實現了在 OC 中的 async await 等語法關鍵字的支援,更詳盡的分析請看“知識小集”的這篇原始碼分析

? Parallel Computation using MPS

在影象處理任務上,GPU 一直以來都比 CPU 優異一個數量級。Metal 是蘋果官方推出的 GPU 計算框架, 並提供了一套名為 Metal Performance Shader 的 API 介面,能夠讓開發者非常方便的使用 Metal 處理影象處理的任務。本文作者比較了使用 MPS 對比傳統 CPU 的耗時,發現前者相比 CPU 耗時降低了 99.9%,之後介紹了 MPS 執行的基本原理並給出了一些 MPS 的程式設計技巧,做多媒體開發的同學不要錯過。

? UIView styling with functions

在實際 App 中,檢視通常只有幾種樣式,你可能會想各種辦法做成檢視元件。本文介紹了一種檢視樣式封裝的方法,利用 Swift protocol extension 等特性組織程式碼,使得程式碼邏輯清晰易懂。

? Swift 5 Type Metadata 詳解

Swift 5 釋出以後,ABI 變得更加穩定了,儘管依然與早期的版本是二進位制不相容的。其中對 Metadata 也有不少改動,對於有些專案,可能使用了強依賴 Metadata 的庫,這就需要我們加以修改。本文作者就通過檢視原始碼,回顧了 Metadata 的前世今生,可能會對讀者很有借鑑意義。

? Using CLion as an IDE for Server-Side Swift Apps on Linux

CLion 是 JetBrains 全家桶中的一員,也是 Linux 上比較好用的 IDE 之一。本文以 Vapor 框架為例,完整介紹了在 Ubuntu 上搭建環境、除錯和連線資料庫,如果你也想試試 Ubuntu 上的開發體驗,不妨一讀。

? API Pollution in Swift Modules

本週 NSHisper 討論的是 Swift 匯入 Module 時可能發生的 API 汙染,Swift 的靜態方法查詢是發生在編譯時的,有時候可能會因為函式的宣告不當,而導致意外情況的發生,例如我們本來想呼叫的是 a 函式,結果卻呼叫了 b。

Matt 在文章裡列舉了幾種 API 被汙染的情況,最後還從呼叫方和宣告方兩個角度去探討如何避免類似情況發生,值得一看。

? The perfect guide to AppStore search optimization (ASO)

本指南介紹了 App Store 產品頁面每個基本資訊的最佳實踐,內容簡明扼要,很有參考價值。相關閱讀:App Store Product Page

? Flutter 與 iOS 原生 WebView 對比

本文作者對比了 UIWebView、WKWebView、flutter_webview_plugin(在 iOS 中使用的是 WKWebView)的載入速度、記憶體佔用、HTML5 相容性。

? [譯] 用這些 iOS 技巧讓你的 APP 效能更佳

本文介紹了 APP 效能優化的五種技巧:

  1. 使用可複用的 tableViewCell
  2. 使用看起來像應用首頁的啟動頁
  3. 檢視控制器的狀態恢復
  4. 儘可能減少透明檢視的使用
  5. 在後臺執行緒中處理繁重的功能

除了一些老生常談的優化點之外,檢視控制器的狀態恢復這個點比例新穎,作者也著重講解了其原理和使用方法。如果你的應用中尚未用到,不妨一試,應該可以明顯提升記憶體經常吃緊的使用者(?)的使用體驗。

? Frontend Workshop from HTML/CSS/JS to TypeScript/React/Redux

微軟出版的從 HTML / CSS / JS 到 TypeScript / React / Redux 的前端訓練營,為期兩天,第一天搭建環境、介紹 web 的基礎知識:HTML,CSS 和 JavaScript,通過演示程式碼瞭解一些核心概念。第二天演示和練習結合在一起,深入更高階的主題,如 TypeScript、測試和狀態管理。(TypeScript 是由微軟開源的程式語言。它是 JavaScript 的一個嚴格超集,並新增了可選的靜態型別和基於類的物件導向程式設計,設計目標是開發大型應用,然後轉譯成 JavaScript)。

工具

periphery

periphery 是一個用 Swift 語言編寫的,專門用於掃描 Swift 工程無用程式碼的工具。它的工作原理是利用了 Swift 語法樹的各種回撥特性,並且因為是 Swift 語言編寫的關係,所以它也只能用於 Swift 工程。從本質上來說,它跟 OC 時代的各種Clang Checker做的事情是沒有多大區別的,不過從程式碼的維護性上來說就比 C++ 版本的 checker 要好很多。實測下來,跑一次全規則掃描的時間確實挺長的,如果只是掃描無用的函式引數的話倒是非常的快,大概 10 來秒就出結果了。這個工具也提供了 CI 的整合方案,總體而言算是一個比較成熟的工具了,值得推薦。

程式碼

? chameleon

chameleon 是來自滴滴出行的一套前端跨端整體解決方案。其最大特點是目標讓一套程式碼,同時解決微信小程式,支付寶小程式,百度小程式,快應用,CML-SDK 終端等以 MVVM 為標準的終端。

目前國內前端大環境下,開發者需要為同樣的功能在各自為陣的小程式,快應用上多次重複實現。這樣做既耗時,也耗費大量的人力,最後的效果也不一定理想,所以這樣一套統一多端的方案來避免多次重複開發,也不失為一個好選擇。

吐槽一下,chameleon 這個名字已經被很多庫用了,算是個非常常見的專案名字,如果能有個更獨特一點的名字,可能會更好一點。

freeCodeCamp

開原始碼庫和課程大綱,和數百萬人一起免費學習程式設計。freeCodeCamp 由一個小型非盈利組織運營,目標是幫助數百萬繁忙的成年人向科技行業轉型,這個社群已經幫助超過 10000 人找到他們的第一份程式設計師工作。其中全棧 web 開發課程是完全免費的,可以按照自己的節奏來學習,有上千個互動性的程式設計挑戰來幫助你學習。

內推

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

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

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

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

如果你最近正在找工作,不放看看下面這篇文章:

? iOS 開發者如何在網際網路寒冬中殺出重圍(付費內容)

金三銀四,又要跳槽時間點。該文章主要是整理了作者近段時間面試的一個心得體會,主要是講述了面試前準備,簡歷書寫,大廠面試經驗,以及面試心態處理等幾個方面。

關注我們

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

老司機 iOS 週報 #57 | 2019-03-04

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

本期編輯

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

說明

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

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

相關文章