我正在为我的iOS应用添加对LiveActivities/Widgetkit的支持。我仍然支持iOS 14+的旧版本。当检查用户是否通过我的SceneDelegate中的LiveActivity返回应用时:
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
if #available(iOS 16.2, *), isLiveActivity(activity: userActivity) {
...
} else {
let _ = handleDynamicLink(url: userActivity.webpageURL)
}
}
与
@available(iOS 16.2, *)
public func isLiveActivity(activity: NSUserActivity) -> Bool {
return activity.activityType == NSUserActivityTypeLiveActivity
}
现在的问题是,无论我如何将其 Package 在#available(iOS 16.2,*)中,或者即使我根本不调用isLiveActivity
,只要代码中的任何地方出现NSUserActivityTypeLiveActivity
,在旧的iOS版本(仅在模拟器上测试)上都会抛出错误:
dyld: Symbol not found: _NSUserActivityTypeLiveActivity
如果我甚至不能在代码中的任何地方包含这个符号,我应该如何包含这个检查?我会假设NSUserActivityTypeLiveActivity
是一个编译时常量,但它似乎是动态查找的,并且会崩溃,因为它在旧版本的WidgetKit中不可用。
1条答案
按热度按时间fwzugrvs1#
我认为这是SDK中的一个bug,建议你向苹果提交一个bug。
作为变通方案,您可以:
我之所以认为这是一个错误,是因为查看文档,NSUserActivityTypeLiveActivity我们看到它被标记为iOS 14.0+,但如果我们根据iOS崩溃转储分析启动模拟器并进行调试(
DYLD_PRINT_LIBRARIES
环境变量),我们看到它抱怨:如果我们要进入上面的
DYLD_ROOT_PATH
,我们可以使用nm
检查全局变量NSUserActivityTypeLiveActivity
是否不存在,因为下面的命令没有产生匹配:因此,全局变量NSUserActivityTypeLiveActivity需要在WidgetKit源代码中正确标记为在iOS 16.1之前不可用。