iOS 15 中苹果使用 Swift 和 SwiftUI 情况统计

知识小集

共 7847字,需浏览 16分钟

 · 2022-02-20

iOS 15 于 2021 年 9 月正式发布。在本文中,猫科动物分析了 iOS 15 的内置应用程序。iOS 15 中有多少个二进制文件?使用哪些编程语言来开发这些应用程序?有多少应用程序是用 Swift 编写的?Apple 是否为使用 SwiftUI 来开发某些内置应用程序呢?

方法

创建本文的方法和工具已在作者在一些帖子中详细介绍过。如果您有兴趣,请参考:

  • 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/

  • Apple’s use of Swift in iOS 10.1 and macOS 10.12. https://blog.timac.org/2016/1101-apples-use-of-swift-in-ios-10-1-and-macos-10-12/

在进入细节之前,先澄清几点:

  • 作者只分析了通常所说的“iOS”,即内核之上的所有内容。不包括 XNU 内核和低级固件(SecureROM、基带……)。另一方面,作者计算了位于 dyld 共享缓存中的框架,这是 iPhone OS 3.1 中引入的一种机制。

  • 请记住,开发人员可以混合使用不同的编程语言来创建一个二进制文件。一个例子是作者开发的应用程序 Clatters,作者在其中使用 Swift、SwiftUI、Objective-C 和 C,这是用于解决每个特定问题的最合适的编程语言。在本文中,包含单行 Swift 代码的应用程序将被视为使用 Swift。

  • 您会看到提及 Objective-C 和 C++,但您可能会注意到没有 Objective-C++。这里使用的方法不能真正检测使用 Objective-C++ 构建的二进制文件。此类二进制文件被视为同时使用了 Objective-C 和 C++。

  • 最后,您应该对此分析持保留态度。虽然作者相信整体情况是准确的,但作者的方法有一些局限性,因为无法访问 iOS 源代码并且依赖于不精确的编译工件。

iOS 15 中的 Swift 和 SwiftUI

可能最有趣的数字之一是衡量 Apple 在 iOS 15 中对 Swift 和 SwiftUI 的使用。所以让我们从这个开始吧!

iOS 15 包含 114 个使用 SwiftUI 的二进制文件,几乎是 iOS 14 数量的 3 倍。同样,包含至少一行 Swift 代码的二进制文件数量在 iOS 14 和 iOS 15 之间翻了一番:

如您所见,Apple 继续在其内置应用程序中逐步采用 Swift。2021 年也是采用 SwiftUI 的大年。现在,一些广泛使用的应用似乎在 iOS 15 中使用了 SwiftUI:

  • Books

  • Maps

  • Notes

  • Weather

  • Tips

  • Music

  • Podcasts

  • FaceTime? (InCallService)

  • AppSettings?

而在此之前使用 SwiftUI 的有 5 个应用:

  • Translate

  • Shortcuts

  • Phone

  • AirPods Connect Pop-up? (SharingViewService)

  • Lock Screen? (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

二进制文件总数

我们可以在 iOS 15 中枚举多少个二进制文件?iOS 15 由 4738 个二进制文件组成,高于 iOS 14 中的 4173 个。有 565 个新的二进制文件。


编程语言的演变

通过分析从 iPhone OS 1.0 到 iOS 15 的所有主要 iOS 版本,我们可以看到 iOS 使用的编程语言的演变。再次请注意,单个二进制文件可以计算多次,因此该图中二进制文件的总和大于二进制文件的总数:

在 iOS 15 中的所有二进制文件中:

  • 89% 正在使用 Objective-C

  • 17% 使用 C++

  • 13% 正在使用 Swift

  • 8% 完全用 C 编写

  • 2% 正在使用 SwiftUI

我们可以在这里了解到什么呢?

  • Objective-C 仍然是 iOS 的核心,不会很快消失。

  • Apple 对 Swift 的使用比以往任何时候都快。去年 Swift 超过了 C。今年 Swift 越来越接近 C++。

  • SwiftUI 去年几乎不引人注目,但今年苹果似乎更广泛地采用了它,即使在旗舰应用程序中也是如此。

  • C++ 和 C 仍然扮演着重要的角色。这些语言通常由与音频、视频、电话、Web 和其他低级框架相关的二进制文件使用。

这是每种编程语言演变的另一种图示:


原始数据

如果您想进行更深入的分析,您可以在下面下载我为从 iPhone OS 1.0 到 iOS 15.0 的所有主要 iOS 版本生成的原始数据。



结论

尽管我们无法访问 iOS 源代码,但我们可以确定用于在 iOS 中创建内置应用程序的编程语言,并且我们可以衡量这些语言从 iPhone OS 1.0 到 iOS 15 的演变。

正如我们所见,Apple 继续在自己的应用程序中采用 Swift:使用 Swift 的二进制文件数量在 iOS 14 和 iOS 15 之间翻了一番。现在大约 13% 的二进制文件使用 Swift。此外,SwiftUI 的采用从今年开始真正开始,现在有几个旗舰应用程序现在使用 SwiftUI。

如前所述,这种方法显然有一些限制,虽然作者相信整体情况是准确的,但不能保证结果完全准确。

浏览 106
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报