Comment puis-je écrire une application iPhone entièrement en JavaScript sans en faire une simple application Web?

84

Je ne veux pas prendre le temps d'apprendre Obj-C. J'ai passé plus de 7 ans à faire de la programmation d'applications Web. Ne devrait-il pas y avoir un moyen d'utiliser WebView et d'écrire simplement toute l'application en javascript, en extrayant les fichiers directement des ressources du projet?

Jeff
la source

Réponses:

71

J'ai trouvé la réponse après avoir cherché. Voici ce que j'ai fait:

  1. Créez un nouveau projet dans XCode. Je pense que j'ai utilisé l'application basée sur la vue.

  2. Faites glisser un objet WebView sur votre interface et redimensionnez-le.

  3. À l'intérieur de votre WebViewController.m (ou fichier de nom similaire, selon le nom de votre vue), dans la méthode viewDidLoad:

    NSString * filePath = [[NSBundle mainBundle] pathForResource: @ "index" ofType: @ "html"];  
    NSData * htmlData = [NSData dataWithContentsOfFile: filePath];  
    if (htmlData) {  
      NSBundle * bundle = [NSBundle mainBundle]; 
      NSString * chemin = [bundle bundlePath];
      NSString * fullPath = [NSBundle pathForResource: @ "index" ofType: @ "html" inDirectory: path];
      [webView loadRequest: [NSURLRequest requestWithURL: [NSURL fileURLWithPath: fullPath]]];
    }
  4. Désormais, tous les fichiers que vous avez ajoutés en tant que ressources au projet peuvent être utilisés dans votre application Web. J'ai un fichier index.html comprenant des fichiers javascript et css et image sans aucun problème. La seule limitation que j'ai trouvée jusqu'à présent est que je ne peux pas créer de nouveaux dossiers afin que tous les fichiers encombrent le dossier des ressources.

  5. Astuce: assurez-vous d'avoir ajouté le fichier en tant que ressource dans XCode ou le fichier ne sera pas disponible. J'ai ajouté un fichier vide dans XCode, puis j'ai fait glisser mon fichier sur le dessus dans le Finder. Cela a fonctionné pour moi.

Remarque: je me rends compte qu'Obj-C ne doit pas être si difficile à apprendre. Mais comme j'ai déjà cette application dans JS et que je sais qu'elle fonctionne dans Safari, c'est un cycle de développement beaucoup plus rapide pour moi. Un jour, je suis sûr que je vais devoir m'effondrer et apprendre l'Obj-C.

Quelques autres ressources que j'ai trouvées utiles:

Appeler Obj-C depuis javascript: appeler object-c depuis javascript

Appeler javascript depuis Obj-C: développement d'applications iPhone pour les pirates Web

Lecture de fichiers à partir du bundle d'applications: uiwebview

Jeff
la source
Fait intéressant, je regardais juste le code pour GitX (application MacOS standard) ce week-end et je pense que c'est aussi ce qu'ils font. wiki.github.com/pieter/gitx
Pat Notz
1
Pour le problème d'encombrement, essayez d'ajouter un répertoire à votre projet xcode et sélectionnez "Créer des références de dossier ..." au lieu de "Créer récursivement des groupes ...".
Rhythmic Fistman
1
+1. Et je suis presque sûr que vous pouvez utiliser la même technique pour créer une application pour téléphone Android. Et, vraisemblablement, les autres smartphones feront évoluer leurs navigateurs pour prendre en charge Javascript et vous pourrez ensuite les prendre en charge également. Le HTML / CSS / JavaScript multiplateforme est la voie du 21e siècle. Le code natif spécifique à la plate-forme est sûrement passé de mode depuis longtemps?
MarkJ
22

Consultez PhoneGap sur http://www.phonegap.com, ils prétendent qu'il vous permet d'intégrer JavaScript, HTML et CSS dans une application iPhone native.

Chris Samuels
la source
7

Pour ceux qui font cela sur iPhone 2.1 (peut-être 2.0), vous n'avez PAS besoin de créer de services spéciaux pour le stockage de données local. MobileSafari semble prendre en charge l'API de base de données SQL HTML5 / WHATWG. Il s'agit de la même API prise en charge par les versions récentes de Safari et Firefox.

Si vous utilisez une boîte à outils comme Dojo ou ExtJS qui offre une abstraction de stockage, votre code devrait fonctionner sur à peu près tous les navigateurs modernes, y compris MobileSafari.

Pour tester, ouvrez http://robertsanders.name/dev/stackoverflow/html5.html sur votre iPhone.

Si vous ouvrez cette page puis regardez sur le système de fichiers d'un iPhone jailbreaké, vous devriez voir une base de données quelque part dans / private / var / mobile / Library / WebKit / Databases /. Il y a même un répertoire de bases de données ouvertes sur le Web.

root # sqlite3 /private/var/mobile/Library/WebKit/Databases/Databases.db SQLite version 3.5.9 Entrez ".help" pour obtenir des instructions

sqlite> .databases fichier de nom de seq


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

sqlite> .tables

Origines des bases de données

sqlite> sélectionnez * dans les bases de données;

1 | http_robertsanders.name_0 | NoteTest | Database | Exemple d'API | 20000 | 0000000000000001.db

sqlite> sélectionnez * dans Origins;

http_robertsanders.name_0 | 5242880

Robert Sanders
la source
4

Vous pouvez créer une application sans connaître d'obj-C. Le framework QuickConnectiPhone vous permet de le faire. Consultez http://tetontech.wordpress.com pour savoir comment l'utiliser ainsi que d'autres façons de faire ce que vous avez demandé.

Lee
la source
2

Vous devriez avoir le wrapper natif écrit en Objective C. Ce wrapper peut contenir très peu de lignes de code (comme 10) nécessaires pour créer une WebView et la naviguer vers l'adresse donnée sur Internet (où réside votre application). Mais dans ce cas, votre application doit être une application Web complète (je veux dire, utilisez non seulement le JavaScript, mais aussi du HTML pour le balisage).

Sergey Mikhanov
la source
2

J'ai rencontré ce même problème. J'ai déjà un jeu entièrement écrit en Javascript. J'adorerais créer une version compatible iPhone, mais Obj-C est exagéré. Ce que j'ai fini par faire, c'est d'utiliser WebView pour pointer vers une URL spéciale de l'application iPhone. Après y avoir réfléchi, je suppose que je pourrais simplement déplacer ces fichiers vers le répertoire de l'application et les exécuter localement.

Dawnerd
la source
2

Il n'y a pas moyen de faire cela avec les API Apple actuelles. Votre pari le plus proche est d'écrire une simple application iPhone native qui intègre le navigateur Webkit. Cela vous permettra de parcourir votre application xhtml / js localement.

Si vous souhaitez stocker des données, vous devrez aller plus loin et inclure un serveur http léger qui serveur votre application et fournit des appels pour stocker et récupérer des données. Probablement pas une solution idéale pour vous, mais peut-être moins de travail qu'une application Obj-C complète.

En remarque, Obj-C est assez facile à apprendre. Il y a des tonnes d'exemples dans le SDK. La communauté est forte et répondra aux questions bien posées sans hésitation.


la source
Vous pouvez utiliser le stockage local via l'API de stockage SQL WHATWG / HTML5 pour JavaScript. Voir ma réponse pour plus d'informations.
Robert Sanders
1

J'utilise phonegap depuis un moment et il semble avoir les meilleurs résultats pour moi. Je publierai mon expérience dans une semaine environ avec un lien vers mon application également.


la source
maintenant approuvé par apple blogs.nitobi.com/jesse/2009/11/20/phonegapp-store-approval
Neo42
1

Titanium Mobile est également une option - il vous permet d'écrire du JavaScript qui sera traduit en Objective-C.

Josh Brown
la source
Est-ce vraiment traduit en Objective-C? Je pense qu'il est exécuté dans un composant de navigateur Web comme PhoneGap.
Jonas