André Krämers Blog

Lösungen für Ihre Probleme

Vermutlich jeder, der bereits eine App geschrieben hat, kennt dieses Gefühl der Ungeduld wenn man die letzten Features der App entwickelt. Man möchte einfach nur noch so schnell wie möglich fertig sein, um sein Werk endlich in den App-Store schieben zu können und es somit der Welt zu präsentieren.

Während der letzte Schritt, nämlich das Deployment in den Store, unter Android relativ einfach ist, stellt es unter iOS eine echte Herausforderung dar.

Abgesehen von unzähligen Einstellungen, die in iTunes Connect vorzunehmen sind, müssen Zertifikate generiert und heruntergeladen werden, mit denen die App später signiert wird.

Gerade wer nicht täglich auf dem Mac Arbeitet verliert hier leicht den Überblick über die notwendigen Schritte. So ging es auch einem Kunden von mir Anfang des Monats. Da er nicht so häufig mit dem Mac arbeitet, sondern die ganze iOS Entwicklung unter Visual Studio für Windows durchführte, buchte er meine Unterstützung beim letzten Schritt, dem Deployment der App.

Nachdem wir sämtliche Zertifikate generiert, iTunes Connect konfiguriert und seinen Mac so weit vorbereitet hatten, folgte nun endlich das Deployment in den Store.

Der Upload verlief nach dem dritten Versuch auch erfolgreich, so dass es jetzt hieß: Daumen drücken und warten.

Während man früher recht lange warten musste, prüft Apple die meisten Apps mittlerweile innerhalb von 1 - 2 Tagen.

Bei meinem Kunden war es sogar schon am nächsten Tag so weit, nur leider war das Ergebnis etwas enttäuschend. Die App wurde wegen eines Absturzes während der Prüfung abgelehnt.

Aus den Log-Dateien konnten wir folgendes herauslesen:

Exception Type:  EXC_BAD_ACCESS (SIGABRT)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000000
VM Region Info: 0 is not in any region.  Bytes before following region: 4315054080

Der mitgelieferte Call Stack war leider wenig aufschlussreich, so dass nun raten angesagt war.

Die erste Vermutung lautete, dass Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000000 auf eine NullReferenceException deuten könnte, da versucht wurde auf die Adresse 0 zuzugreifen.

Mein Kunde untersuchte diese Vermutung darauf hin und fann relativ schnell das Problem: Er griff während des Starts der Anwendung auf einen Datensatz zu, den er zur Entwicklungszeit auf seinem Testgerät zurvor bereits angelegt hatte, den es bei einer Neuinstallation jedoch noch nicht gab.

Sollte Ihre App also einen aufgrund eines ähnlichen Fehlers während der Prüfung durch Apple abgelehnt werden, dann haben Sie folgende Möglichkeiten um den Fehler schnell und effektiv finden zu können:

  • Sie Deinstallieren die Entwicklungsversion vom Simulator und ihrem Testgerät und prüfen ob der Fehler sich hier auch nachstellen lässt.
  • Sollte der Fehler auch dann nicht reproduzierbar sein, dann können Sie den Simulator über den Menüpunkt `Hardware -> Erase All Content and Settings …” in den Ursprungszustand versetzen und anschließend erneut prüfen.

Sollten beide Punkte nicht zum Erfolg führen, dann könnten eventuell andere Ländereinstellungen ein Problem sein. Hier lohnt es sich also testweise das eigene Gerät einfach mal auf en_us zu stellen.