iPhoneアプリを単なるWebアプリにすることなく、完全にJavaScriptで作成するにはどうすればよいですか?


84

私はObj-Cを学ぶのに時間をかけたくありません。私は7年以上Webアプリケーションプログラミングを行ってきました。WebViewを使用して、アプリ全体をjavascriptで記述し、プロジェクトのリソースからファイルを直接取得する方法があるべきではありませんか?

回答:


71

探し回って答えを見つけました。これが私がしたことです:

  1. XCodeで新しいプロジェクトを作成します。ビューベースのアプリを使ったと思います。

  2. WebViewオブジェクトをインターフェイスにドラッグしてサイズを変更します。

  3. WebViewController.m(またはビューの名前に応じて同様の名前のファイル)内の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. これで、プロジェクトにリソースとして追加したすべてのファイルをWebアプリで使用できるようになります。javascriptとcssを含むindex.htmlファイルと画像ファイルが問題なくあります。これまでに見つけた唯一の制限は、新しいフォルダーを作成できないため、すべてのファイルがリソースフォルダーを乱雑にすることです。

  5. 秘訣:ファイルをXCodeのリソースとして追加したことを確認してください。そうしないと、ファイルは使用できなくなります。XCodeに空のファイルを追加してから、ファイルをファインダーの一番上にドラッグしました。それは私のために働いています。

注:Obj-Cを習得するのはそれほど難しくないはずです。しかし、私はすでにこのアプリをJSに存在させており、Safariで動作することを知っているので、これは私にとってはるかに高速な開発サイクルです。いつの日か、私は分解してObj-Cを学ぶ必要があると確信しています。

私が役立つと思った他のいくつかのリソース:

javascriptからObj-Cを呼び出す:javascriptからobjective-cを呼び出す

Obj-CからJavaScriptを呼び出す:Webハッカー向けのiPhoneアプリ開発

アプリケーションバンドルからのファイルの読み取り:uiwebview


興味深いことに、私は今週末、GitX(標準のMacOSアプリ)のコードを見ていましたが、これも彼らの仕事だと思います。 wiki.github.com/pieter/gitx
Pat

1
雑然とした問題については、xcodeプロジェクトにディレクトリを追加し、「グループを再帰的に作成...」ではなく「フォルダ参照を作成...」を選択してみてください。
リズミックフィストマン2009年

1
+1。また、同じ手法を使用してAndroidフォンアプリを作成できると確信しています。そして、おそらく、他のスマートフォンは、Javascriptをサポートするようにブラウザーを進化させ、あなたもそれらをサポートできるようになります。クロスプラットフォームのHTML / CSS / JavaScriptは21世紀の方法です。確かに恐ろしいプラットフォーム固有のネイティブコードはずっと前に時代遅れになりましたか?
MarkJ 2010


7

iPhone 2.1(おそらく2.0)でこれを行う場合は、ローカルデータストレージ用の特別なサービスを作成する必要はありません。MobileSafariは、HTML5 / WHATWGSQLデータベースAPIをサポートしているようです。これは、デスクトップSafariおよびFirefoxの最近のバージョンでサポートされているものと同じAPIです。

ストレージの抽象化を提供するDojoやExtJSのようなツールキットを使用している場合、コードはMobileSafariを含むほぼすべての最新のブラウザーで機能するはずです。

テストするには、iPhoneでhttp://robertsanders.name/dev/stackoverflow/html5.htmlを開きます。

そのページを開いて脱獄したiPhoneのファイルシステムを見ると、/ private / var / mobile / Library / WebKit / Databases /のどこかにデータベースが表示されているはずです。Webで開かれたDBのディレクトリもあります。

root#sqlite3 /private/var/mobile/Library/WebKit/Databases/Databases.dbSQLiteバージョン3.5.9手順については「.help」と入力してください

sqlite> .databasesseq名ファイル


0メイン/private/var/mobile/Library/WebKit/Databases/Databases.db

sqlite> .tables

データベースの起源

sqlite> select * from Databases;

1 | http_robertsanders.name_0 | NoteTest |データベース| APIの例| 20000 | 0000000000000001.db

sqlite> select * from Origins;

http_robertsanders.name_0 | 5242880


4

obj-Cを知らなくてもアプリケーションを作成できます。QuickConnectiPhoneフレームワークを使用すると、これを行うことができます。http://tetontech.wordpress.comをチェックして、それを使用する方法や、あなたが求めたことを行う他の方法を確認してください。


2

ネイティブラッパーはObjectiveCで記述されている必要があります。このラッパーには、WebViewを作成し、インターネット内の指定されたアドレス(アプリケーションが存在する場所)に移動するために必要な数行のコード(10など)が含まれている可能性があります。ただし、この場合、アプリケーションはフル機能のWebアプリケーションである必要があります(つまり、JavaScriptだけでなく、マークアップにHTMLも使用します)。


2

私はこれと同じ問題に遭遇しました。私はすでに完全にJavascriptで書かれたゲームを持っています。iPhoneに優しいバージョンを作りたいのですが、Obj-Cはやり過ぎです。私がやったことは、WebViewを使用してiphoneアプリの特別なURLを指すことでした。それについて考えた後、私はそれらのファイルをアプリディレクトリに移動してローカルで実行できると思います。


2

現在のAppleAPIでこれを行う方法はありません。最も近い方法は、Webkitブラウザーを組み込んだシンプルなネイティブiPhoneアプリを作成することです。これにより、xhtml / jsアプリケーションをローカルで参照できるようになります。

データを保存する場合は、さらに一歩進んで、アプリをサーバー化し、データを保存および取得するための呼び出しを提供する軽量のhttpサーバーを含める必要があります。おそらくあなたにとって理想的な解決策ではありませんが、完全なObj-Cアプリよりも作業が少ない可能性があります。

ちなみに、Obj-Cはかなり簡単に習得できます。SDKにはたくさんの例があります。コミュニティは強力であり、ためらうことなくよく置かれた質問に答えます。


JavaScript用のWHATWG / HTML5SQLストレージAPIを介してローカルストレージを使用できます。詳細については、私の回答を参照してください。
ロバートサンダース


1

TitaniumMobileもオプションです。Objective-Cに変換されるJavaScriptを記述できます。


それは本当にObjective-Cに翻訳されていますか?PhoneGapのようなWebブラウザコンポーネントで実行されていると思います。
Jonas

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.