簡體   English   中英

如何在不使用Web應用程序的情況下完全使用JavaScript編寫iPhone應用程序?

[英]How can I write an iPhone app entirely in JavaScript without making it just a web app?

我不想花時間學習Obj-C。 我花了7年多的時間做網絡應用程序編程。 難道不應該有辦法使用WebView,只需在javascript中編寫整個應用程序,從項目資源中提取文件?

搜索后我找到了答案。 這就是我所做的:

  1. 在XCode中創建一個新項目。 我想我使用了基於視圖的應用程序。

  2. 將WebView對象拖到界面上並調整大小。

  3. 在viewDidLoad方法中,在WebViewController.m(或類似命名的文件,取決於視圖的名稱)內部:

      NSString * filePath = [[NSBundle mainBundle] pathForResource:@“index”ofType:@“html”];  \n NSData * htmlData = [NSData dataWithContentsOfFile:filePath];  \n if(htmlData){  \n   NSBundle * bundle = [NSBundle mainBundle]; \n   NSString * path = [bundle bundlePath];\n   NSString * fullPath = [NSBundle pathForResource:@“index”ofType:@“html”inDirectory:path];\n   [webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:fullPath]]];\n } 
  4. 現在,您作為項目資源添加的任何文件都可以在您的Web應用程序中使用。 我有一個index.html文件,包括javascript和css以及沒有問題的圖像文件。 到目前為止,我發現的唯一限制是我無法創建新文件夾,因此所有文件都會混淆資源文件夾。

  5. 技巧:確保您已將文件作為資源添加到XCode中,否則該文件將不可用。 我一直在XCode中添加一個空文件,然后在finder中將我的文件拖到頂部。 這一直在為我工作。

注意:我意識到Obj-C一定不難學。 但是因為我已經在JS中存在這個應用程序並且我知道它在Safari中有效,所以對我來說這是一個更快的開發周期。 有一天,我確信我必須打破並學習Obj-C。

我發現其他一些有用的資源:

從javascript調用Obj-C:從javascript 調用objective-c

從Obj-C調用javascript: 針對網絡黑客的iphone應用開發

從應用程序包中讀取文件: uiwebview

查看http://www.phonegap.com上的 PhoneGap,他們聲稱它允許您將JavaScript,HTML和CSS嵌入到原生iPhone應用程序中。

對於那些在iPhone 2.1(可能是2.0)上執行此操作的人,您不需要為本地數據存儲創建任何特殊服務。 MobileSafari似乎支持HTML5 / WHATWG SQL數據庫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.db SQLite版本3.5.9輸入“.help”作為說明

sqlite> .databases seq名稱文件


0 main /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

您可以在不知道任何obj-C的情況下創建應用程序。 QuickConnectiPhone框架允許您執行此操作。 查看http://tetontech.wordpress.com了解如何使用它以及其他方式來做你所要求的。

您應該使用Objective C編寫的本機包裝器。這個包裝器可以包含創建WebView並將其導航到Internet中的給定地址(應用程序所在的位置)所需的幾行代碼(如10)。 但在這種情況下,您的應用程序應該是一個功能齊全的Web應用程序(我的意思是,不僅使用JavaScript,還使用一些HTML進行標記)。

我遇到了同樣的問題。 我已經有一個完全用Javascript編寫的游戲。 我很想制作iPhone友好版本,但是Obj-C是一種矯枉過正的版本。 我最終做的是使用WebView指向iphone應用程序的特殊URL。 在考慮之后,我想我可以將這些文件移動到app目錄並在本地運行它們。

使用當前的Apple API無法做到這一點。 您最接近的賭注是編寫一個嵌入webkit瀏覽器的簡單原生iPhone應用程序。 這將讓您在本地瀏覽您的xhtml / js應用程序。

如果你想存儲數據,你需要更進一步,包括一個輕量級的http服務器,它可以為你的應用程序提供服務,並提供存儲和檢索數據的調用。 可能不是一個理想的解決方案,但可能比完整的Obj-C應用程序更少的工作。

作為旁注,Obj-C相當容易學習。 SDK中有大量示例。 社區很強大,會毫不猶豫地回答好問題。

我一直在使用phonegap一段時間,它似乎對我有最好的結果。 我會在一周左右的時間內發布我的經驗,並附上我的應用程序的鏈接。

Titanium Mobile也是一個選項 - 它允許您編寫可以轉換為Objective-C的JavaScript。

至少有2個人提到了phonegap,但我想我也會發布這個帖子,並提到Apple已經批准了phonegap框架。 所以,現在你不會因為你正在使用phonegap而被Apple拒絕了你的應用程序。

關於phonegap和Apple的博客文章 - http://blogs.nitobi.com/jesse/2009/11/20/phonegapp-store-approval/

電話差距首頁

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM