web-dev-qa-db-fra.com

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

Je ne veux pas prendre le temps d'apprendre l'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 la WebView et d'écrire simplement l'application entière en javascript, en tirant les fichiers directement des ressources du projet?

84
Jeff

J'ai trouvé la réponse après avoir cherché autour. 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.

  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 * path = [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 sont disponibles pour une utilisation dans votre application Web. J'ai un fichier index.html comprenant javascript et css et des fichiers image sans problème. La seule limitation que j'ai trouvée jusqu'à présent est que je ne peux pas créer de nouveaux dossiers, donc 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 en haut dans le Finder. Cela a fonctionné pour moi.

Remarque: je me rends compte que Obj-C ne doit pas être si difficile à apprendre. Mais comme j'ai déjà cette application dans JS et 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 devrai m'effondrer et apprendre l'Obj-C.

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

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

Appel de javascript depuis Obj-C: développement d'applications iphone pour les pirates Web

Lecture de fichiers à partir d'un ensemble d'applications: iwebview

71
Jeff

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

22
Chris Samuels

Pour ceux qui le font 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 Desktop 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 n'importe quel navigateur moderne, y compris MobileSafari.

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

Si vous ouvrez cette page puis regardez 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 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 | Base de données | Exemple d'API | 20000 | 0000000000000001.db

sqlite> sélectionnez * dans Origins;

http_robertsanders.name_0 | 5242880

7
Robert Sanders

Vous pouvez créer une application sans connaître aucun 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é.

4
Lee

regardez le nouveau o'reilly book sur la question

2
cris

Vous devriez avoir le wrapper natif écrit en Objective C. Ce wrapper pourrait contenir très peu de lignes de code (comme, 10) nécessaires pour créer un WebView et le 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).

2
Sergey Mikhanov

J'ai rencontré ce même problème. J'ai déjà un jeu entièrement écrit en Javascript. J'adorerais faire une version conviviale pour iPhone, mais Obj-C est une exagération. Ce que j'ai fini par faire, c'était 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.

2
dawnerd

Il n'y a aucun moyen de le faire avec les API Apple actuelles. Votre pari le plus proche est d'écrire une application iPhone native simple 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 gère votre application et fournit des appels pour stocker et récupérer des données. Probablement pas une solution idéale pour vous, mais probablement 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 sans hésitation à des questions bien posées.

2
jsapara

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

1
shawn

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

1
Josh Brown

Au moins 2 autres personnes ont mentionné l'intervalle téléphonique, mais je pensais que je publierais cela aussi et mentionnerais que Apple a approuvé le cadre de l'intervalle téléphonique. Donc, maintenant, votre application ne sera pas rejetée par Apple juste parce que vous utilisez PhoneGap.

Article de blog sur phonegap et Apple - http://blogs.nitobi.com/jesse/2009/11/20/phonegapp-store-approval/

Phone Gap Home

0
Neo42