蘋果在 iOS 15 中使用了 Swift 和 SwiftUI
前言
iOS 15 在幾個月前的 2021 年 9 月發(fā)布。在本文中,我分析了 iOS 15 的內置應用程序 :
- iOS 15 中有多少個二進制文件?
 - 開發(fā)這些應用程序使用了哪種編程語言?
 - 使用 Swift 編寫了多少個應用程序?
 - 蘋果是否在某些內置應用程序采用了 SwiftUI?
 
方法
創(chuàng)建本文的方法和工具在我之前的帖子中進行了詳細說明。如果您感興趣,請參考:
- 編程語言從 iPhone OS 1.0 到 iOS 14 的演變[1]
 - 蘋果在 iOS 10.1 和 macOS 10.12 中使用了Swift[2]
 
在深入討論細節(jié)之前,讓我澄清幾點:
- 我只分析了通常意義上的 'iOS',即內核上方的所有內容。不包括 XNU 內核和低級固件(SecureROM、基帶、...)。另一方面,我計算了位于 iPhone OS 3.1 中引入的 dyld 共享緩存中的框架。
 - 請記住,開發(fā)人員可以混合不同的編程語言來創(chuàng)建一個二進制文件。一個例子是我開發(fā)的應用程序 Clutters[3],我在那里使用 Swift、SwiftUI、Objective-C 和 C,使用最合適的編程語言來解決特定Dev問題。在本文中,包含一行 Swift 代碼的應用程序將被視為使用了 Swift 。
 - 您將看到 Objective-C 和 C++ 被提及,但您可能會注意到 Objective-C++ 的缺失。這里使用的方法無法真正檢測到使用 Objective-C++ 構建的二進制文件。此類二進制文件被視為同時使用 Objective-C 和 C++ 。
 - 最后,你應該對這個分析持保留態(tài)度。雖然我相信總體情況是準確的,但我的方法有一些局限性,因為我無法訪問 iOS 源代碼,并且依賴于不精確的編譯工件。
 
iOS 15 中的 Swift 和 SwiftUI
也許最有趣的數(shù)字之一是統(tǒng)計蘋果在iOS 15中使用 Swift 和 SwiftUI 的情況。所以讓我們從這個開始吧!
iOS 15 包含了 114 個使用 SwiftUI 的二進制文件,幾乎是 iOS 14 的 3 倍。同樣,在iOS 14 和 iOS 15 之間,包含至少一行 Swift 代碼的二進制文件數(shù)量翻了一番:
如您所見,蘋果繼續(xù)逐步采用 Swift 開發(fā)自己的內置應用程序。今年也是采用 SwiftUI 的重要一年。一些廣泛使用的應用程序現(xiàn)在似乎在 iOS 15 中使用 SwiftUI:
- 圖書
 - 地圖
 - 備忘錄
 - 天氣
 - 提示
 - 音樂
 - 播客
 - FaceTime ?(InCallService)
 - 設置?
 
這些新應用程序加上之前使用 SwiftUI 的 5 個應用程序:
- 翻譯
 - 快捷指令
 - 電話
 - AirPods 連接彈出窗口?(SharingViewService)
 - 鎖屏?(SleepLockScreen)
 
使用 SwiftUI 的其他二進制文件大多是小部件或新框架。以下是使用 SwiftUI 的 114 個二進制文件的完整列表:
- /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
 
二進制文件總數(shù)
我們可以在 iOS 15 中找到多少個二進制文件?
iOS 15 由 4738 個二進制文件組成,高于 iOS 14 中的 4173 個。有 565 個新的二進制文件。
二進制文件數(shù)量
編程語言的演變
通過分析從 iPhone OS 1.0 到 iOS 15 的所有主要 iOS 版本,我們可以看到 iOS 使用的編程語言的演變。請再次注意,一個二進制文件可以被多次計算,所以這個圖中的二進制數(shù)據(jù)的總和大于二進制總數(shù):
使用各種編程語言的二進制文件數(shù)量
在 iOS 15 的所有二進制文件中:
- 89% 使用了 Objective-C
 - 17% 使用了 C++
 - 13% 使用了 Swift
 - 8% 完全用 C
 - 2% 使用了 SwiftUI
 
我們從這里可以了解到什么?
- Objective-C 仍然是 iOS 的核心,不會很快消失。
 - 蘋果對 Swift 的使用進展得比以往任何時候都快。去年,Swift 超過了C。今年,Swift 越來越接近 C++。
 - SwiftUI 去年幾乎不引人注目,但今年蘋果似乎更廣泛地采用了它,即使在旗艦應用程序中也是如此。
 - C++ 和 C 仍然發(fā)揮著重要作用。這些語言通常用于與音頻、視頻、電話、網(wǎng)絡和其他底層框架相關的二進制文件。
 
以下是各種編程語言演變的另一個表示:
各種編程語言演變
原始數(shù)據(jù)
如果您想進行更深入的分析,您可以在我為從iPhone OS 1.0 到 iOS 15.0 的所有主要版本生成的原始數(shù)據(jù)下方下載。
結論
即使我們無法訪問 iOS 源代碼,我們也可以確定用于在 iOS 中創(chuàng)建內置應用程序的編程語言,并可以衡量這些語言從 iPhone OS 1.0 到iOS 15的演變。
正如我們所看到的,蘋果繼續(xù)將 Swift 用于自己的應用程序:在 iOS 14 和 iOS 15 之間,使用 Swift 的二進制文件數(shù)量翻了一番。大約13% 的二進制文件現(xiàn)在使用了 Swift。此外, Swift UI 的采用真正開始于今年,現(xiàn)在有幾個旗艦應用程序使用了 SwiftUI 。
如前面所述,這種方法顯然有一些局限性,雖然我認為整體情況是準確的,但我不能保證結果是完全準確的。如果您認為我遺漏了什么,請在推特上聯(lián)系我。
譯自:Apple’s use of Swift and SwiftUI in iOS 15
參考資料
[1]編程語言從 iPhone OS 1.0 到 iOS 14 的演變:
https://blog.timac.org/2020/1019-evolution-of-the-programming-languages-from-iphone-os-to-ios-14/
[2]蘋果在 iOS 10.1 和 macOS 10.12 中使用了Swift:
https://blog.timac.org/2016/1101-apples-use-of-swift-in-ios-10-1-and-macos-10-12/
[3]Clutters:
https://apps.apple.com/app/clatters/id1480930237




















 
 
 







 
 
 
 