一次關於 Swift 在 iOS 生態圈裏的現狀調研

本文是 SketchK 的一篇數據調研筆記,能夠幫助你們看清當前國內 iOS 開發形式。文章末尾處有一個開放性投票,歡迎你們積極參與html

Swift 的發展歷程

概述

經過官網的 Document Revision History[1]Xcode Release Notes[2] 梳理了一下 Swift 的發展歷程和重大事件。git

Swift 版本 Xcode 版本 發佈時間 重大事件
Swift 1.0 ~ 1.2 6.x 2014 語⾔發佈
Swift 2.0 ~ 2.2.1 7.x 2015 對協議,泛型能力進一步擴展,開始支持 Linux,隨後出現了以 Swift 語言爲核心的後端框架 Perfect,Vapor,Kitura
Swift 3.0 ~ 3.3.1 8.x 2016 發佈了 Swift Package Manager,同時以 GCD,Core Graphics 爲表明的基礎庫 API 風格發生了大幅度轉變,擺脫了 Objective-C 時代的烙印
Swift 4.0 ~ 4.1.3 9.x 2017 在總體的語法,使用和理念上基本定型,提出了 Codable 協議,同時 Xcode 的 Swift Syntax Mirgration 的最低版本固定爲 4
Swift 4.2 ~ 4.2.4 10.x 2018 Swift 社區從郵件列表轉向論壇,語言小幅升級,主要是功能完善,性能提高,同年 Swift for TensorFlow 發佈並開源
Swift 5.0 ~ 5.0.3 10.2.x 2019 ABI 穩定,iOS 12 開始內置 Swift 運行時
Swift 5.1 ~ 5.2 11.x 2020 新增 Property Wrapper ,Opaque Type 等新的語法功能,同年 WWDC 上,Apple 發佈了 SwiftUI,Combine,Catalyst 等 Swift 語言的專屬 SDK
Swift 5.3

質量和性能加強,增長對 Windows 和其餘 Linux 發行版的支持。

結合着本身的 Swift 學習經歷,不難發現:程序員

在 Swift 4 以前,因爲語言總體還沒定型,確實存在着發一個新版本,學一門新語言的狀況,但在 Swift 4 以後,Swift 變化變得收斂了許多,不過也出現了入門容易,精通難的狀況,畢竟光 Swift 的語法糖數量就快遇上了 C++ 了。github

語言排行榜

Swift 語言從誕生之日開始,就一直存在各類各樣的爭議:一方面的焦點在於 Swift 的應用領域仍是集中在 Apple 生態下,讓人以爲不夠大氣,畢竟新時代的語言就是要全能,另外一方面的焦點就是 Swift 語言的變化太快,每一個版本都是是全新的感受,這讓開發者意識到,東西雖好,但代碼仍是要一個個的本身改的。web

不過隨着時間的推移,Swift 在後端,人工智能,物聯網上的解決方案和應用場景不斷出現,它已經遠遠不在是一個只能在 Apple 生態下運行的語言,關於這個很是推薦看看 Onevcat 在 GMTC 2019 上的分享:在分歧中發展——2019,咱們能用 Swift 作什麼[3]編程

ABI 在 Swift 5.0 的時候也終於穩定了,雖然 ABI 穩定是使用 binary 發佈框架的必要非充分條件,但都 ABI 了,module stability 也不會太遠了,這些信號都讓開發者的信心不斷加強。swift

爲了驗證這一點,咱們也能夠從編程語言排行榜 TIOBE[4]PYPL[5] 裏看出一些端倪。後端

下圖爲 TIOBE 2020 年 四月排行榜,Swift 的排名在 11 名,Objective-C 的排名在 17 名,份額差距在 0.6% 左右:xcode

TIOBE 2020 年 四月排行榜

下圖爲 PYPL 2020 年 四月排行榜,Swift 的排名在 9 名,Objective-C 的排名在 8 名,份額差距在 0.17% 左右:瀏覽器

PYPL 2020 年 四月排行榜

不論哪一種排名,咱們應該均可以得出這樣一個結論:相比於 Objective-C 的降低趨勢,Swift 的將來會更讓人期待。

社區活躍度

觀察一個編程語言活躍度的最好地方就是 Github,經過 Pull Requests ,Issues,Pushes,Stars 的狀況,咱們就能夠大體瞭解到它的狀況。

剛好 Githut[6] 提供了這樣的能力,經過觀察 2020 年第一季度的數據,咱們能夠清楚的觀察到 Swift ,Objective-C 等語言在社區的活躍度。

總體趨勢圖

下面四張圖的 Y 軸分別表明了 Pull Requests ,Issues,Pushes,Stars 的數量,藍色的線表明 Objective-C ,淺橙色的線表明 Swift,深橙色的線表明 Kotlin。

Pull Requests
Issues
Pushes
Stars

咱們能夠發現,從 2016 年開始,Swift 的數據已經超過了 Objective-C,如今有一種取而代之的快速發展趨勢,這說明社區中更多的開發者習慣把精力放在 Swift 上,而不是放在 Objective-C 上。

這就給相應的開發者一個提醒,若是你堅持使用 Objective-C,那麼你可能會面臨一個風險,你所依賴的第三方開發庫,他們的原做者頗有可能已經不肯意去維護他們了。

同時,咱們也能夠發現 Swift 和 Kotlin 做爲端上的新語言,它們的發展趨勢是穩步上升的,這表明它們在社區是受歡迎的,那這也意味着掌握這些新技術會更容易與其餘程序員進行交流和溝通,至於將來能不能徹底取代現有語言的份額,還須要時間來證實。

個體狀況對比

若是關注過一些 iOS 相關的 Newsletters,咱們應該均可以感覺到,相比於 Swift 的第三方開源庫,同類型的 Objective-C 開源庫明顯處於劣勢,不管是新增數量,仍是活躍度;甚至有些 Objective-C 的庫已經被開發者廢棄,轉而使用 Swift 重構。

下面是兩種語言的兩個常見方向的第三方開源庫的數據對比,咱們明顯能夠看出 Objective-C 項目的活力在降低,甚至出現了 2 年沒有更新的狀態。

名稱 Massonry SnapKit Pop Hero
語言 Objective-C Swift Objective-C Swift
Stars 17.7K 16.3K 19.8K 18.3K
Opening issue 108 64 44 167
Opening Pull Request 19 16 14 14
Latest Commit 2017.09 2019.11 2018.10.12 2020.04.26
Latest release 2017.09 2019.08 2018.10.12 2019.10.29

對於那些還在持續更新的 Objective-C 庫,它的更新頻率又是什麼樣子的呢?咱們拿 AFNetworking 和 Alamofire 作一個比對:

AFNetworking 版本 時間點 間隔時間 Alamofire 版本 時間點 間隔時間
4.0.1 2020.04.21 1 個月 5.1.0 2020.04.05 0.5 個月
4.0.0 2020.03.31 12 個月 5.0.5 2020.03.24 0.2 個月
2.7.0 2019.02.13 7 個月 5.0.4 2020.03.16 0.1 個月
3.2.1 2018.05.05 5 個月 5.0.3 2020.03.15 0.5 個月
3.2.0 2017.12.16 25 個月 5.0.2 2020.02.24 0.1 個月
2.6.3 2015.11.11
5.0.1 2020.02.23

雖然 AFNetworking 還在更新,但其更新的週期實在是讓人摸不着頭腦,相比於 Alamofire 穩定的更新頻率,你到底願意用哪一個呢?

舉個實際的例子,好比你們都是作 HTTP 請求的,3.0 協議已經發出,從社區的反饋來看,將來的開發者更願意把精力放在 Swift 上面,如今 SSL Certificate Verify 的驗證,是能夠把證書鏈從上至下所有驗證一遍,這在 Alamofire 裏已經支持的很是好,而 AFNetworking 在此領域目前是缺失的。

這就有可能在將來的某個時間點,工程所依賴的,第三方的,不可替換的,核心的開發框架有嚴重的問題或者功能缺失時,項目的進度會受影響,做爲開發者會陷入進退兩難的情況。

Apple 的 SDK

在 Apple 的 Apple Developer Documentation 列表[7] 中,咱們發現共有 196 個條目,其中 Swift 獨佔的 SDK 共計 10 個,Objective-C 獨佔的 SDK 共計 14 個。

維度 個數 SDK 名稱
Swift 獨佔 10 Swift(Swift Standard Library),Combine,SwiftUI,RealityKit,CareKit,Create ML(Create ML, Create MLUI),Playground Support,PlaygroundBluetooth,Apple CryptoKit,Swift Packages(Swift Package Manager)
Objective-C 獨佔 14 QTKit (macOS 專屬),Professional Video Applications(FxPlug,macOS 專屬),xcselect (macOS 專屬),DarwinNotify,DriverKit(macOS 專屬),EndpointSecurity(macOS 專屬),HIDDriverKit(macOS 專屬),IOUSBHost(macOS 專屬),Kernel(macOS 專屬),NetworkingDriverKit(硬件驅動相關),PCIDriverKit(硬件驅動相關),SerialDriverKit(硬件驅動相關),USBDriverKit(硬件驅動相關),USBSerialDriverKit(硬件驅動相關)

雖然乍一看 Objective-C 獨佔的 SDK 較多,但這些 SDK 主要是面向 macOS 和硬件驅動方向的,對 iOS 開發自己沒有任何影響。

而 Swift 獨佔的 SDK 就徹底不同了, Apple 這些年主推的技術方向,例如 AR,AI,Health,SwiftUI,Combine 等一系列 SDK 都只有 Swift 的版本了,這無疑在暗示開發者:來吧,用就用 Swift 吧!

Swift 在國內外 iOS 客戶端的使用現狀

說了這麼多,Swift 在 iOS 生態裏到底用的怎麼樣?最直接的辦法就是看看它在 Apple Store 裏的佔有率,這裏咱們會考察 2019 和 2020 年的狀況。

2019 年

很慶幸,這部分工做,淘寶團隊已經作過了!

相關的內容在 從探索到落地,手淘引入 Swift 「歷險記」 2019 一文中已經披露,這裏借用它們原話:

咱們經過爬蟲分析國內外 APP Store 排行榜 Top 1000 的 APP,經過文件掃描分析獲得結論。

  • 國內使用 Swift 的 APP 約佔比 22%,美區使用 Swift 的 APP 約佔比 78%,其中美區剩餘沒有使用 Swift 的 APP 大部分來自中國地區本地化的產品,如抖音,快手等,能夠得出一個結論,國內仍是小衆的 Swift,在國外已是現狀。
  • Github/Stack Over Flow 社區等 Objective-C 開源庫和問題提問已經基本停滯,將來咱們在落地新技術,Objective-C 可能已是最壞的打算,加之 WWDC 17 年以來,蘋果再也不提供 Objective-C 的示例,組內同窗也屢次碰見 Objective-C Bug 去社區提問,毫無熱度的狀況。
  • 蘋果在 WWDC19 年發佈了 4 個 Pure Swift 框架,沒法簡單的被 Objective-C 混編。

將來咱們極有可能由於蘋果的強制推動風格和社區文化的落後產生技術踏空,沒法迅速響應業務,甚至沒法招聘到會使用 Objective-C 的工程師。

IMAGE

經過了解,淘寶的數據來源是七麥數據提供的,日期爲 2019 年 02 月 19 日,國內排行榜傳送門 2019 版[8]國外排行榜傳送門 2019 版[9]

2020 年

如今回到 2020 年,Swift 在國內外的應用狀況又發生了什麼變化呢?

爲了獲得這個問題的答案,我也打算對國內外免費榜裏的 APP 進行掃描,先不說 1000 個 ipa 的下載工做量有多大,256G 的硬盤估計也裝不下這麼多 APP,索性就弄前 102 名吧!

原本是想作前 100 的,只是由於當時下載國內 ipa 的時候多下載了 2 個,索性本着樣本越多越接近真實狀況的道理就把國外的數據量也放到了 102 個,並無什麼特別緣由。

掃描的原理借鑑了 如何檢測 iOS 應用程序是否使用 Swift?[10]便可,這裏要感謝一下好基友 @ForelaxX[11] 製做了這個腳本工具。

App 排行榜的數據來源是七麥數據提供的,日期爲 2020 年 4 月 27 日,國內排行榜傳送門 2020 版[12]國外排行榜傳送門 2020 版[13]

經過掃描這 102 個 App,最終發現國內的 Swift 佔比爲 30.4%(31/102),國外的 Swift 佔比 82.3%(84/102),相比於 2019 年的數據,國內的 Swift 應用增加了 10% 左右,國外的 Swift 應用增加了 5% 左右。

IMAGE

下圖是結合 2019 年和 2020 年的百分比趨勢變化圖

IMAGE

下面是掃描的詳細結果:

國內 App 版本 是否使用 Swift 國外 App 名稱 是否使用 Swift
拼多多 NO Zoom NO
騰訊會議 NO TikTok NO
釘釘 NO Houseparty YES
我的所得稅 NO Youtube NO
剪映 YES Instagram YES
交管 12123 NO Facebook NO
抖音 NO Messenger NO
微信 YES Amazon NO
微視 YES Cash App YES
支付寶 NO DoorDash YES
QQ NO American Idol YES
快手極速版 NO Netflix YES
手機淘寶 YES Snapchat YES
淘寶特價版 NO PREQUEL YES
企業微信 NO Gmail YES
快手 NO Wish YES
和平營地 NO Hulu YES
QQ 音樂 NO Disney+ YES
百度 YES Shop YES
閒魚 NO Pinterest NO
網易雲音樂 NO Amazon Prime Video YES
騰訊視頻 NO PayPal YES
高德地圖 NO Spotify YES
酷狗音樂 NO Google Duo YES
小紅書 YES Discord YES
美團 NO Venmo YES
京東 NO Wayfair YES
夸克 NO Walmart YES
嗶哩嗶哩 NO Twitter YES
瑞幸咖啡 YES WhatsApp YES
愛奇藝 NO Twitch YES
BOSS 直聘 NO SHEIN YES
雲閃付 NO Google Chrome NO
百度網盤 YES Roku YES
中國建設銀行 NO intoLive YES
阿里巴巴 NO Nike YES
WPS Office NO PicsArt YES
58 同城 NO Google YES
Keep YES Calm YES
微博 NO eBay YES
閩政通 YES Norton Secure YES
QQ 瀏覽器 NO Airtime YES
中國工商銀行 YES YEE YES
美圖秀秀 YES Omegle YES
安居客 NO Google Driver YES
七貓小說 YES Tinder YES
貝殼找房 NO Target YES
農行掌上銀行 NO Google Map NO
京東金融 NO OfferUp YES
輕顏相機 YES Grubhub YES
番茄小說 NO Google Photos YES
FaceApp YES Yubo YES
得物 YES Google Classroom YES
優酷視頻 NO YOLO YES
祕樂短視頻 YES Pandora YES
網上國網 NO Fonts YES
哈羅出行 NO Uber Eats YES
中國銀行手機銀行 YES Mercari YES
好省 YES Reddit YES
喜馬拉雅 NO SoundCloud YES
WIFI 萬能鑰匙 NO Hangouts Meet YES
掃描全能王 NO Google Docs NO
UC 瀏覽器 NO Instacart YES
駕考寶典 NO Fitness Coach YES
天眼查 NO PictureThis NO
人人視頻 NO Xbox YES
QQ 郵箱 NO Tubi YES
淘寶直播 NO VideoToLive YES
西瓜視頻 NO Amazon Photos YES
最珠海 NO Zillow YES
辦事通 NO Robinhood YES
知乎 YES Hangouts YES
搜狗輸入法 NO News Break YES
菜鳥裹裹 NO Enlight Video NO
招商銀行 NO Youtube Music YES
蘇寧易購 NO letgo YES
美團外賣 NO InShot NO
學習強國 NO Fetch Rewards YES
餓了麼 NO Splice YES
全民 K 歌 NO Postmates YES
今日頭條 NO ESPN YES
識貨 YES Duolingo YES
懂車帝 YES Quibi YES
全球騎士特購 NO Amazon Music YES
Facetune2 YES Audible YES
中國聯通 YES Microsoft Outlook YES
平安好車主 NO Esty YES
騰訊新聞 NO SONIC Drive-in YES
醒圖 YES Funimate Video YES
酷狗鈴聲 NO Telegram YES
百度地圖 NO Instacart Shopper YES
探探 YES AliExpress Shopping NO
多閃 NO YouTube Studio NO
中國移動 NO Miscorsoft Teams YES
做業幫 NO PlayStation NO
郵政手機銀行 NO Bumble YES
Zoom NO Messenger Kis NO
滴滴 YES Facetune2 YES
智聯招聘 YES Hoop YES
虎牙直播 NO TextNow YES
芒果 TV YES Vinkle YES
百度貼吧 YES McDonald's YES

經過這組數據,咱們能夠分析出不少有意思的東西

首先,BAT 三巨頭的門戶 APP 都已經具有了 Swift 混編的能力,例如百度系的百度主 App,百度網盤,百度貼吧,阿里系的手淘,芒果視頻,騰訊系的微信,微視

其次,國內的獨角獸巨頭們[14],彷佛也作好了迎接 Swift 的準備,例如字節跳動(剪映,飛書),滴滴出行,自如,網易,小紅書,獲得,瑞幸咖啡,猿題庫,英語流利說等。

最後,一個有意思的現象是,我發現國外 Top 102 的 ipa 總大小爲 10G,而國內 Top 102 的 ipa 總大小將近 24G,不知道這是否是用 Swift 編寫代碼爲包大小帶來的正向收益,仍是咱們 」CMD+C 和 CMD+V「 的代碼複用機制形成的。

總結與展望

作完這個調研,能得出什麼結論呢?

  1. 綜合 Swift 的發展歷史,語言排名,社區活躍度等因素來看,Swift 的發展是處於上升趨勢的,可能相比於一些明星語言和明星技術熱點,它的表現不是那麼突出,但總趨勢上升是不能否認的,這一樣適用於 Objective-C 的總趨勢降低。
  2. Apple 應該會繼續增長 Swift 語言在其生態圈的重要性並進行相應的戰略部署,即便 Swift 語言還沒徹底達到 Module Stability,但從推出的 Swift 獨佔 SDK 已經看出了他們的想法。
  3. 國內外各個互聯網廠商在轉向 Swift 的道路上已經走起來了,即便國內的佔比還落後於國外,但總的趨勢和漲幅勢頭已經十分明顯了,以 BAT 爲首的大部分互聯網公司已經完成了 Swift 的混編工做,尤爲是它們旗下的明星 App 已經接入了 Swift。

拿着這些結論來看看你們平日裏對 Swift 的印象,咱們又發現了哪些不同的地方呢?

雖然國內 iOS 圈裏常有人說」Swift 無用「,」Swift 火不了「,」咱們不須要用 Swift 開發「,但冷靜的分析下來,國內的各大廠商真的拋棄 Swift 了麼?

經過這份真實的數據,我想答案很明顯,它們都沒有放棄 Swift,並且都在積極的作準備,這就很像嘴上說着不要不要,但身體卻出賣了本身。

國外的 Swift 氛圍不用多說,你們都已經能夠看出誰會是 iOS 端上將來的主角。這裏咱們就說說國內的狀況:

咱們都知道,淘系的主 App ---- 手機淘寶在今年完成了 Swift 混編能力的建設,這意味着什麼?對於淘系 App 來講,這麼龐大,複雜的工程都已經具有了混編的能力,那麼阿里旗下的其他 App 轉型將再也不有什麼逾越不了的鴻溝。

號稱 App 工廠的字節跳動,在很早就嘗試了 Swift 的混編開發,早期還限定在一些小型的項目,如今它們已經具有了中大型項目的 Swift 混編能力,這一點能夠在它們的海外明星應用 Helo 上的獲得驗證,目前這款 App 在字節跳動內部的排名已經躋身到前 5 名了,另外從一些渠道得知,它們的明星應用 - 今日頭條也將在近期開展 Swfit 混編能力的建設。

而國內那些還在高速發展的公司,例如美團,京東,拼多多,快手等公司,在 Swift 上的探索還顯得比較落後,可能還停留在一些小型內部應用或者 B 端的應用上,甚至也有可能徹底沒有開展過相關的工做。

這麼看來,國內廠商的 Swift 格局已經十分清晰,大致會呈現三個梯隊

第一梯隊:以 BAT 爲表明的頂端團隊已經解決了複雜的,巨型的,歷史包袱重的工程項目如何使用 Swift 的問題,對他們而言,將來的問題就是怎麼將 Swift 用到真正的業務代碼上了,玩的好,玩的溜的將是它們要關注的問題了。

第二梯隊:以字節跳動,網易爲表明的一些公司,已經解決了部分 Swift 混編的問題,對於其內部工程複雜度最高,歷史包袱最重的 App 尚未實現混編的能力,例如字節跳動的 Helo 和抖音,網易的網易公開課和網易雲音樂,這些公司在近期面臨的問題可能會是如何解決混編。

第三梯隊:以美團,京東爲表明的一些公司,在這方面尚未開展相應的工做或者開展的還比較少,他們目前可能更關注的仍是在解決自身業務發展的問題,例如動態化,中臺建設,容器化等方面的技術積累與戰略部署。

無論怎麼看,Swift 在國內的發展既不是徹底停滯,也不是無人問津,只是真正玩的人比較「低調」而已,但該來的必定會來。

不知道看完這篇文章,你認爲 Swift 在國內的發展會是什麼樣子呢?

參考資料

[1]

Document Revision History: https://docs.swift.org/swift-book/RevisionHistory/RevisionHistory.html

[2]

Xcode Release Notes: https://developer.apple.com/documentation/xcode_release_notes

[3]

在分歧中發展——2019,咱們能用 Swift 作什麼: https://gmtc.infoq.cn/2019/beijing/presentation/1802

[4]

TIOBE: https://www.tiobe.com/tiobe-index/

[5]

PYPL: http://pypl.github.io/PYPL.html

[6]

Githut: https://madnight.github.io/githut/#/stars/2020/1

[7]

Apple Developer Documentation列表: https://developer.apple.com/documentation

[8]

國內排行榜傳送門2019版: https://www.qimai.cn/rank/index/brand/free/device/iphone/country/cn/genre/5000/date/2019-02-19

[9]

國外排行榜傳送門2019 版: https://www.qimai.cn/rank/index/brand/free/device/iphone/country/us/genre/5000/date/2019-02-19

[10]

如何檢測 iOS 應用程序是否使用 Swift?: https://mp.weixin.qq.com/s/vF_oOWFLimlyRi4mZpgpeQ

[11]

@ForelaxX: https://github.com/ForelaxX

[12]

國內排行榜傳送門2020版: https://www.qimai.cn/rank/index/brand/all/device/iphone/country/cn/genre/5000/date/2020-04-27

[13]

國外排行榜傳送門2020版: https://www.qimai.cn/rank/index/brand/all/genre/5000/device/iphone/country/us/date/2020-04-27

[14]

獨角獸巨頭們: http://www.199it.com/archives/864570.html




往期推薦

一次讓刷新控件好玩起來的嘗試

《從一到無窮大》中的程序思惟

立志欲堅不欲銳 - 2019 年小結



本文分享自微信公衆號 - 一瓜技術(tech_gua)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索