[译] 苹果在 iOS 15 中使用了 Swift 和 SwiftUI

2021-12-24 15:06:09 浏览数 (1)

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

iOS 15 在几个月前的 2021 年 9 月发布。在本文中,我分析了 iOS 15 的内置应用程序 :

  • iOS 15 中有多少个二进制文件?
  • 开发这些应用程序使用了哪种编程语言?
  • 使用 Swift 编写了多少个应用程序?
  • 苹果是否在某些内置应用程序采用了 SwiftUI?

方法

创建本文的方法和工具在我之前的帖子中进行了详细说明。如果您感兴趣,请参考:

  • 编程语言从 iPhone OS 1.0 到 iOS 14 的演变
  • 苹果在 iOS 10.1 和 macOS 10.12 中使用了Swift

在深入讨论细节之前,让我澄清几点:

  • 我只分析了通常意义上的 'iOS',即内核上方的所有内容。不包括 XNU 内核和低级固件(SecureROM、基带、...)。另一方面,我计算了位于 iPhone OS 3.1 中引入的 dyld 共享缓存中的框架。
  • 请记住,开发人员可以混合不同的编程语言来创建一个二进制文件。一个例子是我开发的应用程序 Clutters,我在那里使用 Swift、SwiftUI、Objective-C 和 C,使用最合适的编程语言来解决特定Dev问题。在本文中,包含一行 Swift 代码的应用程序将被视为使用了 Swift 。
  • 您将看到 Objective-C 和 C 被提及,但您可能会注意到 Objective-C 的缺失。这里使用的方法无法真正检测到使用 Objective-C 构建的二进制文件。此类二进制文件被视为同时使用 Objective-C 和 C 。
  • 最后,你应该对这个分析持保留态度。虽然我相信总体情况是准确的,但我的方法有一些局限性,因为我无法访问 iOS 源代码,并且依赖于不精确的编译工件。

iOS 15 中的 Swift 和 SwiftUI

也许最有趣的数字之一是统计苹果在iOS 15中使用 Swift 和 SwiftUI 的情况。所以让我们从这个开始吧!

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

如您所见,苹果继续逐步采用 Swift 开发自己的内置应用程序。今年也是采用 SwiftUI 的重要一年。一些广泛使用的应用程序现在似乎在 iOS 15 中使用 SwiftUI:

  • 图书
  • 地图
  • 备忘录
  • 天气
  • 提示
  • 音乐
  • 播客
  • FaceTime ?(InCallService
  • 设置?

这些新应用程序加上之前使用 SwiftUI 的 5 个应用程序:

  • 翻译
  • 快捷指令
  • 电话
  • AirPods 连接弹出窗口?(SharingViewService
  • 锁屏?(SleepLockScreen

使用 SwiftUI 的其他二进制文件大多是小部件或新框架。以下是使用 SwiftUI 的 114 个二进制文件的完整列表:

代码语言:javascript复制
/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 的核心,不会很快消失。
  • 苹果对 Swift 的使用进展得比以往任何时候都快。去年,Swift 超过了C。今年,Swift 越来越接近 C 。
  • SwiftUI 去年几乎不引人注目,但今年苹果似乎更广泛地采用了它,即使在旗舰应用程序中也是如此。
  • C 和 C 仍然发挥着重要作用。这些语言通常用于与音频、视频、电话、网络和其他底层框架相关的二进制文件。

以下是各种编程语言演变的另一个表示:

各种编程语言演变

原始数据

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

版本

设备

原始数据

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

结论

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

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

如前面所述,这种方法显然有一些局限性,虽然我认为整体情况是准确的,但我不能保证结果是完全准确的。如果您认为我遗漏了什么,请在推特上联系我。

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

0 人点赞