2017-02-14 4 views
3

Ich habe mehrere andere Beiträge zu SO und anderswo über diesen Fehler (System.InvalidOperationException: You MUST call Xamarin.Forms.Init(); prior to using it. at Xamarin.Forms.Device.get_PlatformServices) gesehen, aber keiner von ihnen wirft ein Licht auf meine besondere Situation.Xamarin Forms Fehler - 'Sie müssen Xamarin.Forms.Init() aufrufen; Vor der Verwendung '- TestFlight (iOS) nur

Ich habe eine Xamarin.Forms-Anwendung erstellt, die auf Android-Geräten (Emulatoren und Geräten, einschließlich der Verteilung über Google Play) hervorragend funktioniert und sowohl auf dem iPhone-Simulator als auch auf dem iPhone funktioniert. Und wenn ich sage "funktioniert gut", meine ich "ist in der Lage, ohne Fehler auf die MainPage zu gelangen."

Wenn ich jedoch die Ad-Hoc-Bereitstellung verwende und sie auf Apple hochläd, damit sie mit TestFlight verteilt werden kann, zeigt die von TestFlight heruntergeladene Version den Begrüßungsbildschirm wie erwartet an und stürzt dann ab, ohne die MainPage anzuzeigen. Beim Betrachten der Geräteprotokolle wird der obige Fehler angezeigt, und bei einigen Internetuntersuchungen wurde deutlich, dass mein AppDelegate global::Xamarin.Forms.Forms.Init(); als erste Zeile in der FinishedLaunching()-Methode haben muss.

Also ging ich, um einen Blick darauf zu werfen und diese Zeile in diese Methode in dieser Datei zu setzen, und siehe da, es ist schon da. Dies ist nicht unerwartet, angesichts der Tatsache, dass die App auf der SIM funktioniert, und auf dem iPhone bei der Bereitstellung direkt aus Visual Studio.

Also meine Frage ist "Warum schlägt Ad-Hoc-Bereitstellung fehl, wenn alle anderen Bereitstellungstypen nicht, und was kann ich tun, um dieses Problem zu beheben und die App tatsächlich über TestFlight in ausführbarer Weise zu verteilen?"

Antwort

1

Ich war in der Lage, das Problem zu lösen, indem Sie den Befehl (global::Xamarin.Forms.Forms.Init();) zuerst in jedem Konstruktor in jeder Klasse in den iOS-Plattform-spezifischen Diensten setzen. Es ist möglich, dass nur eine wirklich notwendig war, aber es scheint kein Problem zu sein, diesen bestimmten Befehl zu überlagern, und falls mehr als eine der Dienste aufgerufen wird, bevor die App FinishedLaunching() AppDelegate aufgerufen wird, dann scheint im ersten Aufruf notwendig zu sein, der je nach Umgebung und anderen Variablen, die überprüft werden können, möglicherweise durch den Programmablauf variieren kann.

Verwandte Themen