iOS 版本的应用只能在 iPhone XS Max 12.1 模拟器上运行

iOS version of app only runs on iPhone XS Max 12.1 Simulator

我正在为 Mac 使用 Visual Studio。

当我在 iPhone 模拟器上构建和 运行 我的应用程序时,它在 iPhone XS Max 模拟器上只有 运行s。

所有其他模拟设备(从 XS Max 一直到 iPhone 6)都会显示启动画面,但随后会出现

Foundation.MonoTouchexception...NSInternalInconsistencyException Reason: Application windows are expected to have a root view controller at the end of the application launch

我必须测试的唯一物理设备是 iPhone 6S Plus,但它也抛出相同的异常。

我尝试过清理和重建,删除 bin 和 obj 文件夹。

我检查了设备日志,但我还没有找到任何可以引导我找到解决方案的东西(如果你需要日志,我当然可以提供)。

关于可能导致此特殊问题的原因或在设备日志中需要注意哪些可能有助于解决问题的想法?

这个问题是由我在 App.xaml 页面上的 tokenExpiration 引起的。

在某些时候,当我在 iPhone XS Max 12.1 上测试我的应用程序时,字符串存储在其他地方,因此当应用程序初始化时,此字符串不为空,因此 var tokenDate = Convert.ToDateTime(tokenExpiration); 不会抛出错误。

然后我的 if 语句可以 运行 成功,我的应用程序将有一个基本的根视图。

然而,对于一个我以前没有使用过并且之前没有设置 tokenExpiration 字符串的新模拟器,当你想要检索这个 tokenExpiration 时,它将 return空字符串作为默认设置。

然后var tokenDate = Convert.ToDateTime(tokenExpiration);将抛出错误,因为它无法转换空字符串。

最后,我的代码将 运行 我的 catch 语句,这意味着我的应用程序丢失了基本根视图,这就是导致我出现问题的原因。

前一码:

    try
    {
        TaskScheduler.UnobservedTaskException += (sender, e) => {
            Console.WriteLine(e.Exception.ToString(), Category.Exception, Priority.High);
        };



        await NavigationService.NavigateAsync("/LoginPage");

    }
    catch (Exception e)
    {
        Console.WriteLine(e.ToString(), Category.Exception, Priority.High);
    }

更新代码:

    var tokenExpiration = Preferences.Get("facebookTokenExpiration", string.Empty);
    if (tokenExpiration != null && tokenExpiration.Length > 0)
    {
        var tokenDate = Convert.ToDateTime(tokenExpiration);
        var tokenStatus = DateTime.Now.CompareTo(tokenDate);
        //Token is still active
        if (tokenExpiration != string.Empty & tokenStatus < 0)
        {

            await NavigationService.NavigateAsync("/MainTabbedPage?selectedTab=PuppyDetailsPage");

        }
        else
        {
            await NavigationService.NavigateAsync("/Login");
        }
    }
    else
    {
        await NavigationService.NavigateAsync("/MainTabbedPage?selectedTab=PuppyDetailsPage");
    }

编辑:谢谢@LandLu a forums.xamarin.com 帮助我解决这个问题。