注册/登录

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

移动开发 iOS
苹果继续将 Swift 用于自己的应用程序:在 iOS 14 和 iOS 15 之间,使用 Swift 的二进制文件数量翻了一番。大约13% 的二进制文件现在使用了 Swift。

[[441823]]

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

  • iOS 15 中有多少个二进制文件?
  • 开发这些应用程序使用了哪种编程语言?
  • 使用 Swift 编写了多少个应用程序?
  • 苹果是否在某些内置应用程序采用了 SwiftUI?
  • 创建本文的方法和工具在我之前的帖子中进行了详细说明。如果您感兴趣,请参考:

  • 编程语言从 iPhone OS 1.0 到 iOS 14 的演变[1]
  • 苹果在 iOS 10.1 和 macOS 10.12 中使用了Swift[2]
  • 在深入讨论细节之前,让我澄清几点:

  • 我只分析了通常意义上的 'iOS',即内核上方的所有内容。不包括 XNU 内核和低级固件(SecureROM、基带、...)。另一方面,我计算了位于 iPhone OS 3.1 中引入的 dyld 共享缓存中的框架。
  • 请记住,开发人员可以混合不同的编程语言来创建一个二进制文件。一个例子是我开发的应用程序 Clutters[3],我在那里使用 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 个二进制文件的完整列表:

    1. /Applications/AppSettings.app/AppSettings 
    2. /Applications/AppStore.app/PlugIns/AppStoreWidgetsExtension.appex/AppStoreWidgetsExtension 
    3. /Applications/FamilyControlsAuthenticationUI.app/FamilyControlsAuthenticationUI 
    4. /Applications/FindMy.app/PlugIns/FindMyWidgetIntentsItems.appex/FindMyWidgetIntentsItems 
    5. /Applications/FindMy.app/PlugIns/FindMyWidgetIntentsPeople.appex/FindMyWidgetIntentsPeople 
    6. /Applications/FindMy.app/PlugIns/FindMyWidgetItems.appex/FindMyWidgetItems 
    7. /Applications/FindMy.app/PlugIns/FindMyWidgetPeople.appex/FindMyWidgetPeople 
    8. /Applications/FTMInternal-4.app/FTMInternal-4 
    9. /Applications/GameCenterWidgets.app/PlugIns/GCWidgets.appex/GCWidgets 
    10. /Applications/InCallService.app/InCallService 
    11. /Applications/PeopleViewService.app/PlugIns/PeopleWidget_iOSExtension.appex/PeopleWidget_iOSExtension 
    12. /Applications/SleepWidgetContainer.app/PlugIns/SleepWidgetExtension.appex/SleepWidgetExtension 
    13. /private/var/staged_system_apps/Books.app/Books 
    14. /private/var/staged_system_apps/Maps.app/Maps 
    15. /private/var/staged_system_apps/MobileMail.app/PlugIns/MailWidgetExtension.appex/MailWidgetExtension 
    16. /private/var/staged_system_apps/MobileNotes.app/MobileNotes 
    17. /private/var/staged_system_apps/MobileNotes.app/PlugIns/com.apple.mobilenotes.SharingExtension.appex/com.apple.mobilenotes.SharingExtension 
    18. /private/var/staged_system_apps/Music.app/Frameworks/MusicApplication.framework/MusicApplication 
    19. /private/var/staged_system_apps/Podcasts.app/Frameworks/PodcastsStoreUI.framework/PodcastsStoreUI 
    20. /private/var/staged_system_apps/Shortcuts.app/PlugIns/QuickLookExtension.appex/QuickLookExtension 
    21. /private/var/staged_system_apps/Tips.app/Tips 
    22. /private/var/staged_system_apps/Weather.app/Weather 
    23. /System/Library/Assistant/UIPlugins/SiriFindMyUIPlugin.siriUIBundle/SiriFindMyUIPlugin 
    24. /System/Library/Frameworks/_CoreLocationUI_SwiftUI.framework/_CoreLocationUI_SwiftUI 
    25. /System/Library/Frameworks/_MusicKit_SwiftUI.framework/_MusicKit_SwiftUI 
    26. /System/Library/Frameworks/FamilyControls.framework/FamilyControls 
    27. /System/Library/Frameworks/FamilyControls.framework/PlugIns/ActivityPickerExtension.appex/ActivityPickerExtension 
    28. /System/Library/Health/FeedItemPlugins/Heart.healthplugin/Heart 
    29. /System/Library/Health/FeedItemPlugins/Highlights.healthplugin/Highlights 
    30. /System/Library/Health/FeedItemPlugins/MenstrualCyclesAppPlugin.healthplugin/MenstrualCyclesAppPlugin 
    31. /System/Library/Health/FeedItemPlugins/SleepHealthAppPlugin.healthplugin/SleepHealthAppPlugin 
    32. /System/Library/Health/FeedItemPlugins/Summaries.healthplugin/Summaries 
    33. /System/Library/PreferenceBundles/BatteryUsageUI.bundle/BatteryUsageUI 
    34. /System/Library/PreferenceBundles/CoreRoutineSettings.bundle/CoreRoutineSettings 
    35. /System/Library/PreferenceBundles/FocusSettings.bundle/FocusSettings 
    36. /System/Library/PrivateFrameworks/AccessibilitySharedUISupport.framework/AccessibilitySharedUISupport 
    37. /System/Library/PrivateFrameworks/ActionKitUI.framework/ActionKitUI 
    38. /System/Library/PrivateFrameworks/CommandAndControlUI.framework/CommandAndControlUI 
    39. /System/Library/PrivateFrameworks/CoreChartSwift.framework/CoreChartSwift 
    40. /System/Library/PrivateFrameworks/CoreSuggestionsUI.framework/CoreSuggestionsUI 
    41. /System/Library/PrivateFrameworks/FocusSettingsUI.framework/FocusSettingsUI 
    42. /System/Library/PrivateFrameworks/FocusUI.framework/FocusUI 
    43. /System/Library/PrivateFrameworks/HealthExperienceUI.framework/HealthExperienceUI 
    44. /System/Library/PrivateFrameworks/HealthRecordsUI.framework/HealthRecordsUI 
    45. /System/Library/PrivateFrameworks/HealthVisualization.framework/HealthVisualization 
    46. /System/Library/PrivateFrameworks/HearingUI.framework/HearingUI 
    47. /System/Library/PrivateFrameworks/MediaFoundation.framework/MediaFoundation 
    48. /System/Library/PrivateFrameworks/MessagesSupport.framework/MessagesSupport 
    49. /System/Library/PrivateFrameworks/MLKit.framework/MLKit 
    50. /System/Library/PrivateFrameworks/MLKit.framework/PlugIns/com.apple.MLKit.MLModelPreview.appex/com.apple.MLKit.MLModelPreview 
    51. /System/Library/PrivateFrameworks/MLKit.framework/PlugIns/com.apple.MLKit.MLPackagePreview.appex/com.apple.MLKit.MLPackagePreview 
    52. /System/Library/PrivateFrameworks/NotesUI.framework/NotesUI 
    53. /System/Library/PrivateFrameworks/PaymentUI.framework/PaymentUI 
    54. /System/Library/PrivateFrameworks/PeopleUI.framework/PeopleUI 
    55. /System/Library/PrivateFrameworks/PreviewsInjection.framework/PreviewsInjection 
    56. /System/Library/PrivateFrameworks/PreviewsMessaging.framework/PreviewsMessaging 
    57. /System/Library/PrivateFrameworks/ScreenTimeUICore.framework/ScreenTimeUICore 
    58. /System/Library/PrivateFrameworks/SleepHealthUI.framework/SleepHealthUI 
    59. /System/Library/PrivateFrameworks/SleepWidgetUI.framework/SleepWidgetUI 
    60. /System/Library/PrivateFrameworks/SnippetUI.framework/SnippetUI 
    61. /System/Library/PrivateFrameworks/TipKit.framework/TipKit 
    62. /System/Library/PrivateFrameworks/TranslationUI.framework/TranslationUI 
    63. /System/Library/PrivateFrameworks/TranslationUIServices.framework/PlugIns/TranslationUIService.appex/TranslationUIService 
    64. /System/Library/PrivateFrameworks/VideosUI.framework/VideosUI 
    65. /System/Library/PrivateFrameworks/WeatherUI.framework/WeatherUI 
    66. /System/Library/PrivateFrameworks/WorkflowUI.framework/WorkflowUI 
    67. /System/Library/Snippets/UIPlugins/AudioUIPlugin.bundle/AudioUIPlugin 
    68. /System/Library/Snippets/UIPlugins/SiriVideoUIPlugin.bundle/SiriVideoUIPlugin 
    69. /System/Library/Snippets/UIPlugins/SystemPlugin.bundle/SystemPlugin 
    70. /usr/lib/swift/libswiftExtensionKit.dylib 
    71. /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 源代码,我们也可以确定用于在 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

    [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

    责任编辑:姜华 Swift社区
    点赞
    收藏