Xamarin表单错误 - '你必须调用Xamarin.Forms.Init();在使用之前' - 仅限TestFlight(iOS)

时间:2017-02-14 20:57:48

标签: ios xamarin.forms testflight

我在SO和其他地方看到过有关此错误的其他几篇帖子(System.InvalidOperationException: You MUST call Xamarin.Forms.Init(); prior to using it. at Xamarin.Forms.Device.get_PlatformServices),但没有一篇文章说明我的具体情况。

我已经创建了一个适用于Android(模拟器和设备,包括通过Google Play分发)的Xamarin.Forms应用程序,并且可以在iPhone模拟器上以及配置到iPhone时正常运行。当我说“工作正常”时,我的意思是能够毫无错误地访问MainPage。'

但是,当我使用Ad-Hoc部署并将其上传到Apple以便可以使用TestFlight进行分发时,TestFlight下载的版本会按预期显示启动画面,然后崩溃而不显示MainPage。在查看设备日志时,会出现上述错误,并且在进行一些Internet研究时,我的AppDelegate需要global::Xamarin.Forms.Forms.Init();作为FinishedLaunching()方法的第一行。

所以我去看了一下,把那行中的那一行放在那个文件中,瞧,它已经存在了。这并不意外,因为应用程序可以在SIM上运行,而在iPhone上直接从Visual Studio部署

所以我的问题是'为什么Ad-Hoc部署在所有其他部署类型都没有时失败,我该怎么做才能克服这个问题并让应用程序以可运行的方式通过TestFlight实际分发? #39;

2 个答案:

答案 0 :(得分:1)

我能够通过在iOS平台特定服务的每个类中的每个构造函数中放置命令(global::Xamarin.Forms.Forms.Init();)来解决此问题。可能只有一个是非常必要的,但它似乎没有引起过度部署该特定命令的任何问题,并且在AppDelegate&之前调用多个服务的情况下#39;调用了FinishedLaunching()方法,这在被调用的第一个方法中似乎是必要的,这可能因程序流程而异,具体取决于环境和可能检查的其他变量。

答案 1 :(得分:0)

在.iOS项目中,请确保该行 “ global :: Xamarin.Forms.Forms.Init();” 是事件的第一行 “公共重写布尔FinishedLaunching(UIApplication应用程序,NSDictionary选项)” 在 “ AppDelegate.cs”文件。

在.UWP VB项目中,请确保该行 “ Xamarin.Forms.Forms.Init(e)” 在行之后 在“ AddHandler rootFrame.NavigationFailed,AddressOf OnNavigationFailed”中 “受保护的替代子OnLaunched(例如Windows.ApplicationModel.Activation.LaunchActivatedEventArgs)”事件 在“ App.Xaml.vb”文件中。

在.Android项目中 “ global :: Xamarin.Forms.Forms.Init(this,savedInstanceState);” 在行之后 “ base.OnCreate(savedInstanceState);” 在“受保护的覆盖无效的OnCreate(Bundle savedInstanceState)”事件中。

希望这会有所帮助。