2011-06-26 17 views
8

Me he encontrado con un problema extraño que me ha tenido rascándome la cabeza durante la última hora.xcode 4 + phonegap ... no se actualiza JS al compilar?

Estoy trabajando en una aplicación para iPad con Xcode 4 y PhoneGap. Está usando jQuery. Puse todas mis JS en un archivo scripts.js.

Las cosas están funcionando bien.

Paso aproximadamente una hora haciendo muchos ajustes de CSS. Actualizaba el archivo CSS, detenía la aplicación, reconstruía e insertaba el simulador de iPad o mi iPad. Eso ha estado funcionando bien. Cada actualización del archivo CSS se refleja en la nueva compilación.

Luego tuve que actualizar el archivo JS. No pude hacer que las cosas funcionasen y finalmente me di cuenta de que ninguno de mis cambios de JS realmente se ponía en la compilación. Finalmente borré por completo mi archivo JS, lo reconstruí y todavía no se actualiza.

El archivo que estoy actualizando se está actualizando en el buscador en la carpeta del proyecto (puedo hacer clic derecho en "ver en el buscador" y ese archivo, de hecho, se actualiza).

Así que estoy perplejo. ¿El compilador xcode guarda en caché el archivo JS de alguna manera en lugar de capturar el archivo actualizado? ¿Hay alguna manera de obligarlo a tomar el JS actualizado?

Respuesta

4

Bueno, después de un poco más de google, este parece ser un problema común. Xcode parece almacenar en caché los archivos incluso después de haberlos editado.

Parece que una opción es ejecutar el comando 'limpiar' antes de una nueva compilación. Lo intenté, sin suerte.

Parece que otras soluciones implican la reconstrucción del archivo .plist cada vez. No entiendo plenamente que (todavía) en términos de cómo hacerlo automáticamente, pero he encontrado esta solución:

  • Abra el archivo de .Plist
  • cambio de algo (en mi caso, puedo cambiar el nombre de una el icono de la aplicación archivos cada vez)
  • parada de construir

hacer que las fuerzas mágicamente Xcode para agarrar finalmente todos los archivos actualizados y hace una compilación adecuada.

No puedo explicar por qué Xcode parece estar muy contento de tomar mi archivo .css actualizado todas las veces, pero no actualizará los archivos .html o .js sin antes hacer esto .plist file edit.

Parece que Apple todavía tiene algunos errores que resolver. Supongo que tendremos que esperar pacientemente la próxima descarga de 4gig .x. ;)

+0

Esto funcionó para mí (XCode 4.2.1, PhoneGap 1.3.0). La "Carpeta de compilación limpia ..." mencionada anteriormente no funcionó. Ahora, los cambios subsiguientes de JS se reconstruyen automáticamente. Me pregunto si una secuencia de comandos previa al shell 'touch $ BUILT_PRODUCTS_DIR/$ INFOPLIST_PATH' (ver http://stackoverflow.com/questions/7944185/how-to-get-xcode-to-add-build-date-time-to -info-plist-file) haría el truco para mantener esto funcionando normalmente. –

2

no tengo mac en este momento, pero pocas cosas para probar:

  • tratar de ver su actuación generación de proyecto (o prebuild o algo así) donde se supone que la carpeta www a copiar.

  • Intenta cambiar index.html y ver si funciona.

  • intenta copiar pegar todo el código javascript para etiqueta de script index.html

  • intenta validar su código JavaScript (Por ejemplo: Google Closure Compiler) y ver si no tiene problemas

+0

Xcode/Phonegap tratar de validar un archivo .js antes de compilar? Eso podría ser. Déjame ejecutarlo a través de JSLint ... –

+0

No, no es así. Simplemente copia lo que sea que hayas escrito. Compila solo el envoltorio Obj-C que permite a iOS ejecutar Phonegap. Phonegap no compila/convierte js. Es un poco molesto, especialmente si está acostumbrado al entorno de desarrollo con Firebug y amigos. – petraszd

+0

Hmm ... incluso editar index.html no se actualiza al hacer una compilación. Muy extraño ... –

10

Me pareció necesario mantener presionado el botón Opción al hacer clic en el comando de menú que convierte el comando de "Limpiar" en "Limpiar carpeta de compilación ..." y esto hizo que mis activos se actualizaran.

+0

¡Esto resolvió el problema que estaba teniendo! – seaneshbaugh

+0

Esto también funcionó para mí. ¡Gracias! – CWSpear

+0

¡Ni siquiera sabía que el botón de opción cambiaba las acciones del menú desplegable! Esta debería ser la respuesta aceptada. –

3

Sólo añadir un nuevo "Run Script" fase de construcción a su objetivo en XCode y pegar esto:

touch -cm ${SRCROOT}/www 
+0

Esto funciona como un encanto. Para admitir directorios con espacios, uno debe agregar comillas alrededor del último parámetro. – AndiDog

+0

Esto está integrado en PhoneGap ahora (al menos en 2.1.0) – Garrett

0

solo tuve este problema, y ​​el comando de fase de construcción publicado aquí (que en realidad es ahora utilizado por el proyecto Phonegap predeterminado) no funcionó para mí, ya que estoy editando mis archivos en una máquina virtual Windows de Parallels, en Visual Studio.

Lo que hice, fue utilizar esto en su lugar, en la fase de construcción de mi proyecto:

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

Eso es básicamente un toque recursiva. Luego configuré Visual Studio para que siempre vuelva a cargar el archivo, si se ha guardado. Espero que esto ayude.

0

no estoy seguro de lo que lo hizo, pero hice lo siguiente:

  1. cambia un valor de icono en mi MyProject-Info.plist
  2. Salir del simulador de
  3. Product -> (hold option) -> Clean Build Folder
  4. Run
1

Encuentra el archivo llamado copy-www-build-step.sh.

mina estaba en [project_folder]/platforms/ios/cordova/lib/copy-www-build-step.sh

En ese archivo, encuentra las líneas que comienzan rsync -a "...

Añadir -c para las líneas de rsync, así que listo rsync -a -c "...

copy-www-build-step.sh es el script que copia los archivos desde www/a donde van dentro del archivo de la aplicación. rsync es el comando de copia de archivos de Unix que usan. Sin eso -c, rsync simplemente compara el tamaño del archivo en cada archivo y carpeta y los copia si el tamaño ha cambiado, y un par de espacios o citas no cuentan como un cambio suficiente. Con el -c, los comprueba y compara las sumas de comprobación, que captarán incluso los cambios más pequeños.

Creo que esto funcionará mejor, porque no es una solución, realmente soluciona la causa del problema.

2

Ninguno de ellos trabajó para mí :(

La única manera que puedo conseguir lo que hay que actualizar su HTML y JS es mediante la ejecución de un "run ios corodova" en la línea de comandos.

0

Tuve este mismo problema con el simulador de iOS, Probé la mayoría de las sugerencias anteriores sin éxito, no captaría mis cambios. Más tarde se me ocurrió otra posible solución, que funcionó:

Elimine la aplicación del simulador. (es decir, haga clic y mantenga presionado el ícono, luego presione la X cuando empiece a temblar, luego Hardware Home) Luego vuelva a ejecutar desde xCode.

(NB: "cordova construir ios" también se requiere)

-1

solución Nada de trabajo por encima de finalmente vi hay dos archivo index.html y el archivo .js en el proyecto creado con la herramienta de línea de comandos de Córdoba

Así que hacer cambios como se muestra a continuación en la carpeta estadificación enter image description here

Cuestiones relacionadas