Swift 2021 生態(tài)調(diào)研報告
回顧 2020
在去年的《一次關(guān)于 Swift 在 iOS 生態(tài)圈里的現(xiàn)狀調(diào)研》一文中, 我們分析了整個大環(huán)境的現(xiàn)狀,在文章發(fā)表后得到了大家的廣泛關(guān)注,時隔一年,我們再來看看有什么變化吧?
Swift 語言
版本變化
首先從去年的 5.2 版本,到現(xiàn)在即將發(fā)布 5.4 版本,Swift 經(jīng)歷了 2 個小的版本變化,分別是 5.3 和 5.4
其中 5.3 版本給出了以下幾個語言特性:
SE-0276[1]:catch 語句在捕獲 error 的時候,可以更加靈活自由,例如一次捕獲多個 error 或者對 error 的值進行綁定。 SE-0279[2]:支持多個尾隨閉包,這個特性主要是為 SwiftUI 準(zhǔn)備的。 SE-0266[3]:enum 支持 comparable 協(xié)議,并根據(jù)順序自行決定大小 SE-0269[4]:在某些場景下可以避免 self 關(guān)鍵字的聲明 SE-0281[5]:通過 @main關(guān)鍵字定位程序入口SE-0267[6]:在函數(shù)的泛型和擴展中就可以使用包含 where關(guān)鍵字的語句SE-0280[7]:protocol witness 匹配模型在枚舉值中的加強 SE-0277[8]:新增 Float16 的數(shù)據(jù)類型 SE-0268[9]:didSet 方法優(yōu)化和語義更新 首先在 SE-0271[10] 中,Swift Package Manager 在資源文件的支持上有了進一步的提升,同時,在 SE-0278[11] 中,SPM 對本地化資源的支持也有了改進,而且在 SE-0272[12] 中,SPM 終于支持了二進制形式的組件。在 SE-0273[13],SPM 允許我們對特定的 target 進行特殊的依賴配置。
其中在未來的 5.4 版本又新增了以下幾個語言特性:
SE-0287[14]:提升了隱式成員表達式的類型推斷能力。 SE-0284[15]:在函數(shù)中可以定義多個可變參數(shù)。 SE-0289[16]:在 5.1 就公布的 Function Builder 功能正式命名為 Result Builder,并在原先的基礎(chǔ)上進行了完善。 SR-10069[17]:嵌套函數(shù)支持重載 SE-0294[18]:新增 executable 類型的 target,使得 SE-0281[19] 新增的特性更易于使用。 property wrapper 除了可以作為屬性外,還可以在函數(shù)里作為本地變量。
On the road to Swift 6
在 2021 年的 1 月,Swift 社區(qū)的 Ted Kremenek[20],他的另一個身份是 Manager of the Languages and Runtime Team @Apple,在 swift.org forum[21] 公布了一則名為《On the road to Swift 6》[22]的文章
在這篇文章里,提到了一些對 Swift 6 的規(guī)劃,從大方向來說,Ted 提了三點:
加速整個 Swift 軟件生態(tài)的發(fā)展:包含兼容更多的開發(fā)平臺,簡化軟件的安裝部署和大力發(fā)展各類工具庫。 打造極致的開發(fā)體驗:包括更快的構(gòu)建速度,更好用的調(diào)試工具,更靈敏的代碼補全和更豐富的診斷信息。 結(jié)合開發(fā)者的反饋進一步發(fā)展語言特性:包括完善 API 的設(shè)計,拓展其在底層系統(tǒng),服務(wù)器和機器學(xué)習(xí)方面的應(yīng)用場景,同時對某些主流的語言特性提供支持,例如并發(fā)特性和內(nèi)存相關(guān)的特性。
同時 Swift 的核心團隊也發(fā)生了一些變化,Saleem Abdulrasool[23] 和 Tom Doron[24] 作為新成員加入到核心團隊,而 [Dave Abrahams] 則退出了核心團隊。
這里稍微提一下的,Tom 是 SwiftNIO 的核心開發(fā),同時在 SSWG(Swift Server Work Group) 項目中也是主要的發(fā)起者,而 Saleem 是 Swift to Windows 的核心發(fā)起者,這兩個變動結(jié)合著最開始的三個大方向,可以看出整個核心團隊是言行一致的。
另外關(guān)于 Swift 6 的公布時間,Ted 的原話是這樣的:
Instead of announcing a specific timeline for “Swift 6”, the plan is for the community to be a part of seeing these efforts progress, with focused efforts and goals, and we release Swift 6 when those efforts culminate.
所以這樣看來,Swift 6 還是有一段時間才能與我們見面,畢竟人家說了 when those efforts culminate!
那反過來看,Swift 5 還將會是近期使用的主要版本。(PS:希望今年的 WWDC 21 不要被打臉)
技術(shù)社區(qū)
語言排行榜
同樣我們來看一看編程語言排行榜 TIOBE[25] 和 PYPL[26] 的情況,在 TIOBE 的排行榜中,Swift 在今年的排名是第 15 名,而 Objective-C 已經(jīng)徹底排在了 20 名之外了。

而在 PYPL 的排行榜中,Swift 和 Objective-C 的熱度還是較為接近的。

從社區(qū)的語言排行榜來看,雖然乍一看,感覺還是 Swift 和 Objective-C 共存的大環(huán)境,但其實背后也反映出,Swift 已經(jīng)被大部分開發(fā)者所接受了。
社區(qū)活躍度
同樣通過 GitHut 2.0[27] 這個工具對 GitHub 進行分析。
下面四張圖的 Y 軸分別代表了 Pull Requests ,Pushes,Stars,Issues 的數(shù)量,藍色的線代表 Objective-C ,淺橙色的線代表 Swift。
可以發(fā)現(xiàn),在 Pull Request 方面,Swift 占比約 0.595%,而 Objective-C 占比約 0.335%

同時 Push 方面,Swift 占比約 0.476%,而 Objective-C 占比約 0.310%

在 Stars 方面,Swift 占比約 2.107%,而 Objective-C 占比約 1.067%

在 Issue 方面,Swift 占比約 0.767%,而 Objective-C 占比約 0.607%

總的來看,在 GitHub 的大環(huán)境中,社區(qū)中的開發(fā)者還是持續(xù)看好 Swift,也相對更加活躍,尤其在 Star 這項指標(biāo)上可以明顯看出,它高出了 Objective-C 近一倍!
商用 SDK 的技術(shù)選型
在今年我們還發(fā)現(xiàn)了一些有意思的現(xiàn)象,不少商用 SDK 也開始了 Swift 的遷移。
例如國外的 Nordic Semiconductor[28] 公司,它是北歐的一個半導(dǎo)體公司,主營藍牙芯片,在業(yè)界屬于領(lǐng)先地位,不少使用它家芯片的團隊會涉及到固件升級問題,無線的升級方案需要進行固件傳輸、校驗、升級管理等動作,而這些動作都得使用它們家提供的 SDK 來完成。

在 Nordic Semiconductor 的 GitHub 頁面[29]上,我們可以看到目前提供的商用 SDK 中,iOS 端只有 Swift 版本[30],而 Android 端只有 Java 版本[31]。
同時像 Google 的 Firebase 在其 RoadMap[32] 里也明確指出了將更加關(guān)注 Swift 的使用體驗并開始了部分改造。
相信不久的將來,會有越來越多的廠商加入到 Swift 的社區(qū)中,除了 Swift 是未來 這樣人人都懂的道理以外,這兩年新增的特性,例如 ABI 穩(wěn)定,Module 穩(wěn)定,以及 SPM 對 binary 組件的支持,都會導(dǎo)致廠商的態(tài)度改變,尤其是那些需要使用非源碼形式發(fā)布組件的廠商,畢竟這些特性從根本上解決他們面臨的工程問題。
Apple 生態(tài)
SDK 能力
同樣,我們繼續(xù)分析了 Apple Developer Documentation[33] 下的 239 個 主題,發(fā)現(xiàn)今年的 Swift 獨占和 Objective-C 獨占的 SDK 情況如下
| 維度 | 個數(shù) | SDK 名稱 |
|---|---|---|
| Swift 獨占 | 13 | Swift(Swift Standard Library),Combine,SwiftUI,RealityKit,CareKit,Create ML(Create ML, Create MLUI),Playground Support,PlaygroundBluetooth,Apple CryptoKit,Swift Packages(Swift Package Manager),Developer Tools Support,System,WidgetKit |
| Objective-C 獨占 | 12 | DarwinNotify,DriverKit(macOS 專屬),EndpointSecurity(macOS 專屬),HIDDriverKit(macOS 專屬),Kernel(macOS 專屬),NetworkingDriverKit(硬件驅(qū)動相關(guān)),PCIDriverKit(硬件驅(qū)動相關(guān)),SerialDriverKit(硬件驅(qū)動相關(guān)),USBDriverKit(硬件驅(qū)動相關(guān)),USBSerialDriverKit(硬件驅(qū)動相關(guān)),xcselect (macOS 專屬),SCSIControllerDriverKit |
在 Swift 獨占方面,新增了 3 個 SDK,分別是 Developer Tools Support,System,WidgetKit,其中 System[34] 是個用于進行底層文件操作(low-level file operation)的庫,似乎這也是 Apple 的首個用 Swift 編寫的系統(tǒng)底層庫(PS:如果說的不對,還請各位讀者指正);另外一個想說的重點就是 WidgetKit[35],這也是首次 Apple 在推廣系統(tǒng)新特性的時候強制要求開發(fā)者必須使用 Swift 技術(shù),這個策略我認(rèn)為還是十分高明的,它為 Swift 技術(shù)的推廣和應(yīng)用找到了新的出路。
同時 Objective-C 獨占方面,新增了一個 SCSIControllerDriverKit[36],但相比于去年,Professional Video Applications[37] 和 IOUSBHost[38] 兩個 Objective-C 獨有的 SDK 被改造成了 Swift 和 Objective-C 都可以使用的情況,而 QTKit 被徹底廢棄了。
至此,我們發(fā)現(xiàn)了,Swift 獨占庫的數(shù)量首次大于了 Objective-C 的獨占庫,是不是很有意思!
原生 App 分析
國外的開發(fā)者 Timac[39] 在其文章《Apple’s use of Swift and SwiftUI in iOS 14》[40]里對 iOS14 中的 Swift 和 SwiftUI 的使用情況進行了分析。
iOS 14.0 包含了 291 個使用 Swift 技術(shù)的二進制文件(PS: 還有一個統(tǒng)計口徑是 351 個,不過這里面有很多程序?qū)?Swift 的使用很初級,所以 Timac 就將其排除了),這個數(shù)量比 iOS 13 多了一倍以上,另外 Swift UI 也在 iOS 14 上被廣泛使用,目前已經(jīng)有 43 個了,其中去年新增的翻譯應(yīng)用是完全使用 Swift 和 SwiftUI 編寫的 App。

iOS 中不同編程語言的發(fā)展
Timac 在其文章《Evolution of the programming languages from iPhone OS 1.0 to iOS 14》[41]給出了很多有意思的結(jié)論。
首先,在 iOS 14 中,總共有 4173 個二進制文件,具體的列表可以參考 iOS 14.0 (18A373) 統(tǒng)計[42],其中:
88% 使用 Objective-C 17% 使用 C++ 8% 使用 Swift 8% 全部使用 C 1% 使用 SwiftUI
下面的圖是 iPhone OS 1.0 到 iOS 14.0 中,各個二進制文件的情況,注意這里的二進制文件可以包含多個語言,所以下表的總數(shù)可能會大于二進制的總數(shù),例如 iOS 14.0 里 44 + 351 + 337 + 708 + 3667 > 4173

從這個視角來看,也可以得出幾個有意思的結(jié)論:
首先,iOS 的每個版本都變得更加復(fù)雜 Swift 的使用在不斷增多,而且至少目前來看,Swift 的使用已經(jīng)超過了 C Objective-C 的增長還是比較穩(wěn)定的 C++ 的增長比較緩慢,或者說相當(dāng)緩慢 C 的增加幾乎沒有變化
如果上面的圖看起來不明顯,我們可以通過這個圖來看趨勢。

當(dāng)然上面的分析是基于數(shù)量來進行的,那么如果我們從體積上進行分析,也就是二進制大小的角度來看,又會得出怎樣的結(jié)論呢?
Timac 在其文章《Comparing iPhone OS 1.0 with iOS 14 using tree maps》[43]里,也給出了一些自己的解讀。
下面是 Timac 根據(jù)相關(guān)的數(shù)據(jù)和腳本繪制出來的 iOS 14 的 tree map(矩形式樹狀結(jié)構(gòu)繪圖法)[44]

其中 Preinstalled Assets 和 Linguistic Data 是與機器學(xué)習(xí)相關(guān)的預(yù)置資源 Health 相關(guān)的內(nèi)容在 iOS 14 的占比不算小,可以看出其重視程度 在 iOS 3.1 之后,提供了 dyld shared cache 技術(shù),紅色區(qū)域就是支持這個特性的 framework。
當(dāng)然,Timac 對這個結(jié)果又進行了更細致的劃分,它的結(jié)果如下

這里我們從二進制的大小,或者代碼量的多少來考察某個系統(tǒng)功能的重要性,我們可以明顯的看到,Apple 的人工智能推動了設(shè)備上的機器學(xué)習(xí),如圖像和視頻中的物體檢測、語言分析、聲音分類和文本識別等技術(shù)。
所以如果未來想繼續(xù)在 iOS 上開發(fā)的話,機器學(xué)習(xí)可能會是一個必備的基礎(chǔ)知識了(PS:如果你開發(fā)過 IntentConfiguration[45] 類型的小組件,我想你大概就明白我在說什么了)。
國內(nèi)外客戶端的使用現(xiàn)狀
數(shù)據(jù)樣本
去年我們分析了國內(nèi)外 App 使用 Swift 的情況,今年我們繼續(xù)走起。
掃描的原理借鑒了《如何檢測 iOS 應(yīng)用程序是否使用 Swift?》[46],這是我和好基友 OneeMe[47] 一起編寫的。
App 排行榜的數(shù)據(jù)來源是 七麥數(shù)據(jù)[48] 提供的,日期為 2021 年 3 月 21 日,國內(nèi)免費應(yīng)用 Top 100 榜單[49] 和 國外免費應(yīng)用 Top 100 榜單[50]
下面是掃描的結(jié)果:
| 序號 | 國內(nèi) App 版本 | 是否使用 Swift | 國外 App 名稱 | 是否使用 Swift |
|---|---|---|---|---|
| 01 | 搜狗輸入法 | NO | YES | |
| 02 | 百度地圖 | YES | Uber | YES |
| 03 | 招商銀行 | YES | Fontise | YES |
| 04 | 優(yōu)酷 | YES | Prime Video | YES |
| 05 | QQ 瀏覽器 | NO | Nike | YES |
| 06 | QQ 音樂 | YES | Dasher | YES |
| 07 | 肯德基 | YES | Capital One | YES |
| 08 | 抖音極速版 | NO | PayPal | YES |
| 09 | 中國建設(shè)銀行 | YES | Twitch | YES |
| 10 | 餓了么 | NO | Telegram | YES |
| 11 | 攜程旅行 | YES | Translate | YES |
| 12 | 閑魚 | NO | TV Remote | YES |
| 13 | 汽車之家 | NO | Life360 | YES |
| 14 | WiFi 萬能鑰匙 | YES | Google Photos | YES |
| 15 | 微視 | YES | Walgreens | YES |
| 16 | 菜鳥 | YES | YES | |
| 17 | 高德地圖 | NO | Vrbo | YES |
| 18 | 知乎 | YES | Chase | YES |
| 19 | 手機營業(yè)廳 | YES | Starbucks | YES |
| 20 | 國家反詐中心 | NO | Pandora | YES |
| 21 | 58 同城 | YES | Google Docs | NO |
| 22 | 淘寶特價版 | NO | Waze | YES |
| 23 | UC 瀏覽器 | NO | Credit Karma | YES |
| 24 | 小紅書 | YES | MM Live | YES |
| 25 | 微博 | NO | YES | |
| 26 | 芒果 TV | NO | Amazon Alexa | YES |
| 27 | 天眼查 | NO | Snapchat | YES |
| 28 | 駕考寶典 | NO | Coinbase | YES |
| 29 | 探探 | YES | Xbox | YES |
| 30 | 個人所得稅 | NO | ClassDojo | YES |
| 31 | 騰訊地圖 | NO | Walmart | YES |
| 32 | SOUL | YES | Google Maps | NO |
| 33 | 美柚 | YES | PicsArt | YES |
| 34 | 輕顏相機 | YES | Chrome | NO |
| 35 | BOSS 直聘 | NO | Hulu | YES |
| 36 | 快手極速版 | YES | Outlook | YES |
| 37 | 作業(yè)幫 | YES | Disney+ | YES |
| 38 | 美圖秀秀 | YES | CapCut | YES |
| 39 | Chrome | NO | Booking.com | YES |
| 40 | 迅雷 | YES | YES | |
| 41 | 貝殼找房 | YES | Zelle | YES |
| 42 | WPS Office | YES | Messenger | NO |
| 43 | 百度網(wǎng)盤 | YES | SHEIN | YES |
| 44 | 美團外賣 | NO | Google Duo | YES |
| 45 | 番茄小說 | NO | Zoom | NO |
| 46 | 中國工商銀行 | YES | Roku | YES |
| 47 | 快手 | YES | Target | YES |
| 48 | 美顏相機 | YES | YES | |
| 49 | 七貓小說 | YES | Grubhub | YES |
| 50 | 滴滴出行 | YES | Postmates | YES |
| 51 | 微信 | YES | PS App | YES |
| 52 | 韓劇 TV | YES | Tinder | YES |
| 53 | 酷狗音樂 | NO | Hopper | YES |
| 54 | 唯品會 | YES | Shazam | YES |
| 55 | 愛奇藝 | YES | Itsme | YES |
| 56 | 嗶哩嗶哩 | YES | Bird | YES |
| 57 | 阿里巴巴 | NO | Uber Eats | YES |
| 58 | 京東金融 | NO | Netflix | YES |
| 59 | 醒圖 | YES | Domino's | YES |
| 60 | 網(wǎng)易云音樂 | YES | Arch-US | YES |
| 61 | 支付寶 | YES | DoorDash | YES |
| 62 | 轉(zhuǎn)轉(zhuǎn) | YES | Fetch Rewards | YES |
| 63 | 叮咚買菜 | YES | CBS Sports | YES |
| 64 | 今日頭條 | YES | Shop | YES |
| 65 | 郵儲銀行 | NO | Spotify | YES |
| 66 | 懂車帝 | YES | TikTok | YES |
| 67 | 夸克 | YES | Lyft | YES |
| 68 | 美團 | NO | SoundCloud | YES |
| 69 | 喜馬拉雅 | YES | WOMBO | YES |
| 70 | 得物(毒) | YES | Zillow | YES |
| 71 | 中國農(nóng)業(yè)銀行 | NO | TextNow | YES |
| 72 | QQ 郵箱 | YES | HBO Max | YES |
| 73 | 釘釘 | NO | Discord | YES |
| 74 | 百度 | YES | Amazon Music | YES |
| 75 | Top Widgets | YES | YES | |
| 76 | Keep | YES | Google Drive | YES |
| 77 | 全民 K 歌 | NO | Airbnb | YES |
| 78 | 哈羅出行 | NO | Tubi | YES |
| 79 | 中國銀行 | YES | Etsy | YES |
| 80 | Days Matter | YES | IRL | YES |
| 81 | 新氧醫(yī)美 | NO | Yelp | YES |
| 82 | 安居客 | YES | Peacock | YES |
| 83 | 企業(yè)微信 | NO | YouTube Music | YES |
| 84 | 中國移動 | YES | Venmo | YES |
| 85 | 手機淘寶 | YES | ESPN | YES |
| 86 | 云閃付 | NO | IRS2Go | NO |
| 87 | NO | Ring | YES | |
| 88 | 交管 12123 | NO | Wish | YES |
| 89 | 拼多多 | YES | ESPN | YES |
| 90 | 京東 | YES | Gmail | YES |
| 91 | 好看視頻 | YES | Amazon | NO |
| 92 | 鐵路 12306 | NO | Robinhood | YES |
| 93 | 大麥 | YES | YouTube | NO |
| 94 | 大眾點評 | NO | YES | |
| 95 | 酷狗鈴聲 | NO | OfferUp | YES |
| 96 | 抖音 | NO | Musi | NO |
| 97 | 剪映 | YES | Widgetsmith | YES |
| 98 | 貨拉拉 | NO | eBay | YES |
| 99 | 騰訊會議 | NO | Chick-fil-A | YES |
| 100 | 騰訊視頻 | NO | Cash App | YES |
在 GitHub 上,其實還有一份統(tǒng)計數(shù)據(jù) Snake List[51],是 Flexih[52] 統(tǒng)計的,除了 Swift 技術(shù)外,還統(tǒng)計了 Weex,React Native,F(xiàn)lutter 等技術(shù)的情況,大家可以作為參考。
2021 年
在國外 Top 100 的免費應(yīng)用中,Swift 混編占比 91%。

在國內(nèi) Top 100 的免費應(yīng)用中,Swift 混編占比 59%。

在之前的文章中,《一次關(guān)于 Swift 在 iOS 生態(tài)圈里的現(xiàn)狀調(diào)研》,我們也整理過一些數(shù)據(jù)。
在 2019 年,國內(nèi)的 Swift 混編應(yīng)用占比為 22%,國外的 Swift 混編應(yīng)用占比 78%, 在 2020 年,國內(nèi)的 Swift 混編應(yīng)用占比為 30.4%,國外的 Swift 混編應(yīng)用占比 82.3%。
如果將近幾年的數(shù)據(jù)連著看,Swift 在國內(nèi)外的變化趨勢如下圖所示:

數(shù)據(jù)解讀
純看數(shù)據(jù)的話:
在國內(nèi),Swift 混編占比達 59%,較去年的 30%,又增長了 29%,整體占比也已經(jīng)過半了! 在國外,Swift 混編占比 91%,較去年的 82.3%,又增長 9%,純 Objective-C 的應(yīng)用也只有個位數(shù)占比了。
那么我們再分析一些數(shù)據(jù)背后的內(nèi)容:
從表面看,除了去年提到的 BAT 之外,今日頭條,快手,滴滴,支付寶,京東,拼多多等一眾應(yīng)用也都在今年完成了 Swift 的初體驗,比較有意思的是美團系的應(yīng)用(美團,大眾點評,美團外賣)目前似乎還沒有任何動靜。 雖然國內(nèi)的 Swift 混編占比變高,但我個人認(rèn)為,這并代表國內(nèi)大部分公司要開始轉(zhuǎn)型 Swift 技術(shù)了,這樣的變化,主要是因為去年 Apple 新增的 Widget 技術(shù)導(dǎo)致的,因為想開發(fā) Widget 必須使用 Swift 相關(guān)的技術(shù),而上面提到的各個應(yīng)用,大多都提供了相應(yīng)的小組件。 如果歷史有可以借鑒的地方,那么 2021 年的國內(nèi) Swift 占比(59%)與 2019 年的國外占比(78%)還算比較接近,至少不像去年(30% 和 82.3%)的差距那么大,那么按照這個趨勢發(fā)展的話,我們是否可以預(yù)言在未來的 3-5 年內(nèi),國內(nèi)的 Swift 混編應(yīng)用占比也將達到 90% 左右?
PS:在寫這篇文檔的時候,發(fā)現(xiàn)微博也支持小組件了,所以估計上面的這個數(shù)據(jù)又得增加 1% 了。
總結(jié)與展望
在做完了今年的調(diào)研后,我們能得出什么結(jié)論呢?
雖然看起來現(xiàn)階段的 Swift 還是在一個積累的過程,但隨著 WidgetKit 這個標(biāo)志性的 SDK 誕生,我相信這個發(fā)展階段會從積累階段慢慢轉(zhuǎn)向發(fā)展期,畢竟現(xiàn)在 ABI 穩(wěn)定了,Module 穩(wěn)定了,對二進制組件的支持也有了,還有 Swift 語言本身的版本變化也逐漸穩(wěn)定了,這些都給與了 Swift 很好的支持。 Swift 的發(fā)展方向絕不只是為了 Apple 生態(tài)體系內(nèi)的那點事兒,這個從社區(qū)的規(guī)劃也好,從 Timac 的那幾篇分析文章也好,我們都可以看出它在多元發(fā)展上的決心,Swift 真的很想破圈。 國內(nèi)的 Swift 發(fā)展被去年的 iOS 14 新特性給盤活了,WidgetKit 功不可沒,雖然還不能給出大部分公司都將轉(zhuǎn)型的結(jié)論,但至少絕大部分互聯(lián)網(wǎng)的頭部公司已經(jīng)兼容了 Swift 的開發(fā),這是一個好的開始,相信在可見的未來,Apple 的轉(zhuǎn)型決心必然會讓國內(nèi)的公司會更加重視這方面工作的重要性。
在最后,我來說說這一年的一些其他見聞:
雖然不久前 Google 歸檔了 Swift for TensorFlow[53] 項目,讓很多人看衰 Swift 在機器學(xué)習(xí)或者人工智能方面的發(fā)展,但其實我覺得是有點沒必要,Swift 在這方面的發(fā)展其實并不依賴 Google,Apple 自己在這方面就很有建樹,如果感興趣應(yīng)該看看 Machine Learning Research at Apple[54] 這個網(wǎng)站,這才代表 Apple 和 Swift 在機器學(xué)習(xí)方面的真實水平。
另外,雖然還是能在某些技術(shù)群里看到 "Swift 無用","Swift 火不了","我們不需要用 Swift 開發(fā)" 的字眼,但這樣的數(shù)量相比于前幾年而言,真的越來越少了。
另外據(jù)我所知,字節(jié)跳動的抖音團隊會在 2021 年的 Q2 季度全部遷移成 Swift 技術(shù)棧,這個遷移不僅是上層的業(yè)務(wù)變動,似乎也包括了底層的基礎(chǔ)庫,這意味著他們在不遠的未來將會統(tǒng)一使用 Swift 進行開發(fā);同時,我也聽說了快手團隊正在大力發(fā)展 Swift 方面的建設(shè)。
雖然這只是國內(nèi)諸多公司的個例,但我相信隨著這些頭部大廠的加入,Swift 成為原生開發(fā)的主流趨勢會在國內(nèi)越來越明顯,當(dāng)然不得不承認(rèn),跨端技術(shù)在國內(nèi)也有著極大的市場份額,所以估計未來作為 iOS 端上的程序員,可能要具備 Objective-C,Swift,JavaScript/TypeScript 和 Flutter 的語言技術(shù)棧。
好了,今年的調(diào)研報告就到此結(jié)束了,我們明年見!
參考文檔
SketchK - 一次關(guān)于 Swift 在 iOS 生態(tài)圈里的現(xiàn)狀調(diào)研 Paul Hudson - Hacking with Swift - What’s new in Swift 5.3?[55] Paul Hudson - Hacking with Swift - What’s new in Swift 5.4?[56] Swift.org forum - On the road to Swift 6[57] TIOBE[58] PYPL[59] GitHut 2.0[60] Apple - Apple Developer Documentation[61] Timac - Comparing iPhone OS 1.0 with iOS 14 using tree maps[62] Timac - Evolution of the programming languages from iPhone OS 1.0 to iOS 14[63] Timac - Apple’s use of Swift and SwiftUI in iOS 14[64] Timac - 如何檢測 iOS 應(yīng)用程序是否使用 Swift? OneeMe - Swift App Analyzer[65] Flexih - Snake List[66] Apple - Machine Learning Research at Apple[67]
參考資料
SE-0276: https://github.com/apple/swift-evolution/blob/master/proposals/0276-multi-pattern-catch-clauses.md
[2]SE-0279: https://github.com/apple/swift-evolution/blob/master/proposals/0279-multiple-trailing-closures.md
[3]SE-0266: https://github.com/apple/swift-evolution/blob/master/proposals/0266-synthesized-comparable-for-enumerations.md
[4]SE-0269: https://github.com/apple/swift-evolution/blob/master/proposals/0269-implicit-self-explicit-capture.md
[5]SE-0281: https://github.com/apple/swift-evolution/blob/master/proposals/0281-main-attribute.md
[6]SE-0267: https://github.com/apple/swift-evolution/blob/master/proposals/0267-where-on-contextually-generic.md
[7]SE-0280: https://github.com/apple/swift-evolution/blob/master/proposals/0280-enum-cases-as-protocol-witnesses.md
[8]SE-0277: https://github.com/apple/swift-evolution/blob/master/proposals/0277-float16.md
[9]SE-0268: https://github.com/apple/swift-evolution/blob/master/proposals/0268-didset-semantics.md
[10]SE-0271: https://github.com/apple/swift-evolution/blob/master/proposals/0271-package-manager-resources.md
[11]SE-0278: https://github.com/apple/swift-evolution/blob/master/proposals/0278-package-manager-localized-resources.md
[12]SE-0272: https://github.com/apple/swift-evolution/blob/master/proposals/0272-swiftpm-binary-dependencies.md
[13]SE-0273: https://github.com/apple/swift-evolution/blob/master/proposals/0273-swiftpm-conditional-target-dependencies.md
[14]SE-0287: https://github.com/apple/swift-evolution/blob/main/proposals/0287-implicit-member-chains.md
[15]SE-0284: https://github.com/apple/swift-evolution/blob/main/proposals/0284-multiple-variadic-parameters.md
[16]SE-0289: https://github.com/apple/swift-evolution/blob/main/proposals/0289-result-builders.md
[17]SR-10069: https://bugs.swift.org/browse/SR-10069
[18]SE-0294: https://github.com/apple/swift-evolution/blob/main/proposals/0294-package-executable-targets.md
[19]SE-0281: https://github.com/apple/swift-evolution/blob/master/proposals/0281-main-attribute.md
[20]Ted Kremenek: https://twitter.com/tkremenek?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor
[21]swift.org forum: https://forums.swift.org/categories
[22]On the road to Swift 6: https://forums.swift.org/t/on-the-road-to-swift-6/32862
[23]Saleem Abdulrasool: https://github.com/compnerd
[24]Tom Doron: https://github.com/tomerd
[25]TIOBE: https://www.tiobe.com/tiobe-index/
[26]PYPL: https://pypl.github.io/PYPL.html
[27]GitHut 2.0: https://madnight.github.io/githut/#/pull_requests/2021/1
[28]Nordic Semiconductor: https://www.nordicsemi.com/
[29]GitHub 頁面: https://github.com/NordicSemiconductor
[30]Swift 版本: https://github.com/NordicSemiconductor/IOS-Pods-DFU-Library
[31]Java 版本: https://github.com/NordicSemiconductor/Android-DFU-Library
[32]RoadMap: https://github.com/firebase/firebase-ios-sdk/blob/master/ROADMAP.md
[33]Apple Developer Documentation: https://developer.apple.com/documentation/technologies
[34]System: https://developer.apple.com/documentation/System
[35]WidgetKit: https://developer.apple.com/documentation/WidgetKit
[36]SCSIControllerDriverKit: https://developer.apple.com/documentation/scsicontrollerdriverkit
[37]Professional Video Applications: https://developer.apple.com/documentation/professional_video_applications
[38]IOUSBHost: https://developer.apple.com/documentation/iousbhost
[39]Timac: https://github.com/Timac
[40]Apple’s use of Swift and SwiftUI in iOS 14: https://blog.timac.org/2020/0927-state-of-swift-ios14/
[41]Evolution of the programming languages from iPhone OS 1.0 to iOS 14: https://blog.timac.org/2020/1019-evolution-of-the-programming-languages-from-iphone-os-to-ios-14/
[42]iOS 14.0 (18A373) 統(tǒng)計: https://blog.timac.org/2020/1019-evolution-of-the-programming-languages-from-iphone-os-to-ios-14/iOS14.txt
[43]Comparing iPhone OS 1.0 with iOS 14 using tree maps: https://blog.timac.org/2020/1122-comparing-iphone-os-with-ios-14-using-tree-maps/
[44]矩形式樹狀結(jié)構(gòu)繪圖法: https://www.wikiwand.com/zh/%E7%9F%A9%E5%BD%A2%E5%BC%8F%E6%A0%91%E7%8A%B6%E7%BB%93%E6%9E%84%E7%BB%98%E5%9B%BE%E6%B3%95
[45]IntentConfiguration: https://developer.apple.com/documentation/widgetkit/intentconfiguration
[46]如何檢測 iOS 應(yīng)用程序是否使用 Swift?: https://mp.weixin.qq.com/s/vF_oOWFLimlyRi4mZpgpeQ
[47]OneeMe: https://github.com/OneeMe
[48]七麥數(shù)據(jù): https://www.qimai.cn/
[49]國內(nèi)免費應(yīng)用 Top 100 榜單: https://www.qimai.cn/rank/index/brand/free/device/iphone/country/cn/genre/5000/date/2021-03-21
[50]國外免費應(yīng)用 Top 100 榜單: https://www.qimai.cn/rank/index/brand/free/device/iphone/country/us/genre/5000/date/2021-03-21
[51]Snake List: https://github.com/flexih/SnakeList
[52]Flexih: https://github.com/flexih
[53]Swift for TensorFlow: https://github.com/tensorflow/swift
[54]Machine Learning Research at Apple: https://machinelearning.apple.com/
[55]Paul Hudson - Hacking with Swift - What’s new in Swift 5.3?: https://www.hackingwithswift.com/articles/218/whats-new-in-swift-5-3
[56]Paul Hudson - Hacking with Swift - What’s new in Swift 5.4?: https://www.hackingwithswift.com/articles/228/whats-new-in-swift-5-4
[57]Swift.org forum - On the road to Swift 6: https://forums.swift.org/t/on-the-road-to-swift-6/32862
[58]TIOBE: https://www.tiobe.com/tiobe-index/
[59]PYPL: https://pypl.github.io/PYPL.html
[60]GitHut 2.0: https://madnight.github.io/githut/#/pull_requests/2021/1
[61]Apple - Apple Developer Documentation: https://developer.apple.com/documentation/technologies
[62]Timac - Comparing iPhone OS 1.0 with iOS 14 using tree maps: https://blog.timac.org/2020/1122-comparing-iphone-os-with-ios-14-using-tree-maps/
[63]Timac - Evolution of the programming languages from iPhone OS 1.0 to iOS 14: https://blog.timac.org/2020/1019-evolution-of-the-programming-languages-from-iphone-os-to-ios-14/
[64]Timac - Apple’s use of Swift and SwiftUI in iOS 14: https://blog.timac.org/2020/0927-state-of-swift-ios14/
[65]OneeMe - Swift App Analyzer: https://github.com/ZRTransmitter/SwiftAppAnalyzer
[66]Flexih - Snake List: https://github.com/flexih/SnakeList
[67]Apple - Machine Learning Research at Apple: https://machinelearning.apple.com/
