Je ne veux pas prendre le temps d'apprendre Obj-C. J'ai passé plus de 7 ans à programmer des applications web. Ne devrait-il pas y avoir un moyen d'utiliser le WebView et d'écrire toute l'application en javascript, en tirant les fichiers directement des ressources du projet ?
Réponses
Trop de publicités?J'ai trouvé la réponse après avoir fait des recherches. Voici ce que j'ai fait :
-
Créez un nouveau projet dans XCode. Je pense avoir utilisé l'application basée sur la vue.
-
Faites glisser un objet WebView sur votre interface et redimensionnez-le.
-
Dans votre WebViewController.m (ou un 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\]\]\]; }
-
Maintenant, tous les fichiers que vous avez ajoutés comme ressources au projet sont disponibles pour être utilisés dans votre application web. J'ai un fichier index.html incluant des fichiers javascript, css et images 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, donc tous les fichiers encombrent le dossier des ressources.
-
Astuce : assurez-vous d'avoir ajouté le fichier comme ressource dans XCode, sinon le fichier ne sera pas disponible. J'ai ajouté un fichier vide dans XCode, puis j'ai fait glisser mon fichier par-dessus dans le finder. Cela a fonctionné pour moi.
Note : Je me rends compte que Obj-C ne doit pas être si difficile à apprendre. Mais comme cette application existe déjà en JS et que je sais qu'elle fonctionne dans Safari, le cycle de développement est beaucoup plus rapide pour moi. Un jour, je suis sûr qu'il faudra que je me casse et que j'apprenne Obj-C.
Quelques autres ressources que j'ai trouvées utiles :
Appeler Obj-C à partir de javascript : appeler objective-c depuis javascript
Appeler javascript depuis Obj-C : développement d'applications iphone pour les pirates du web
Lecture des fichiers du paquet d'applications : uiwebview
Découvrez PhoneGap à http://www.phonegap.com Ils affirment qu'il vous permet d'intégrer JavaScript, HTML et CSS dans une application iPhone native.
Pour ceux qui font cela sur iPhone 2.1 (peut-être 2.0), il n'est PAS nécessaire de créer des services spéciaux pour le stockage des données locales. MobileSafari semble prendre en charge l'API de base de données SQL du HTML5/WHATWG. Il s'agit de la même API que celle prise en charge par les versions récentes de Safari et de Firefox.
Si vous utilisez une boîte à outils comme Dojo ou ExtJS qui offre une abstraction de stockage, votre code devrait fonctionner sur pratiquement tous les navigateurs modernes, y compris MobileSafari.
Pour le 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 déverrouillé, 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 nom du fichier seq
0 main /private/var/mobile/Library/WebKit/Databases/Databases.db
sqlite> .tables
Origines des bases de données
sqlite> select * from Databases ;
1|http_robertsanders.name_0|NoteTest|Database|API example|20000|0000000000000001.db
sqlite> select * from Origins ;
http_robertsanders.name_0|5242880
Vous pouvez créer une application sans connaître le moindre obj-C. Le framework QuickConnectiPhone vous permet de le faire. Consultez http://tetontech.wordpress.com pour savoir comment l'utiliser ainsi que d'autres moyens de faire ce que vous avez demandé.
Vous devriez avoir un wrapper natif écrit en Objective C. Ce wrapper pourrait contenir très peu de lignes de code (10 par exemple) nécessaires pour créer un WebView et le faire naviguer vers l'adresse donnée sur Internet (où se trouve votre application). Mais dans ce cas, votre application devrait être une application web complète (je veux dire, utiliser non seulement le JavaScript, mais aussi du HTML pour le balisage).