¿Cómo puedo escribir una aplicación para iPhone completamente en JavaScript sin convertirla en una aplicación web?

84

No quiero tomarme el tiempo para aprender Obj-C. He pasado más de 7 años haciendo programación de aplicaciones web. ¿No debería haber una forma de usar WebView y simplemente escribir toda la aplicación en javascript, extrayendo los archivos directamente de los recursos del proyecto?

Jeff
fuente

Respuestas:

71

Encontré la respuesta después de buscar. Esto es lo que hice:

  1. Crea un nuevo proyecto en XCode. Creo que usé la aplicación basada en vistas.

  2. Arrastre un objeto WebView a su interfaz y cambie el tamaño.

  3. Dentro de su WebViewController.m (o archivo de nombre similar, dependiendo del nombre de su vista), en el método viewDidLoad:

    NSString * filePath = [[NSBundle mainBundle] pathForResource: @ "index" ofType: @ "html"];  
    NSData * htmlData = [NSData dataWithContentsOfFile: filePath];  
    if (htmlData) {  
      NSBundle * paquete = [NSBundle mainBundle]; 
      NSString * ruta = [bundle bundlePath];
      NSString * fullPath = [NSBundle pathForResource: @ "index" ofType: @ "html" inDirectory: path];
      [webView loadRequest: [NSURLRequest requestWithURL: [NSURL fileURLWithPath: fullPath]]];
    }
  4. Ahora, los archivos que haya agregado como recursos al proyecto están disponibles para su uso en su aplicación web. Tengo un archivo index.html que incluye javascript y css y archivos de imagen sin problemas. La única limitación que he encontrado hasta ahora es que no puedo crear carpetas nuevas, por lo que todos los archivos abarrotan la carpeta de recursos.

  5. Truco: asegúrese de haber agregado el archivo como recurso en XCode o el archivo no estará disponible. He estado agregando un archivo vacío en XCode, luego arrastro mi archivo en la parte superior del buscador. Eso ha funcionado para mí.

Nota: me doy cuenta de que Obj-C no debe ser tan difícil de aprender. Pero como ya tengo esta aplicación en JS y sé que funciona en Safari, este es un ciclo de desarrollo mucho más rápido para mí. Algún día estoy seguro de que tendré que romper y aprender Obj-C.

Algunos otros recursos que encontré útiles:

Llamar a Obj-C desde javascript: llamar a aim-c desde javascript

Llamar a javascript desde Obj-C: desarrollo de aplicaciones de iphone para hackers web

Lectura de archivos del paquete de aplicaciones: uiwebview

Jeff
fuente
Curiosamente, este fin de semana estaba mirando el código de GitX (aplicación estándar de MacOS) y creo que esto también es lo que hacen. wiki.github.com/pieter/gitx
Pat Notz
1
Para el problema del desorden, intente agregar un directorio a su proyecto de xcode y seleccione "Crear referencias de carpeta ..." en lugar de "Crear grupos de forma recursiva ...".
Rhythmic Fistman
1
+1. Y estoy bastante seguro de que podrías usar la misma técnica para hacer una aplicación de teléfono Android. Y, presumiblemente, los otros teléfonos inteligentes evolucionarán sus navegadores para admitir Javascript y luego usted también podrá admitirlos. HTML / CSS / JavaScript multiplataforma es la forma del siglo XXI. Seguramente el código nativo retorcido y específico de la plataforma pasó de moda hace mucho tiempo.
MarkJ
22

Echa un vistazo a PhoneGap en http://www.phonegap.com , afirman que te permite incrustar JavaScript, HTML y CSS en una aplicación nativa de iPhone.

Chris Samuels
fuente
7

Para aquellos que hacen esto en iPhone 2.1 (tal vez 2.0), NO es necesario crear ningún servicio especial para el almacenamiento de datos local. MobileSafari parece admitir la API de base de datos SQL HTML5 / WHATWG. Esta es la misma API compatible con las versiones recientes de Safari y Firefox de escritorio.

Si está utilizando un kit de herramientas como Dojo o ExtJS que ofrece una abstracción de almacenamiento, su código debería funcionar en casi cualquier navegador moderno, incluido MobileSafari.

Para probar, abra http://robertsanders.name/dev/stackoverflow/html5.html en su iPhone.

Si abre esa página y luego busca en el sistema de archivos de un iPhone con Jailbreak, debería ver una base de datos en algún lugar en / private / var / mobile / Library / WebKit / Databases /. Incluso hay un directorio de bases de datos abiertas en la web.

root # sqlite3 /private/var/mobile/Library/WebKit/Databases/Databases.db SQLite versión 3.5.9 Ingrese ".help" para obtener instrucciones

sqlite> archivo de nombre de secuencia de bases de datos


0 principal /private/var/mobile/Library/WebKit/Databases/Databases.db

sqlite> .tables

Orígenes de las bases de datos

sqlite> seleccionar * de Bases de datos;

1 | http_robertsanders.name_0 | NoteTest | Base de datos | Ejemplo de API | 20000 | 0000000000000001.db

sqlite> seleccionar * de Origins;

http_robertsanders.name_0 | 5242880

Robert Sanders
fuente
4

Puede crear una aplicación sin conocer ningún obj-C. El marco QuickConnectiPhone le permite hacer esto. Consulte http://tetontech.wordpress.com para saber cómo usarlo, así como otras formas de hacer lo que ha pedido.

Sotavento
fuente
2

Debe tener el contenedor nativo escrito en Objective C. Este contenedor podría contener realmente pocas líneas de código (como, 10) necesarias para crear un WebView y navegar a la dirección dada en Internet (donde reside su aplicación). Pero en este caso, su aplicación debería ser una aplicación web con todas las funciones (quiero decir, use no solo JavaScript, sino también algo de HTML para el marcado).

Sergey Mikhanov
fuente
2

Me encontré con este mismo problema. Ya tengo un juego escrito íntegramente en Javascript. Me encantaría hacer una versión compatible con iPhone, pero Obj-C es una exageración. Lo que terminé haciendo fue usar WebView para señalar una URL especial de la aplicación de iPhone. Después de pensarlo, supongo que podría mover esos archivos al directorio de la aplicación y ejecutarlos localmente.

Dawnerd
fuente
2

No hay forma de hacer esto con las API actuales de Apple. Su apuesta más cercana es escribir una aplicación nativa simple para iPhone que incorpore el navegador webkit. Eso le permitirá navegar por su aplicación xhtml / js localmente.

Si desea almacenar datos, deberá ir un paso más allá e incluir un servidor http liviano que atienda su aplicación y proporcione llamadas para almacenar y recuperar datos. Probablemente no sea una solución ideal para usted, pero posiblemente menos trabajo que una aplicación completa de Obj-C.

Como nota al margen, Obj-C es bastante fácil de aprender. Hay muchos ejemplos en el SDK. La comunidad es fuerte y responderá preguntas bien formuladas sin dudarlo.


fuente
Puede utilizar el almacenamiento local a través de la API de almacenamiento SQL WHATWG / HTML5 para JavaScript. Consulte mi respuesta para obtener más información.
Robert Sanders
1

Titanium Mobile también es una opción: le permite escribir JavaScript que se traduce a Objective-C.

Josh Brown
fuente
¿Está realmente traducido a Objective-C? Creo que se ejecuta en un componente de navegador web como PhoneGap.
Jonas