【问题标题】:iOS App Store ExecutionEngineException attempting to JIT compileiOS App Store ExecutionEngineException 试图 JIT 编译
【发布时间】:2015-03-23 07:01:50
【问题描述】:

我有一个非常尴尬的问题。我已经为 iOS 构建了我的应用程序并在所有模拟器上对其进行了测试,它运行良好。我已经将它安装在设备(iPhone 6 plus)上,效果也很好。但是,当我将它提交到应用商店时,反馈是它在所有设备上启动时崩溃。随附的崩溃日志显示此错误;

Unhandled Exception:
    System.ExecutionEngineException: Attempting to JIT compile method 'GalaSoft.MvvmLight.Messaging.Messenger:get_Default ()' while running with --aot-only. See http://docs.xamarin.com/ios/about/limitations for more information.

导致此错误的代码在 ViewWillAppear 中;

Messenger.Default.Register<LoggedInFailedMessage>(this, LoginFailed);
Messenger.Default.Register<LoggedInMessage>(this, LoggedIn);

下面的堆栈溢出线程似乎表明它可能是由使用值类型引起的,但我使用的是引用类型。

System.ExecutionEngineException: Attempting to JIT compile method only in Debug Mode on device (MonoTouch)

任何想法将不胜感激!我不知道如何测试这些错误,如果它们在我在模拟器和设备上调试时工作但在苹果测试时失败。

【问题讨论】:

    标签: xamarin.ios xamarin app-store mvvm-light jit


    【解决方案1】:

    大部分问题在很久以前就已解决。确保您的 AppStore 构建(或您用来提交的构建)的选项与您正在测试的(例如 Debug 构建)相匹配。

    特别要确保在您提交的版本上启用通用值类型共享选项是ON。这将包括一些额外的代码,以确保所有值类型代码路径变体在运行时可用。

    请注意,默认情况下,此设置应该已经开启。确保您的调试/发布设置大部分(调试内容除外)相同仍然是一个好习惯。否则,您可能会在本地测试与您提交到商店的代码不同的代码。

    【讨论】:

    • 解决的方法是确保我使用“链接所有程序集”而不是“仅 SDK”选项。令人沮丧的是,每当我更改 LLVM、thumb2 指令集等选项时,它都会切换链接器选项并覆盖我设置的内容。我基本上必须打开和关闭一些东西才能让它保持在“全部链接”上。现在我只需要尝试将大小从 30mb 减小!
    • 在尝试向应用程序添加更新时,此问题再次引起关注。只有这一次,“链接所有程序集”是不起作用的选项,而其他选项则起作用。 :-/
    猜你喜欢
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多