本文是 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
下圖爲 PYPL 2020 年 四月排行榜,Swift 的排名在 9 名,Objective-C 的排名在 8 名,份額差距在 0.17% 左右:瀏覽器
不論哪一種排名,咱們應該均可以得出這樣一個結論:相比於 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。
咱們能夠發現,從 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 的工程師。
經過了解,淘寶的數據來源是七麥數據提供的,日期爲 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% 左右。
下圖是結合 2019 年和 2020 年的百分比趨勢變化圖
下面是掃描的詳細結果:
國內 App 版本 | 是否使用 Swift | 國外 App 名稱 | 是否使用 Swift |
---|---|---|---|
拼多多 | NO | Zoom | NO |
騰訊會議 | NO | TikTok | NO |
釘釘 | NO | Houseparty | YES |
我的所得稅 | NO | Youtube | NO |
剪映 | YES | YES | |
交管 12123 | NO | NO | |
抖音 | NO | Messenger | NO |
微信 | YES | Amazon | NO |
微視 | YES | Cash App | YES |
支付寶 | NO | DoorDash | YES |
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 | 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 | YES | |
瑞幸咖啡 | YES | 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 | 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 | 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「 的代碼複用機制形成的。
總結與展望
作完這個調研,能得出什麼結論呢?
-
綜合 Swift 的發展歷史,語言排名,社區活躍度等因素來看,Swift 的發展是處於上升趨勢的,可能相比於一些明星語言和明星技術熱點,它的表現不是那麼突出,但總趨勢上升是不能否認的,這一樣適用於 Objective-C 的總趨勢降低。 -
Apple 應該會繼續增長 Swift 語言在其生態圈的重要性並進行相應的戰略部署,即便 Swift 語言還沒徹底達到 Module Stability,但從推出的 Swift 獨佔 SDK 已經看出了他們的想法。 -
國內外各個互聯網廠商在轉向 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 在國內的發展會是什麼樣子呢?
參考資料
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
往期推薦
本文分享自微信公衆號 - 一瓜技術(tech_gua)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。