ios - iOS:通过通用链接启动应用程序会导致应用程序崩溃
问题描述
我正在使用 Flutter 开发 iOS 应用程序。当我通过通用链接启动应用程序时(例如在 Safari 中输入 url 并单击打开按钮),应用程序启动但会立即崩溃。但是如果应用程序已经在后台运行,当我点击链接时,它不会崩溃。当它崩溃时,我得到以下日志。所以我把所有与NSUserActivity相关的代码都注释掉了,但是还是报了同样的错误。
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (NSUserActivity)'
任何想法?谢谢。
解决方案
终于找到问题了,这个bug是由于didFinishLaunchingWithOptions函数中JSON转换失败造成的。我在我的一个 didFinishLaunchingWithOptions 方法中进行了 JSON 转换(多个颤振插件调用覆盖此方法)。通过 UL 进入应用时,会携带一个 NSDictionary 到 didFinishLaunchingWithOptions。例如,如果从 Safari 输入,这个 NSDictionary 看起来像
dict :{
UIApplicationLaunchOptionsSourceApplicationKey = "com.apple.mobilesafari";
UIApplicationLaunchOptionsUserActivityDictionaryKey = {
UIApplicationLaunchOptionsUserActivityIdentifierKey = "ABCD-SOME-KEY";
UIApplicationLaunchOptionsUserActivityKey = "<NSUserActivity: 0x12345678>";
UIApplicationLaunchOptionsUserActivityTypeKey = NSUserActivityTypeBrowsingWeb;
};
}
因此,当将其转换为 JSON 时,我得到“未捕获的异常 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (NSUserActivity)'”。
我认为让我感到困惑的是,从日志中我认为术语“NSUserActivity”是我的代码中的东西(因为我确实在 continueUserActivity 方法中使用了这个对象,并且在我得到这个错误之前我已经修改了 continueUserActivity 来解决这个问题),所以我注释掉了这些代码,但没有注释掉。但是,我没有注意到它是字典中的一个术语,可以在运行时创建。
我的解决方案是在Json转换之前检查字典中的键并添加try catch以避免此错误。
推荐阅读
- vue.js - 在元素(Vue)自动完成中选择后保持下拉
- linux - 我想使用shell脚本删除目录下的所有文件,将文件目录作为参数传递
- java - Java中的本机方法实现
- excel - 如何创建日常工作所需的简单 VBA 宏?
- javascript - Liferay 7:使用 URL 参数和 Javascript 预填表单
- django - django.core.exceptions.ImproperlyConfigured:请求设置 REST_FRAMEWORK
- css - 如何在单个标签中使用动态 CSS 或多个 CSS
- android-emulator - Android 模拟器 30.4.5 无法在 MacOS 上运行
- mysql - 从 X 之间的时间戳不返回所有行的表中选择
- c++ - 没有匹配的构造函数错误(Boost Beast,C++)