【问题标题】:iOS: Launch App via universal link makes app crashiOS:通过通用链接启动应用程序会导致应用程序崩溃
【发布时间】:2020-06-03 02:29:35
【问题描述】:

我正在使用 Flutter 开发 iOS 应用。当我通过通用链接启动应用程序时(例如,在 Safari 中输入 url 并单击 OPEN 按钮),应用程序启动但会立即崩溃。但是如果应用程序已经在后台运行,当我点击链接时,它不会崩溃。当它崩溃时,我得到了以下日志。于是我把所有NSUserActivity相关的代码都注释掉了,还是报同样的错误。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (NSUserActivity)'

有什么想法吗? 谢谢。

【问题讨论】:

  • 我不能清楚地理解崩溃可能被认为是在 Xcode 控制台中显示的完整崩溃堆栈。
  • 这是 IMO 唯一有意义的日志,所以我没有发布其他日志。但我已经解决了我的问题。还是谢谢你:)

标签: ios flutter ios-universal-links


【解决方案1】:

终于找到问题了,这个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',原因:'JSON 写入中的无效类型 (NSUserActivity)'”。
我认为让我感到困惑的是,从日志中我认为术语“NSUserActivity”是我的代码中的东西(因为我确实在 continueUserActivity 方法中使用了这个对象,并且在我得到这个错误之前我已经修改了 continueUserActivity 来解决这个问题),所以我注释掉了这些代码,但没有注释掉。但是,我没有注意到它是字典中的一个术语,可以在运行时创建。
我的解决方法是在Json转换之前检查字典中的key,并添加try catch来避免这个bug。

【讨论】:

    猜你喜欢
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    相关资源
    最近更新 更多