老司機 iOS 週報 #71 | 2019-06-17

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

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

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

新聞

? ? iOS 13 Preview

極速男孩007:在 WWDC 2019 上蘋果釋出了全新的 iOS 13 版本:

主要帶來了一下功能:

  • 大家期盼已久的黑暗模式。提升了夜晚的視覺效果。
  • 人像拍照更多的功能,並且可以通過日期去篩選照片。
  • 全新的蘋果登入功能,使你的資訊更加安全。
  • 全新的 map 帶來更多的地圖細節,和 360° 的全景街景。
  • siri 聲音變得更加自然,並且能通過 homepod 識別各個家庭成員的聲音。
  • App 啟動速度會比以前快兩倍,並且會有更小的包的大小。
  • ARKit 3 支援人的動作識別,並且支援人和虛擬景象的結合。

? Why Did Apple Reject My App? Ex-Head of App Store Review Explains

@anotherene:App Store 稽核團隊的前負責人討論了為什麼應用程式被拒絕,Apple 和 開發人員之間的競爭以及 WWDC 的規劃。

新手推薦

? ? SWIFTUI BY EXAMPLE

@邦Ben:WWDC 最受矚目的莫過於的 SwiftUI 了,雖然這可能三年後才有機會普及。

作者 Paul Hudson 非常速度的給出來大量的學習例子(涵蓋了日常需要用到的內容,例如:文字圖片,列表容器,彈窗,動畫,檢視形變,狀態等等),並且還有錄製了學習視訊,可謂是乾貨滿滿。

其他參考:

文章

? ? Thoughts on SwiftUI

@zvving:作者 Kuba 是一名資深的 macOS&iOS 開發,整理了對 SwiftUI 的一些思考:

上手所面臨的困難:

  • 你可能需要把自己當成 macOS&iOS 開發新手,哪怕忽略開發正規化的變化,熟悉新的 framework 也需要時間
  • 有很多細節問題需要進一步探索:如面對複雜佈局不知道如何開始;屬性的 $ 如何使用?修飾符的排列順序有什麼影響?等等
  • 工具現狀:仍處於測試版狀態,文件不完善,錯誤訊息很神祕,自動提示在一半的時間裡無效

看好未來的可能性:

  • 對 SwiftUI 提升 UI 開發效率充滿信心,相信能節省開發時間,避免出錯
  • 很好的是蘋果沒有簡單地把 11 歲的 UIKit 抹平差異,遷移到所有平臺。而是重新設計一個 UI 框架,承認並強調每個平臺的獨立性,把有共性的好的體驗統一定義,不通用的部分為每個平臺提供自定義的可能。就像他們所提倡的那樣:『並不是:Write once, run anywhere,而是 Learn once, apply anywhere』
  • 期望保持 macOS Apps 優秀體驗的同時,SwiftUI 為其帶來更多的可能性

? ? Will Combine kill RxSwift?

@Damonwong: 今年的 WWDC 不但出了 SwiftUI 這個重量級框架,還出了一個官方的 ReactiveX 庫 Combine,作者也將 Combine 和目前社群較為流行的 RxSwift 做了以下對比:

  • Combine 支援 Backpressure 特性,而 RxSwift 不支援
  • Combine 和 RxSwift 在錯誤處理上有所不同,相比較而言 Combine 需要更明確的錯誤型別
  • Combine 不需要使用 DisposeBag 來管理記憶體問題
  • Combine 和 RxSwift 在 API 上還是有所差異的
  • Combine 在效能上有一點「碾壓」的趨勢
  • ...

綜合比較起來 Combine 雖然還處於 beta 及 iOS 13+ 的階段,但是各方面似乎都要比 RxSwift 都要稍微好一點。

最後談一下我自己對 ReactiveX 的看法。在 Combine 這庫出來之前,我對 RxSwift 的定義為「毒瘤」。什麼意思呢?就是一旦一個專案中一個庫引入了 RxSwift 你會發現漸漸的所有的庫都會依賴它,以至於想去也去不掉。再加上不同水平的人對 ReactiveX 理解不同,行業中也沒有一個很好的規範來約束,以至於專案中的 RxSwift 程式碼質量參差不齊,難以維護。所以雖然我們專案中引入了 RxSwift 但是我還是會有所剋制的去使用 RxSwift。但是 Combine 的出現,徹底打消了我這些顧慮,Combine 的出現是蘋果開發團隊對 ReactiveX 的肯定,而且 SwiftUI 也依賴於 Combine,所以我覺得對 ReactiveX 充分理解,不再是一個考察開發者能力的可選項,而是一個必須要掌握的技能。如果你還沒有開始瞭解 ReactiveX 那麼 RxSwift 是一個不錯的選擇。

以至於 RxSwift 會不會被 Combine 替代?誰也不知道。把答案交給明天。

? ? WWDC 2019

這是著名的 AFN 作者 Matt 大神寫的部落格,主要是針對WWDC 2019 keynote中的內容進行了一些解讀和展望,如果你對於WWDC 2019 keynote已經比較瞭解了,那麼看這篇文章可以幫助你更好地知道蘋果新技術的一些思想,如果你不太瞭解,建議先到蘋果官網瞭解一番,然後再閱讀這篇文章。 這次 wwdc2019 對於開發者來說,最重要的莫過於推出了SwiftUI框架,重新定義了 UI 層的工作流程,因此 Matt 大神也著重提到了這點。具體來說就是蘋果終於對於宣告式程式設計方式提供了合理的支援途徑,是可喜可賀的一步。 另外一個重大的變化就是 iPad 應用移植到 Mac 平臺將會變得更加方便了,蘋果稱呼這個專案叫Project Catalyst,具體的內容,在 WWDC 的 session 上面都有提及,譬如 Session235Session205。 作者在文章的最後再次強調了,今年 iOS 開發者要關注的重點,無疑就是 SwiftUI 和 Swift5 ,如果現在還沒有對這兩個方向給予足夠的重視,那在技術上就很容易被拉開差距了。

? ? First impressions of SwiftUI

@olddonkey:本文以一個類 SwiftUI 開源庫的作者的角度出發,來介紹了一下自己對 SwiftUI 的第一印象。

作者在幾個月前寫了一個叫 CwlViews 的開源庫,也是使用了宣告式的設計思路,目標以簡單的宣告來快速構建 UI 元件。但是作者的設計思路與蘋果的設計思路卻並不完全相同。例如 SwiftUI 採用的是雙向繫結,而作者採用的是單向繫結。再比如 SwiftUI 採用了 Value Type,而 CwlView 則因為 Binder 的原因,不得不選擇引用型別。

以上這些比較最後讓作者不得不做出一個“艱難”的決定:長遠來看,作者將會放棄自己的開源庫。但是在最低版本支援是 iOS 13 或 macOS 10.15 之前,SwiftUI 也會遇到很多的問題。而這些問題,都需要時間來完善。

? 一招教你解決 FlutterPlatformViews 記憶體洩露問題

@CrazyCoderShi:PlatformView 是 flutter 總一個非常酷炫的功能,使用 PlatformView 你可以貼一個 native 的控制元件到 flutter 的 render tree 中,這給了開發者無限的想想空間,但同時也帶來一些坑點,比如記憶體問題,本文通過對 OpenGL 層面的探索發現並解決這一問題。

? How To Adopt Dark Mode In Your iOS App

@J_Knight_:本文作者從使用條件,顏色,圖片,程式碼層面上的 UIVisualEffectViews,NSAttributedString,以及除錯方法幾個方面講解了如何使 APP 採用 Dark Mode。

? Property wrappers to remove boilerplate code in Swift

@享耳先森Property wrappers 是在 WWDC 2019 隨 Xcode 11 和 Swift 5.1 一起釋出的,提案可以參考 SE-0258

本文舉例使用 Property wrappers 實現一個 @UserDefault wrapper,用來解決 UserDefault 讀取與儲存包含大量模板程式碼的問題,另外,Swift UI 也利用了 Property wrappers 實現 View 與 Model 的動態繫結。

? Swift Combine 入門導讀

@老峰:Combine 是 WWDC19 Apple 官方推出的基於 Swift 的響應式程式設計框架。

本文淺顯易懂的介紹了 Combine 中 Publisher 、Subscriber 、Subject 、Cancellable 等基本概念,作為作者 Combine 系列的第一篇很適合響應式入門級的讀者閱讀。

? 新晉網紅 SwiftUI —— 淘寶帶你初體驗

在剛剛過去的 WWDC 2019,蘋果為我們帶來了很多驚喜,其中最引人注目的內容莫過於 SwiftUI 了。從學習 iOS 開發開始, UIKit 就一直伴隨著我們。UIKit 是基於命令式的,而近年來,聲名式和函式式方式來進行介面開發已經越來越普及,例如最近很紅的 Flutter 。我想很多開發者都在期待蘋果官方能夠出一套類似的技術方案,這不,它就到來了。淘寶團隊也在第一時間體驗了 SwiftUI 並帶了這篇文章,對於還沒有去了解 SwiftUI 的同學,推薦看一看。不過,SwiftUI 雖然很棒,但是 Only iOS13 哦。

相關閱讀:

WWDC 2019 - Session 722:Introducing Combine

? Solving-ambiguous-constraints-without-rerunning-your-app

@jinmq: 本文介紹了使用 View Debugger + LLDB 的方式去定位並消除有歧義的 Auto Layout 約束,而不必每次嘗試都重跑你的應用。

程式碼

? RxCombine

@四娘:RxSwift 社群推出的一個用於與 Combine 進行互動的框架,提供了 Observable 與 Publisher 相互轉化的功能,目前還是屬於概念驗證階段。

? RxSwift to Combine Cheatsheet

@Damonwong: 這是一個 RxSwift 和 Combine 庫 API 的對照表,如果你對 RxSwift 的 API 已經很熟練了,那麼這個倉庫的對照表可以讓你很快上手 Combine。

Swift-Docker Slim Images

@張嘉夫:Swift Docker 映象的精簡版本,適用於 Ubuntu 16.04 和 18.04,去掉了編譯器只保留 runtime,映象從 1.3GB 減小到了 200MB 左右,以便部署。

SwiftUI Hooks

@looping:這個專案是受到了 React Hooks 的啟發,想證明下在 SwiftUI 上也能用 Hooks。目前作者已經實現了 useState、useEffect 和 useReducer 這幾個 Hook,同時還寫了一個 Todo List 作為演示。對 React Hooks 技術和理念感興趣的同學可以持續關注。

MovieSwiftUI

@邦Ben:這是一個基於 SwiftUI 並且使用 Flux 架構完成的電影類 App,示例功能都比較完整。

參考連結:

內推

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

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

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

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

關注我們

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

老司機 iOS 週報 #71 | 2019-06-17

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

說明

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

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

相關文章