现在 iOS 17 已经发布了,让我们分析一下它的内置应用程序来回答几个问题:iOS 17 中有多少个二进制文件?使用哪些编程语言来开发这些应用程序?有多少应用程序是用 Swift 编写的?使用 SwiftUI 与 UIKit 的应用程序的百分比是多少?
方法创建本文的方法和工具已在我之前的帖子中详细介绍。如果您有兴趣,请参考:
在进入细节之前,我们先澄清几点:
我只分析了通常所说的“iOS”,即内核之上的所有内容。不包括 XNU 内核和低级固件。请注意,今年我分析了安全区域。
我计算了位于 dyld 共享缓存内的框架,这是 iPhone OS 3.1 中引入的一种机制。
请记住,开发人员可以混合不同的编程语言来创建一个二进制文件。一个例子是我开发的 Mac 应用程序Dependency,其中我使用 Swift、Objective-C、C++ 和 C(用于解决每个特定问题的最合适的编程语言)。在本文中,包含一行 Swift 代码的应用程序将被视为使用 Swift。
您会看到提及 Objective-C 和 C++,但您可能会注意到缺少 Objective-C++。这里使用的方法无法真正检测使用 Objective-C++ 构建的二进制文件。此类二进制文件被视为同时使用 Objective-C 和 C++。
最后,您应该对这一分析持保留态度。虽然我相信总体情况是准确的,但我的方法有一些局限性,因为我无法访问 iOS 源代码并且依赖于不精确的编译工件。
我们先回答一个简单的问题:iOS 17 中有多少个二进制文件?组成 iOS 的二进制文件数量持续增加:iOS 17 包含 6030 个二进制文件,而 iOS 16 中包含 5403 个二进制文件。即 627 个新二进制文件。
iOS 17 中的 Swift 和 SwiftUI
毫不奇怪,今年采用 SwiftUI 的应用程序数量显着增加。值得注意的提及包括:
Preferences 应用程序及其多个捆绑包(StorageSettingsUI、WallpaperSettings、MultitaskingAndGesturesSettings、ThirdPartyApplicationSettings、ActionButtonSettings,...)
与健康相关的几个二进制文件(Health.app、HealthUI、MentalHealthUI、WorkoutUI,...)
Home 应用程序似乎发生了一些重大变化(Home.app、HomeEnergyUI、HomeUICommon、HomeDataModel、HomeAccessoryControlUI 等)
支持新的操作按钮(ActionButtonSettings、ActionButtonConfigurationUI,...)
此外,其他几个重要的应用程序,例如日历和提醒,现在也在使用 SwiftUI
在 iOS 16 中,只有 4 个应用程序使用了基于 SwiftUI 的应用程序生命周期。在 iOS 17 中,这个数字已增长到 14 个应用程序:
/Applications/Batteries.app/Batteries /Applications/ClarityCamera.app/ClarityCamera /Applications/ClarityPhotos.app/ClarityPhotos /Applications/FinanceUIService.app/FinanceUIService /Applications/FTMInternal-4.app/FTMInternal-4 /Applications/MusicRecognition.app/MusicRecognition /Applications/PASViewService.app/PASViewService /Applications/Preferences.app/Preferences /Applications/SafetyMonitorApp.app/SafetyMonitorApp /Applications/ShazamEventsApp.app/ShazamEventsApp /Applications/WorkoutRemoteViewService.app/WorkoutRemoteViewService /private/var/staged_system_apps/Weather.app/Weather /System/Library/CoreServices/AegirProxyApp.app/AegirProxyApp /System/Library/CoreServices/ShortcutsActions.app/ShortcutsActions
Swift 和 SwiftUI 的采用率继续攀升:iOS 17 现在包含 385 个使用 SwiftUI 的二进制文件。同样,在 iOS 16 和 iOS 17 之间,包含至少一行 Swift 代码的二进制文件数量增加了 50%:
编程语言的演变
通过分析从 iPhone OS 1.0 到 iOS 17 的所有 iOS 主要版本,我们可以看到 iOS 使用的编程语言的演变。再次请注意,单个二进制文件可以被计数多次,因此该图中二进制文件的总和大于二进制文件的总数:
通过显示百分比可以更好地直观地显示一些趋势:
我们可以从这些图表中学到什么?
Objective-C 仍然是 iOS 的核心,并且被大多数应用程序直接或间接使用
Swift 和 SwiftUI 的采用持续快速增长
Objective-C、C 和 C++ 的份额持续下降
到目前为止,我们将 SwiftUI 与所有二进制文件进行了比较。SwiftUI 作为一个 UI 框架,将其与显示某些 UI 的其他二进制文件进行比较会更公平。原生 iOS 应用程序可以使用 2 个不同的 UI 框架构建:UIKit 和 SwiftUI(请注意,可以混合使用两者)。我计算包含 UI 的二进制文件数量的方法并不完美,但应该给出一个大致趋势:我只是检查二进制文件是否链接到 UIKit 或 SwiftUI 框架。
与前一年相比,专门使用 UIKit 的二进制文件数量首次减少:
通过显示百分比,我们可以确认 SwiftUI 在苹果自家应用程序中明显增加:
安全飞地
Secure Enclave 是一个基于硬件的安全组件,与主处理器隔离,以提供额外的安全层。它最初是在 iPhone 5S 中引入的,旨在确保敏感用户数据的安全,在 Touch ID、Face ID 和 Apple Pay 中发挥着关键作用。
在WWDC22 的What's new in Swift
会议 (5:35)中,Apple 表示 Swift 现在适用于 Secure Enclave 处理器等受限环境:
在 iOS 17 中,Secure Enclave 包含 19 个二进制文件,令我惊讶的是,它们都没有使用 Swift:
那么 Secure Enclave 中是否使用了 Swift?是的!事实证明,hibernation
macOS Ventura 中的二进制文件正在使用 Swift:
原始数据
您可以在下面下载我为从 iPhone OS 1.0 到 iOS 17.0 的所有主要 iOS 版本生成的原始数据。
版本 | 设备 | 原始数据 |
---|---|---|
iOS 17.0.2 (21A350) | iPhone 15 专业版 | iOS17.txt |
iOS 16.0.2 (20A380) | iPhone 14 专业版 | iOS16.txt |
iOS 15.0 (19A346) | iPhone 13 专业版 | 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 操作系统 3.0 (7A341) | iPhone 3GS | iOS3.txt |
iPhone 操作系统 2.0 (5A347) | iPhone 2G | iOS2.txt |
iPhone 操作系统 1.0 (1A543a) | iPhone 2G | iOS1.txt |
即使我们无法访问 iOS 源代码,我们也可以确定用于在 iOS 中创建内置应用程序的编程语言,并且可以衡量这些语言从 iPhone OS 1.0 到 iOS 17 的演变。
Swift 和 SwiftUI 的采用率继续增长:在 iOS 16 和 iOS 17 之间,使用这些框架的二进制文件数量增加了 50%。dogfooding 的另一个好迹象是基于 SwiftUI 的应用程序生命周期得到了更广泛的使用。与前一年相比,专门使用 UIKit 的二进制文件数量也首次减少。
在接下来的几年里,观察 Swift 是否开始扩展到低级固件(例如 Secure Enclave)将会很有趣。目前,iOS 中的 Secure Enclave 中没有 Swift,但 macOS 确实包含了它。
如前所述,这种方法显然有一些限制,虽然我相信整体情况是准确的,但我不能保证结果完全准确。如果您认为我错过了某些内容,请通过 Mastodon @timac@mastodon.social 与我联系。
关注微信公众号获取更多VSCode编程信息,定时发布干货文章
全部评论