Ich bin auf ein seltsames Problem gestoßen, bei dem ich mich in der letzten Stunde am Kopf kratze.
Ich arbeite an einer iPad-App mit Xcode 4 und PhoneGap. Es verwendet jQuery. Ich habe alle meine JS in eine Datei scripts.js gelegt.
Die Dinge funktionieren gut.
Ich habe ungefähr eine Stunde damit verbracht, viel CSS zu optimieren. Ich würde die CSS-Datei aktualisieren, die App stoppen, neu erstellen und zum iPad-Simulator oder iPad schieben. Das hat gut funktioniert. Jede Aktualisierung der CSS-Datei spiegelt sich im neuen Build wider.
Ich musste dann die JS-Datei aktualisieren. Ich konnte die Dinge nicht zum Laufen bringen und dann wurde mir klar, dass keiner meiner JS-Änderungen tatsächlich in den Build eingebaut wurde. Ich habe schließlich meine JS-Datei vollständig ausgeblendet, neu erstellt und es wird immer noch nicht aktualisiert.
Die Datei, die ich aktualisiert habe, wird im Finder im Projektordner aktualisiert (ich kann mit der rechten Maustaste auf "Ansicht im Finder" klicken und diese Datei wird tatsächlich aktualisiert).
Ich bin also ratlos. Speichert der xcode-Compiler die JS-Datei irgendwie, anstatt die aktualisierte Datei zu holen? Gibt es eine Möglichkeit, es zu zwingen, den aktualisierten JS zu greifen?
Nun, nach etwas mehr Googeln scheint das ein häufiges Problem zu sein. Xcode scheint Dateien zu cachen, auch nachdem Sie sie bearbeitet haben.
Eine Option scheint zu sein, den Befehl 'clean' vor einem neuen Build auszuführen. Ich habe das versucht, kein Glück.
Andere Lösungen scheinen jedes Mal die .plist-Datei neu zu erstellen. Ich verstehe das (noch) nicht, was das automatisch anbetrifft, aber ich fand diese Problemumgehung:
Das zwingt magischerweise xcode, endlich alle aktualisierten Dateien zu packen und einen korrekten Build zu erstellen.
Ich kann nicht erklären, warum Xcode vollkommen glücklich scheint, wenn er meine aktualisierte .css-Datei jedes Mal packt, aber die .html- oder or .js-Dateien nicht aktualisiert, ohne diese .plist-Datei zu bearbeiten.
Scheint so, als hätte Apple immer noch ein paar Bugs, die es zu lösen gilt. Ich denke, wir müssen geduldig auf das nächste 4gig .x-Release warten. ;)
Ich fand es notwendig, die Option-Taste zu halten, wenn ich auf den Menübefehl klicke, der den Befehl von "Clean" in "Clean Build Folder ..." umwandelt und dadurch meine Assets aktualisiert.
Ich habe gerade kein Mac, aber nur wenige Dinge, die ich ausprobieren kann:
Versuchen Sie, Ihre Projekt-Build (oder Prebuild oder etwas) -Aktion zu sehen, wo der www-Ordner kopiert werden soll.
Versuchen Sie index.html zu ändern und sehen Sie, ob es funktioniert.
Versuchen Sie, Ihren JavaScript-Code in das index.html -Skript-Tag einzufügen
Versuchen Sie, Ihr Javascript zu validieren (zum Beispiel: Google Closure Compiler) und prüfen Sie, ob es Probleme hat
Keines davon funktionierte für mich: (
Der einzige Weg, wie ich das Ding dazu bringen kann, html und js zu aktualisieren, ist die Ausführung eines "corodova run ios" in der Befehlszeile.
Suchen Sie die Datei copy-www-build-step.sh
.
Meine war in [project_folder]/platforms/ios/cordova/lib/copy-www-build-step.sh
Suchen Sie in dieser Datei die Zeilen beginnend mit rsync -a "...
Füge -c zu den rsync-Zeilen hinzu, so dass sie rsync -a -c "...
copy-www-build-step.sh ist das Skript, das die Dateien von www / in die App-Datei kopiert. rsync ist der Befehl zum Kopieren von Unix-Dateien, den sie verwenden. Ohne -c vergleicht rsync einfach die Dateigröße für jede Datei und jeden Ordner und kopiert sie, wenn sich die Größe geändert hat, und einige Leerzeichen oder Anführungszeichen zählen nicht als ausreichend für eine Änderung. Mit der Option -c werden die Prüfsummen überprüft und die Prüfsummen verglichen, wodurch auch kleinste Änderungen erfasst werden.
Ich denke, das wird am besten funktionieren, weil es keine Problemumgehung ist, sondern tatsächlich die Ursache des Problems behebt.
Ich hatte gerade dieses Problem, und der Build-Phase-Befehl hier (der jetzt eigentlich vom Standard-Phonegap-Projekt verwendet wird) funktionierte für mich nicht, da ich meine Dateien auf einer Parallels Windows VM in Visual Studio bearbeite.
Was ich getan habe, war dies in der Build-Phase meines Projekts:
%Vor%Das ist im Grunde eine rekursive Berührung. Ich habe dann Visual Studio eingerichtet, um die Datei immer neu zu laden, wenn sie gespeichert wurde. Hoffe, das hilft.
Ich hatte das gleiche Problem mit dem iOS-Simulator, ich habe die meisten der obigen Vorschläge ohne Erfolg ausprobiert, es würde meine Änderungen nicht aufnehmen. Später kam mir eine andere mögliche Lösung, die funktionierte:
Löschen Sie die App aus dem Simulator. (dh. Klicken und halten Sie auf das Symbol, dann drücken Sie das X, wenn es zu wackeln beginnt, dann Hardware Home) Führen Sie dann einen Neustart von xCode durch.
(NB: "cordova build ios" wurde ebenfalls benötigt)
Tags und Links javascript xcode4