Apple 在 iOS 17 中使用 Swift 和 SwiftUI

813人浏览 / 0人评论

现在 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 个新二进制文件。

企业微信截图_16977681989364.png

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%:

企业微信截图_16977682144686.png

编程语言的演变

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

企业微信截图_16977682242885.png

通过显示百分比可以更好地直观地显示一些趋势:

企业微信截图_16977682345333.png

我们可以从这些图表中学到什么?

  • Objective-C 仍然是 iOS 的核心,并且被大多数应用程序直接或间接使用

  • Swift 和 SwiftUI 的采用持续快速增长

  • Objective-C、C 和 C++ 的份额持续下降

UIKit 与 SwiftUI

到目前为止,我们将 SwiftUI 与所有二进制文件进行了比较。SwiftUI 作为一个 UI 框架,将其与显示某些 UI 的其他二进制文件进行比较会更公平。原生 iOS 应用程序可以使用 2 个不同的 UI 框架构建:UIKit 和 SwiftUI(请注意,可以混合使用两者)。我计算包含 UI 的二进制文件数量的方法并不完美,但应该给出一个大致趋势:我只是检查二进制文件是否链接到 UIKit 或 SwiftUI 框架。

与前一年相比,专门使用 UIKit 的二进制文件数量首次减少:

企业微信截图_16977682431193.png

通过显示百分比,我们可以确认 SwiftUI 在苹果自家应用程序中明显增加:

企业微信截图_16977682522839.png

安全飞地

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:

企业微信截图_16977685711.png

那么 Secure Enclave 中是否使用了 Swift?是的!事实证明,hibernationmacOS Ventura 中的二进制文件正在使用 Swift:

企业微信截图_16977685806287.png

原始数据

您可以在下面下载我为从 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 XiOS14.txt
iOS 13.1 (17A844)iPhone XiOS13.txt
iOS 12.0 (16A366)iPhone XiOS12.txt
iOS 11.1 (15B93)iPhone XiOS11.txt
iOS 10.1 (14B72)iPhone 5SiOS10.txt
iOS 9.0 (13A344)iPhone 5SiOS9.txt
iOS 8.0 (12A365)iPhone 5SiOS8.txt
iOS 7.0.1 (11A470a)iPhone 5SiOS7.txt
iOS 6.0 (10A403)iPhone 3GSiOS6.txt
iOS 5.0 (9A334)iPhone 3GSiOS5.txt
iOS 4.0 (8A293)iPhone 3GSiOS4.txt
iPhone 操作系统 3.0 (7A341)iPhone 3GSiOS3.txt
iPhone 操作系统 2.0 (5A347)iPhone 2GiOS2.txt
iPhone 操作系统 1.0 (1A543a)iPhone 2GiOS1.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 与我联系

全部评论

晴天下起了小雨
2017-10-01 18:00
很喜欢,果断关注了
wjmyly7336064
2017-10-01 18:00
相当实用,赞美了
橘大佬
2017-10-01 18:00
就是有些细节再到位点就好了…