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