[譯] 蘋果在 iOS 15 中使用了 Swift 和 SwiftUI

蘋果在 iOS 15 中使用了 Swift 和 SwiftUI

iOS 15 在幾個(gè)月前的 2021 年 9 月發(fā)布。在本文中,我分析了 iOS 15 的內(nèi)置應(yīng)用程序 :

  • iOS 15 中有多少個(gè)二進(jìn)制文件芹啥?
  • 開發(fā)這些應(yīng)用程序使用了哪種編程語言?
  • 使用 Swift 編寫了多少個(gè)應(yīng)用程序捺疼?
  • 蘋果是否在某些內(nèi)置應(yīng)用程序采用了 SwiftUI?

方法

創(chuàng)建本文的方法和工具在我之前的帖子中進(jìn)行了詳細(xì)說明。如果您感興趣惕蹄,請(qǐng)參考:

在深入討論細(xì)節(jié)之前,讓我澄清幾點(diǎn):

  • 我只分析了通常意義上的 'iOS'泪蔫,即內(nèi)核上方的所有內(nèi)容。不包括 XNU 內(nèi)核和低級(jí)固件(SecureROM餐曹、基帶、...)卿吐。另一方面嗡官,我計(jì)算了位于 iPhone OS 3.1 中引入的 dyld 共享緩存中的框架磺樱。

  • 請(qǐng)記住,開發(fā)人員可以混合不同的編程語言來創(chuàng)建一個(gè)二進(jìn)制文件块差。一個(gè)例子是我開發(fā)的應(yīng)用程序 Clutters,我在那里使用 Swift、SwiftUI泽示、Objective-C 和 C,使用最合適的編程語言來解決特定Dev問題族扰。在本文中怒竿,包含一行 Swift 代碼的應(yīng)用程序?qū)⒈灰暈槭褂昧?Swift 。

  • 您將看到 Objective-C 和 C++ 被提及朦肘,但您可能會(huì)注意到 Objective-C++ 的缺失弟断。這里使用的方法無法真正檢測(cè)到使用 Objective-C++ 構(gòu)建的二進(jìn)制文件苍匆。此類二進(jìn)制文件被視為同時(shí)使用 Objective-C 和 C++ 叔汁。

  • 最后,你應(yīng)該對(duì)這個(gè)分析持保留態(tài)度瑰钮。雖然我相信總體情況是準(zhǔn)確的因苹,但我的方法有一些局限性凶杖,因?yàn)槲覠o法訪問 iOS 源代碼奈梳,并且依賴于不精確的編譯工件漆撞。

iOS 15 中的 Swift 和 SwiftUI

也許最有趣的數(shù)字之一是統(tǒng)計(jì)蘋果在iOS 15中使用 Swift 和 SwiftUI 的情況悍汛。所以讓我們從這個(gè)開始吧奋献!

iOS 15 包含了 114 個(gè)使用 SwiftUI 的二進(jìn)制文件糖埋,幾乎是 iOS 14 的 3 倍杭攻。同樣,在iOS 14 和 iOS 15 之間,包含至少一行 Swift 代碼的二進(jìn)制文件數(shù)量翻了一番:

如您所見印蔬,蘋果繼續(xù)逐步采用 Swift 開發(fā)自己的內(nèi)置應(yīng)用程序例驹。今年也是采用 SwiftUI 的重要一年。一些廣泛使用的應(yīng)用程序現(xiàn)在似乎在 iOS 15 中使用 SwiftUI:

  • 圖書
  • 地圖
  • 備忘錄
  • 天氣
  • 提示
  • 音樂
  • 播客
  • FaceTime ?(InCallService
  • 設(shè)置?

這些新應(yīng)用程序加上之前使用 SwiftUI 的 5 個(gè)應(yīng)用程序:

  • 翻譯
  • 快捷指令
  • 電話
  • AirPods 連接彈出窗口惊楼?(SharingViewService
  • 鎖屏?(SleepLockScreen

使用 SwiftUI 的其他二進(jìn)制文件大多是小部件或新框架。以下是使用 SwiftUI 的 114 個(gè)二進(jìn)制文件的完整列表:

/Applications/AppSettings.app/AppSettings
/Applications/AppStore.app/PlugIns/AppStoreWidgetsExtension.appex/AppStoreWidgetsExtension
/Applications/FamilyControlsAuthenticationUI.app/FamilyControlsAuthenticationUI
/Applications/FindMy.app/PlugIns/FindMyWidgetIntentsItems.appex/FindMyWidgetIntentsItems
/Applications/FindMy.app/PlugIns/FindMyWidgetIntentsPeople.appex/FindMyWidgetIntentsPeople
/Applications/FindMy.app/PlugIns/FindMyWidgetItems.appex/FindMyWidgetItems
/Applications/FindMy.app/PlugIns/FindMyWidgetPeople.appex/FindMyWidgetPeople
/Applications/FTMInternal-4.app/FTMInternal-4
/Applications/GameCenterWidgets.app/PlugIns/GCWidgets.appex/GCWidgets
/Applications/InCallService.app/InCallService
/Applications/PeopleViewService.app/PlugIns/PeopleWidget_iOSExtension.appex/PeopleWidget_iOSExtension
/Applications/SleepWidgetContainer.app/PlugIns/SleepWidgetExtension.appex/SleepWidgetExtension
/private/var/staged_system_apps/Books.app/Books
/private/var/staged_system_apps/Maps.app/Maps
/private/var/staged_system_apps/MobileMail.app/PlugIns/MailWidgetExtension.appex/MailWidgetExtension
/private/var/staged_system_apps/MobileNotes.app/MobileNotes
/private/var/staged_system_apps/MobileNotes.app/PlugIns/com.apple.mobilenotes.SharingExtension.appex/com.apple.mobilenotes.SharingExtension
/private/var/staged_system_apps/Music.app/Frameworks/MusicApplication.framework/MusicApplication
/private/var/staged_system_apps/Podcasts.app/Frameworks/PodcastsStoreUI.framework/PodcastsStoreUI
/private/var/staged_system_apps/Shortcuts.app/PlugIns/QuickLookExtension.appex/QuickLookExtension
/private/var/staged_system_apps/Tips.app/Tips
/private/var/staged_system_apps/Weather.app/Weather
/System/Library/Assistant/UIPlugins/SiriFindMyUIPlugin.siriUIBundle/SiriFindMyUIPlugin
/System/Library/Frameworks/_CoreLocationUI_SwiftUI.framework/_CoreLocationUI_SwiftUI
/System/Library/Frameworks/_MusicKit_SwiftUI.framework/_MusicKit_SwiftUI
/System/Library/Frameworks/FamilyControls.framework/FamilyControls
/System/Library/Frameworks/FamilyControls.framework/PlugIns/ActivityPickerExtension.appex/ActivityPickerExtension
/System/Library/Health/FeedItemPlugins/Heart.healthplugin/Heart
/System/Library/Health/FeedItemPlugins/Highlights.healthplugin/Highlights
/System/Library/Health/FeedItemPlugins/MenstrualCyclesAppPlugin.healthplugin/MenstrualCyclesAppPlugin
/System/Library/Health/FeedItemPlugins/SleepHealthAppPlugin.healthplugin/SleepHealthAppPlugin
/System/Library/Health/FeedItemPlugins/Summaries.healthplugin/Summaries
/System/Library/PreferenceBundles/BatteryUsageUI.bundle/BatteryUsageUI
/System/Library/PreferenceBundles/CoreRoutineSettings.bundle/CoreRoutineSettings
/System/Library/PreferenceBundles/FocusSettings.bundle/FocusSettings
/System/Library/PrivateFrameworks/AccessibilitySharedUISupport.framework/AccessibilitySharedUISupport
/System/Library/PrivateFrameworks/ActionKitUI.framework/ActionKitUI
/System/Library/PrivateFrameworks/CommandAndControlUI.framework/CommandAndControlUI
/System/Library/PrivateFrameworks/CoreChartSwift.framework/CoreChartSwift
/System/Library/PrivateFrameworks/CoreSuggestionsUI.framework/CoreSuggestionsUI
/System/Library/PrivateFrameworks/FocusSettingsUI.framework/FocusSettingsUI
/System/Library/PrivateFrameworks/FocusUI.framework/FocusUI
/System/Library/PrivateFrameworks/HealthExperienceUI.framework/HealthExperienceUI
/System/Library/PrivateFrameworks/HealthRecordsUI.framework/HealthRecordsUI
/System/Library/PrivateFrameworks/HealthVisualization.framework/HealthVisualization
/System/Library/PrivateFrameworks/HearingUI.framework/HearingUI
/System/Library/PrivateFrameworks/MediaFoundation.framework/MediaFoundation
/System/Library/PrivateFrameworks/MessagesSupport.framework/MessagesSupport
/System/Library/PrivateFrameworks/MLKit.framework/MLKit
/System/Library/PrivateFrameworks/MLKit.framework/PlugIns/com.apple.MLKit.MLModelPreview.appex/com.apple.MLKit.MLModelPreview
/System/Library/PrivateFrameworks/MLKit.framework/PlugIns/com.apple.MLKit.MLPackagePreview.appex/com.apple.MLKit.MLPackagePreview
/System/Library/PrivateFrameworks/NotesUI.framework/NotesUI
/System/Library/PrivateFrameworks/PaymentUI.framework/PaymentUI
/System/Library/PrivateFrameworks/PeopleUI.framework/PeopleUI
/System/Library/PrivateFrameworks/PreviewsInjection.framework/PreviewsInjection
/System/Library/PrivateFrameworks/PreviewsMessaging.framework/PreviewsMessaging
/System/Library/PrivateFrameworks/ScreenTimeUICore.framework/ScreenTimeUICore
/System/Library/PrivateFrameworks/SleepHealthUI.framework/SleepHealthUI
/System/Library/PrivateFrameworks/SleepWidgetUI.framework/SleepWidgetUI
/System/Library/PrivateFrameworks/SnippetUI.framework/SnippetUI
/System/Library/PrivateFrameworks/TipKit.framework/TipKit
/System/Library/PrivateFrameworks/TranslationUI.framework/TranslationUI
/System/Library/PrivateFrameworks/TranslationUIServices.framework/PlugIns/TranslationUIService.appex/TranslationUIService
/System/Library/PrivateFrameworks/VideosUI.framework/VideosUI
/System/Library/PrivateFrameworks/WeatherUI.framework/WeatherUI
/System/Library/PrivateFrameworks/WorkflowUI.framework/WorkflowUI
/System/Library/Snippets/UIPlugins/AudioUIPlugin.bundle/AudioUIPlugin
/System/Library/Snippets/UIPlugins/SiriVideoUIPlugin.bundle/SiriVideoUIPlugin
/System/Library/Snippets/UIPlugins/SystemPlugin.bundle/SystemPlugin
/usr/lib/swift/libswiftExtensionKit.dylib
/usr/libexec/proximitycontrold

二進(jìn)制文件總數(shù)

我們可以在 iOS 15 中找到多少個(gè)二進(jìn)制文件涕蜂?

iOS 15 由 4738 個(gè)二進(jìn)制文件組成,高于 iOS 14 中的 4173 個(gè)。有 565 個(gè)新的二進(jìn)制文件源梭。

二進(jìn)制文件數(shù)量

編程語言的演變

通過分析從 iPhone OS 1.0 到 iOS 15 的所有主要 iOS 版本废麻,我們可以看到 iOS 使用的編程語言的演變。請(qǐng)?jiān)俅巫⒁饬耍粋€(gè)二進(jìn)制文件可以被多次計(jì)算搏恤,所以這個(gè)圖中的二進(jìn)制數(shù)據(jù)的總和大于二進(jìn)制總數(shù):

使用各種編程語言的二進(jìn)制文件數(shù)量

在 iOS 15 的所有二進(jìn)制文件中:

  • 89% 使用了 Objective-C
  • 17% 使用了 C++
  • 13% 使用了 Swift
  • 8% 完全用 C
  • 2% 使用了 SwiftUI

我們從這里可以了解到什么熟空?

  • Objective-C 仍然是 iOS 的核心,不會(huì)很快消失搞莺。
  • 蘋果對(duì) Swift 的使用進(jìn)展得比以往任何時(shí)候都快息罗。去年,Swift 超過了C才沧。今年迈喉,Swift 越來越接近 C++。
  • SwiftUI 去年幾乎不引人注目温圆,但今年蘋果似乎更廣泛地采用了它挨摸,即使在旗艦應(yīng)用程序中也是如此。
  • C++ 和 C 仍然發(fā)揮著重要作用岁歉。這些語言通常用于與音頻得运、視頻、電話锅移、網(wǎng)絡(luò)和其他底層框架相關(guān)的二進(jìn)制文件熔掺。

以下是各種編程語言演變的另一個(gè)表示:

各種編程語言演變

原始數(shù)據(jù)

如果您想進(jìn)行更深入的分析,您可以在我為從iPhone OS 1.0 到 iOS 15.0 的所有主要版本生成的原始數(shù)據(jù)下方下載非剃。

版本 設(shè)備 原始數(shù)據(jù)
iOS 15.0 (19A346) iPhone 13 Pro iOS15.txt
iOS 14.0 (18A373) iPhone X iOS14.txt
iOS 13.1 (17A844) iPhone X iOS13.txt
iOS 12.0 (16A366) iPhone X iOS12.txt
iOS 11.1 (15B93) iPhone X iOS11.txt
iOS 10.1 (14B72) iPhone 5s iOS10.txt
iOS 9.0 (13A344) iPhone 5s iOS9.txt
iOS 8.0 (12A365) iPhone 5s iOS8.txt
iOS 7.0.1 (11A470a) iPhone 5s iOS7.txt
iOS 6.0 (10A403) iPhone 3GS iOS6.txt
iOS 5.0 (9A334) iPhone 3GS iOS5.txt
iOS 4.0 (8A293) iPhone 3GS iOS4.txt
iPhone OS 3.0 (7A341) iPhone 3GS iOS3.txt
iPhone OS 2.0 (5A347) iPhone 2G iOS2.txt
iPhone OS 1.0 (1A543a) iPhone 2G iOS1.txt

結(jié)論

即使我們無法訪問 iOS 源代碼置逻,我們也可以確定用于在 iOS 中創(chuàng)建內(nèi)置應(yīng)用程序的編程語言,并可以衡量這些語言從 iPhone OS 1.0 到iOS 15的演變备绽。

正如我們所看到的券坞,蘋果繼續(xù)將 Swift 用于自己的應(yīng)用程序:在 iOS 14 和 iOS 15 之間鬓催,使用 Swift 的二進(jìn)制文件數(shù)量翻了一番。大約13% 的二進(jìn)制文件現(xiàn)在使用了 Swift报慕。此外深浮, Swift UI 的采用真正開始于今年压怠,現(xiàn)在有幾個(gè)旗艦應(yīng)用程序使用了 SwiftUI 眠冈。

如前面所述,這種方法顯然有一些局限性菌瘫,雖然我認(rèn)為整體情況是準(zhǔn)確的蜗顽,但我不能保證結(jié)果是完全準(zhǔn)確的。如果您認(rèn)為我遺漏了什么雨让,請(qǐng)在推特上聯(lián)系我雇盖。

譯自: Apple’s use of Swift and SwiftUI in iOS 15

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市栖忠,隨后出現(xiàn)的幾起案子崔挖,更是在濱河造成了極大的恐慌,老刑警劉巖庵寞,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狸相,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡捐川,警方通過查閱死者的電腦和手機(jī)脓鹃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來古沥,“玉大人瘸右,你說我怎么就攤上這事⊙页荩” “怎么了太颤?”我有些...
    開封第一講書人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)盹沈。 經(jīng)常有香客問我龄章,道長(zhǎng),這世上最難降的妖魔是什么襟诸? 我笑而不...
    開封第一講書人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任瓦堵,我火速辦了婚禮,結(jié)果婚禮上歌亲,老公的妹妹穿的比我還像新娘菇用。我一直安慰自己,他們只是感情好陷揪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開白布惋鸥。 她就那樣靜靜地躺著杂穷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卦绣。 梳的紋絲不亂的頭發(fā)上滤港,一...
    開封第一講書人閱讀 51,245評(píng)論 1 299
  • 那天廊蜒,我揣著相機(jī)與錄音,去河邊找鬼溅漾。 笑死山叮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的添履。 我是一名探鬼主播屁倔,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼暮胧!你這毒婦竟也來了锐借?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤往衷,失蹤者是張志新(化名)和其女友劉穎钞翔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炼绘,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嗅战,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了俺亮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驮捍。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖脚曾,靈堂內(nèi)的尸體忽然破棺而出东且,到底是詐尸還是另有隱情,我是刑警寧澤本讥,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布珊泳,位于F島的核電站,受9級(jí)特大地震影響拷沸,放射性物質(zhì)發(fā)生泄漏色查。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一撞芍、第九天 我趴在偏房一處隱蔽的房頂上張望秧了。 院中可真熱鬧,春花似錦序无、人聲如沸验毡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晶通。三九已至璃氢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狮辽,已是汗流浹背一也。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留隘竭,地道東北人塘秦。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓讼渊,卻偏偏與公主長(zhǎng)得像动看,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子爪幻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容