• Objective-C依然占C位,Swift和SwiftUI在iOS 15中的使用情况


    作者 | Alexandre Colucci
    译者 | 弯月
    出品 | CSDN(ID:CSDNnews)

    iOS 15 已经发布几个月了,在本文中,我们来分析一下 iOS 15 的内置应用,看看 iOS 15 中有多少个二进制文件?每个应用都是用什么语言开发的?有多少应用是用 Swift 编写的?苹果有没有在内置应用中使用 SwiftUI?
    在这里插入图片描述

    方法论

    本文使用的工具和方法论在之前的文章中介绍过。如果你有兴趣,可以参考以下两篇文章:
    https://blog.timac.org/2020/1019-evolution-of-the-programming-languages-from-iphone-os-to-ios-14/
    https://blog.timac.org/2016/1101-apples-use-of-swift-in-ios-10-1-and-macos-10-12/

    在讨论细节之前,首先澄清几个点:

    我只分析了通常意义上的“iOS”,即内核之上的一切。XNU内核和底层固件(SecureROM、Baseband等)不在本文的讨论范围内。但是,我包含了 dyld 共享缓存中的框架,这是 iPhone OS 3.1 引入的一个机制。

    开发人员可以在同一个二进制文件中混合使用多种编程语言。举个例子,我开发的 Clatters 就使用了Swift、SwiftUI、Objective-C 和 C,因为我们希望使用最适合的编程语言解决每个问题。本文判断应用使用了 Swift 的标准为:至少包含了一行 Swift 代码。

    你会看到本文多次提及Objective-C 和 C++ ,但却没有提到Objective-C++。这是因为本文使用的方法并不能检测出使用 Objective-C++ 编译的二进制文件,这种文件可能同时使用了 Objective-C 和 C++。
    最后,本文的分析只是个人的看法。尽管我相信大方向是正确的,但由于我没有 iOS 的源代码,分析结果不一定准确,所以方法也有局限性。

    iOS15 中 Swift 和 SwiftUI 的使用情况

    可能很多人很感兴趣 iOS 15 中 Swift 和SwiftUI 的使用情况。下面我们就来一起看看吧。
    iOS15 中共计有 114 个二进制文件使用了 SwiftUI,几乎是 iOS 14 的三倍。相应地,iOS 15 中至少包含一行 Swift 代码的二进制文件也是 iOS 14 的两倍:
    在这里插入图片描述
    可见,苹果一直在内置应用中逐步采用 Swift。今年 SwiftUI 的采用率也呈现大幅度增长。iOS 15 中使用了 SwiftUI 的知名应用包括:

    • 图书
    • 地图
    • 便笺
    • 天气
    • 音乐
    • 提示
    • 播客
    • FaceTime通话(InCallService)
    • 设置
      下面这些新应用也使用了 SwiftUI:
    • 翻译
    • 快捷方式
    • 电话
    • 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71

    ​二进制文件总数

    iOS15 中有多少个二进制文件?iOS 15 有 4738 个二进制文件,比 iOS 14 多了565个, iOS14 有 4173个。
    在这里插入图片描述

    编程语言的变化

    在分析了 iPhone OS 1.0 到 iOS 15 的所有主要版本后,我们可以看到IOS 使用的编程语言的发展历程。同样,注意这里同一个二进制文件可能被统计多次,因此本图中的二进制文件总数多于上面:
    在这里插入图片描述
    在 iOS 15 的所有二进制文件中,

    • 89%使用了Objective-C
    • 17%使用了 C++
    • 13%使用了 Swift
    • 8%完全使用 C编写
    • 2%使用了SwiftUI

    从这些数据可以得出什么结论?

    • Objective-C 依然是 iOS 的核心,短时间内不会消失。
    • 苹果采用 Swift的进度大大加快了。去年,Swift 超过了 C,今年已经接近 C++。
    • SwiftUI 几乎接近于零,但今年苹果似乎在更广的范围内采用了 SwiftUI,包括旗舰应用。
    • C++ 和 C 依然扮演了重要角色。这些语言通常被涉及到音频、视频、电话、Web的应用和其他底层框架采用。

    下图展示了每种编程语言的发展:
    在这里插入图片描述

    原始数据

    如果想进一步分析,则可以去原文网站上下载从 iPhone OS 1.0 到 iOS 15.0 的所有主要版本的原始数据:https://blog.timac.org/2021/1219-state-of-swift-and-swiftui-ios15/

    结论

    即使我们没有 iOS 的源代码,也可以确定 iOS 中应用程序使用的语言,进而统计 iPhone OS 1.0到 iOS 15 编程语言的发展情况。

    可以看出,苹果在持续采用 Swift:iOS 15 中采用Swift 的内置应用是 iOS 14 的两倍。现在大约有13% 的二进制文件使用了 Swift。此外,从今年开始,有几款旗舰应用也开始使用 SwiftUI 了。
    如前所述,这种方法有明显的局限性,尽管我相信大方向是正确的,但无法保证结果百分之百准确。

    参考链接:

  • 相关阅读:
    Google Pay最新版集成步骤
    最小生成树学习笔记
    jQuery 的DOM操作元素
    聚观早报|蔚来汽车首颗自研芯片;中式汉堡正打破“麦门永存”
    pyquery库和parsel库的使用
    STC/MLLT--学习笔记
    【威纶通触摸屏 按键保护(元件安全设置)】
    vue - 指令2
    Rust 从入门到精通04-变量
    JetLinks物联网基础平台-2.0,正式发布,全新架构、全新的前端UI
  • 原文地址:https://blog.csdn.net/csdnnews/article/details/122085927