如何在 iOS 应用程序中以编程方式检测 SwiftUI 的使用情况

Posted

技术标签:

【中文标题】如何在 iOS 应用程序中以编程方式检测 SwiftUI 的使用情况【英文标题】:How to detect SwiftUI usage programmatically in an iOS application 【发布时间】:2019-10-11 07:15:05 【问题描述】:

我正在为 ios 开发一个库,我需要知道使用该库的应用程序是否正在运行 SwiftUI,以便我可以适当地处理事情。

有没有办法在 Objective-C 中以编程方式找出这个问题?

【问题讨论】:

您在代码中使用什么取决于外部用户的语言? 我们产品的一些功能在 swift UI 中还不能工作,所以我想记录一条消息,告诉用户 SwiftUI 被检测到并且并非所有功能都可以工作。此外,我们有时会在应用程序中显示一个叠加层,如果我检测到 swiftui,我希望最终显示一个 swiftui 叠加层。 另外,我不是在问语言,我是在专门询问 UI 框架“SwiftUI”,而不仅仅是 swift 语言 如果您使用的是UIViewRepresentableUIViewControllerRepresentable,则将日志记录代码放在那里。 我认为最可靠的方法是检查rootViewController 是否属于UIHostingController 类型。 (注意:我不知道该怎么做。) UIKit 应用程序通常有一个情节提要,但很容易删除。此外,UIKit 应用程序的info.pist 有一个UIMainStoryboardFile 的密钥——但同样,我不确定这是否与检查UIHostingController 一样可靠。请记住,Xcode 12 来了,这可能会改变。 【参考方案1】:

最后我做到了。

    获取应用程序的根或关键窗口。

    检查它的类名是否包含“UIHostingController”

    对此也没有检查:NSClassFromString(@"SwiftUI._UIGraphicsView")

您还可以检查其他 swift ui 类,但目前已涵盖所有情况。

【讨论】:

以上是关于如何在 iOS 应用程序中以编程方式检测 SwiftUI 的使用情况的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中以编程方式禁用/启用睡眠模式?

如何在iOS中以编程方式重新启动iPhone应用程序

如何在 iOS 中以编程方式启用睡眠模式?

如何在 ios 应用程序中以编程方式获取任何站点上图像的 url?

如何在iOS 7中以编程方式设置设备方向?

如何在 iOS 6 中以编程方式获取设备的当前方向?