2011-06-26 16 views
8

Wpadłem w dziwny problem, który sprawił, że drapałem się przez ostatnią godzinę.xcode 4 + phonegap ... nie aktualizuje JS po kompilacji?

Pracuję nad aplikacją na iPada przy użyciu Xcode 4 i PhoneGap. Używa jQuery. Wszystkie moje JS umieściłem w pliku scripts.js.

Rzeczy działają dobrze.

Spędzam około godziny robiąc wiele poprawek CSS. Zaktualizowałbym plik CSS, zatrzymam aplikację, przebuduję i wepchnę do symulatora iPada lub mojego iPada. To działa dobrze. Każda aktualizacja pliku CSS znajduje odzwierciedlenie w nowej kompilacji.

Następnie musiałem zaktualizować plik JS. Nie mogłem zmusić rzeczy do działania i wtedy w końcu zrozumiałem, że żadna z moich zmian JS nie została faktycznie wprowadzona do kompilacji. W końcu całkowicie wykasowałem mój plik JS, przebudowałem go i nadal nie aktualizuję.

Zaktualizowany plik jest aktualizowany w wyszukiwarce w folderze projektu (mogę kliknąć prawym przyciskiem myszy "widok w wyszukiwarce", a ten plik jest rzeczywiście zaktualizowany).

Więc jestem zakłopotany. Czy kompilator kodu XC buforuje plik JS w jakiś sposób, zamiast pobierać zaktualizowany plik? Czy istnieje sposób zmuszenia go do pobrania zaktualizowanego JS?

Odpowiedz

4

Cóż, po kilku innych badaniach, wydaje się, że jest to powszechny problem. Xcode wydaje się buforować pliki nawet po ich edycji.

Wydaje się, że jedną z opcji jest uruchomienie polecenia "clean" przed nową kompilacją. Próbowałem, bez powodzenia.

Inne rozwiązania prawdopodobnie polegają na przebudowie pliku .plist za każdym razem. I nie w pełni zrozumieć, że (jeszcze) w kategoriach, jak to zrobić automatycznie, ale nie znaleźliśmy tego obejścia:

  • otworzyć plik .plist
  • coś zmienić (w moim przypadku zmiany nazwy jednego z ikona app plików za każdym razem)
  • zapisać i budować

Doing że magicznie zmusza Xcode, by w końcu chwycić wszystkie zaktualizowane pliki i zrobić właściwą kompilację.

Nie mogę wyjaśnić, dlaczego Xcode wydaje się być całkowicie szczęśliwy, łapiąc mój zaktualizowany plik .css za każdym razem, ale nie aktualizuje plików .html lub .js bez wcześniejszego edytowania pliku .plist.

Wygląda na to, że Apple wciąż ma kilka błędów do opracowania. Sądzę, że będziemy musieli cierpliwie czekać na kolejne 4gig .x relase tego. ;)

+0

To działało dla mnie (XCode 4.2.1, PhoneGap 1.3.0). "Wspomniany wyżej folder" Clean Builder "nie działa. Teraz kolejne zmiany JS są automatycznie przebudowywane. Zastanawiam się, czy skrypt powłoki przed uruchomieniem 'BUILT_PRODUCTS_DIR/$ INFOPLIST_PATH' (patrz http://stackoverflow.com/questions/7944185/how-to-get-xcode-to-add-build-date-time-to -info-plist-file) zrobiłoby lewę, aby utrzymać to działa normalnie. –

2

nie mam mac teraz, ale kilka rzeczy, aby spróbować:

  • spróbować spojrzeć na swojej kompilacji projektu (lub prebuild lub coś) działania folderu www gdzie ma być skopiowany.

  • Spróbuj zmienić index.html i sprawdzić, czy działa.

  • Spróbuj skopiować wkleić cały kod JavaScript do index.html tagu skrypt

  • próby sprawdzenia JavaScript (na przykład Google Closure Compiler) i sprawdzić, czy nie ma problemów

+0

Does Xcode/PhoneGap spróbować i sprawdzić poprawność pliku js przed kompilacją? To może być to. Pozwól mi uruchomić przez JSLint ... –

+0

Nie, nie. Po prostu kopiuje to, co napisałeś. Kompiluje tylko otok Obj-C, który pozwala iOSowi na uruchamianie phonegapa. Phonegap nie robi kompilacji/konwersji js. Jest to trochę denerwujące, szczególnie jeśli jesteś przyzwyczajony do środowiska programistycznego z firebugiem i przyjaciółmi. – petraszd

+0

Hmm ... nawet edycja index.html nie aktualizuje się podczas kompilacji. Bardzo dziwne ... –

10

Po kliknięciu polecenia menu, które zmienia polecenie z "Wyczyść" na "Wyczyść folder kompilacji ...", musiałem przytrzymać przycisk Opcje, co spowodowało odświeżenie moich zasobów.

+0

To rozwiązało problem, który miałem! – seaneshbaugh

+0

To też zadziałało dla mnie. Dzięki! – CWSpear

+0

Nie wiedziałem nawet, że przycisk opcji zmienił menu rozwijane! To powinna być zaakceptowana odpowiedź. –

3

Wystarczy dodać nową „Run Script” budować fazy do celu w Xcode i wklej to:

touch -cm ${SRCROOT}/www 
+0

Działa to jak urok. Aby obsługiwać katalogi ze spacjami, należy dodać cytaty wokół ostatniego parametru. – AndiDog

+0

Jest to wbudowane w PhoneGap (przynajmniej w wersji 2.1.0) – Garrett

0

prostu miałem ten problem i polecenia fazy budowy zamieszczonych tutaj (który jest faktycznie teraz używany przez domyślny projekt Phonegapa) nie działał dla mnie, ponieważ edytuję swoje pliki w Parallels Windows VM, w Visual Studio.

co zrobiłem, było to wykorzystać zamiast w fazie budowy mojego projektu:

find "${PROJECT_DIR}/www/." -exec touch -cm {} \; 

Thats zasadzie rekurencyjną dotyku. Następnie skonfigurowałem Visual Studio, aby zawsze ponownie ładować plik, jeśli został zapisany. Mam nadzieję że to pomoże.

0

nie jestem pewien, który to zrobił, ale zrobiłem co następuje:

  1. Zmieniono wartość ikon w moim MyProject-Info.plist
  2. Quit symulatorze
  3. Product -> (hold option) -> Clean Build Folder
  4. Run
1

Znajdź plik o nazwie copy-www-build-step.sh.

Kopalnia była w [project_folder]/platforms/ios/cordova/lib/copy-www-build-step.sh

W tym pliku, znajdź linie zaczynające rsync -a "...

Dodaj -c do linii rsync, więc oni gotowi rsync -a -c "...

copy-www-build-step.sh jest skryptem, który kopiuje pliki z www/do miejsca, w którym znajdują się wewnątrz pliku aplikacji. rsync to używane przez nich polecenie kopiowania plików unix. Bez tego -c, rsync porównuje tylko rozmiar pliku w każdym pliku i folderze i kopiuje je, jeśli zmienił się rozmiar, a kilka spacji lub cudzysłowów nie jest wystarczającą zmianą. Przy pomocy -c sumuje je i porównuje sumy kontrolne, które wychwycą nawet najmniejsze zmiany.

Myślę, że to zadziała najlepiej, ponieważ nie stanowi obejścia problemu, lecz faktycznie rozwiązuje problem.

2

Żaden z nich nie pracował dla mnie :(

Jedynym sposobem mogę dostać coś do aktualizacji swojego html i js jest uruchomienie „corodova ios Run” w wierszu poleceń.

0

miałem ten sam problem z iOS Simulator, próbowałem większość sugestii powyżej bez powodzenia, nie odebrałbym moich zmian. Później nastąpiło inne możliwe rozwiązanie, które zadziałało:

Usuń aplikację z symulatora. (Kliknij i przytrzymaj ikonę, a następnie naciśnij X, gdy zaczyna się poruszać, następnie Home sprzętu) Następnie ponownie uruchomić z xCode.

(NB: „Cordova budować ios” również była wymagana)

-1

Nic rozwiązanie powyższych prac wreszcie widziałem tam dwa plik index.html i plik .js w projekcie utworzonych za pomocą narzędzia wiersza poleceń Cordova

więc dokonać zmian jak poniżej pokazano w folderze Staging enter image description here

Powiązane problemy