12 Stimmen

Neue iPhone App als Update zur alten App, gleicher Bundle Identifier, Xcode gibt Fehler

Ich habe derzeit eine App im App Store und auf meinem Gerät, die für diesen Beitrag MyApp1 genannt wird, mit dem Bundle-Bezeichner com.myname.myapp .

In den letzten Wochen habe ich die gesamte Anwendung von Grund auf neu geschrieben und viele neue Funktionen hinzugefügt, und zwar in einem neuen Xcode-Projekt neben dem alten. Soweit iTunes Connect und iOS betroffen sind, sollte es sich jedoch immer noch um ein Update der alten (Version der) App handeln.

Während des Tests habe ich beide Anwendungen nebeneinander auf meinem Gerät und im Simulator laufen lassen, wobei die neue Anwendung den Bundle Identifier com.myname.myapp2 und alles funktionierte einwandfrei.

Aber jetzt, wo die App fertig ist, möchte ich, dass sie die alte App auf meinem Gerät und im Simulator überschreibt/aktualisiert, um zu sehen, ob der Code, der die Daten aus der alten App importiert, wie erwartet funktioniert. Also habe ich den Bundle-Identifikator der neuen App in ihrer Info.plist a com.myname.myapp und wählte Build and Debug in Xcode. Aber anstatt dass die neue App die alte App überschreibt, während sie immer noch die gleiche Documents damit es die alten Daten importieren konnte, wie ich es erwartet hatte, erhielt ich eine Fehlermeldung.

Das ist es, was ich tue und was passiert ist:

  • Simulator: Reset cache
  • Xcode für MyApp1: Clean All Targets
  • Xcode für MyApp1: Build and Run (mit Release Konfiguration)
  • MyApp1: Ändern Sie einige NSUserDefaults Daten über die App, Änderungen, die später von MyApp2 importiert werden sollen, die ein anderes Datenmodell verwendet
  • Xcode für MyApp1: Stop
  • Xcode für MyApp2: Clean All Targets
  • Xcode für MyApp2: Build and Run (mit Release Konfiguration)

Was passiert, ist der folgende Fehler zeigt 3 mal, jedes Mal für eine andere Klasse in MyApp2's Console:

Unknown class [class referenced in the MyApp1 MainWindow.xib file] in Interface Builder file.

Es sieht also so aus, als ob aus irgendeinem Grund nicht alle Dateien überschrieben werden, da der Fehler durch die alte Version verursacht wird MainWindow.xib geladen werden.

(Relativ uninteressanter Stapelrahmen: http://cl.ly/1F1w1J1u3t1C2U2o2D2C )

Weiß zufällig jemand, wie ich dies bewerkstelligen kann, wie ich eine im Wesentlichen neue App die alte auf meinem Gerät und im Simulator überschreiben lassen kann, so dass sie immer noch denselben Dokumentenordner verwendet?

Vielen Dank im Voraus!


Dinge, die ich bereits ausprobiert habe, wie von anderen vorgeschlagen, die aber nicht geholfen haben:

  • Neustart von Xcode
  • Neustart des Computers
  • Löschen von build Ordner aus dem Xcode-Projektordner
  • Touch ing MainWindow.xib

3voto

Julio Gorgé Punkte 10018

Laden Sie den Dokumentenordner der alten Anwendung über das Xcode-Organizer-Fenster auf Ihren Mac herunter. Entfernen Sie dann die alte Anwendung vollständig und installieren Sie die neue. Stellen Sie schließlich die Sicherung des Ordners "Dokumente" mit dem Xcode-Organizer wieder her.

0 Stimmen

Ich schätze, das würde für das Testen des importierenden Codes funktionieren, aber ich möchte immer noch wirklich wissen, warum dies (Überschreiben/Aktualisieren von MyApp1 zu MyApp2 unter Verwendung des gleichen Bundle-Bezeichners) nicht funktioniert. Außerdem habe ich ein wenig Angst, es bei Apple als Update einzureichen, da die Aktualisierung bei mir selbst fehlgeschlagen ist...

4 Stimmen

Xcode kann ein bisschen dumm sein, wenn es um das Überschreiben von Dateien geht. Warum simulieren Sie nicht stattdessen ein Upgrade mit einem über iTunes installierten Ad-hoc-Build? Endbenutzer werden Xcode schließlich nicht zum Synchronisieren ihrer Anwendungen verwenden.

0 Stimmen

Oh verdammt, ich komme mir so dumm vor, weil ich nicht selbst daran gedacht habe. Wie auch immer, tat es, und es funktionierte bis zu dem Punkt, wo die App abgestürzt :P Jetzt warten auf die Device Log in Xcode's Organizer zu symbolisieren, um zu sehen, ob ich etwas falsch gemacht, oder wenn Apple tat. Wird upvote und akzeptieren Sie, wenn es sich herausstellt, der Absturz war mein Fehler (was ich vermute, ist der Fall).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X