Как написать приложение iPhone полностью на JavaScript, не делая его просто веб-приложение?

Я не хочу тратить время на изучение Obj-C. Я потратил 7 лет на программирование веб-приложений. Не следует ли использовать WebView и просто написать все приложение в javascript, потянув файлы прямо из ресурсов проекта?

Ответ 1

Я нашел ответ после поиска. Вот что я сделал:

  • Создайте новый проект в XCode. Я думаю, что я использовал приложение на основе представления.

  • Перетащите объект WebView на свой интерфейс и измените размер.

  • Внутри вашего 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]]];
    }
  • Теперь любые файлы, которые вы добавили в качестве ресурсов для проекта, доступны для использования в вашем веб-приложении. У меня есть файл index.html, включая javascript и css и файлы изображений без проблем. Единственное ограничение, которое я нашел до сих пор, заключается в том, что я не могу создавать новые папки, поэтому все файлы загромождают папку ресурсов.

  • Trick: убедитесь, что вы добавили файл в качестве ресурса в XCode или файл не будет доступен. Я добавляю пустой файл в XCode, а затем перетаскиваю файл вверху в finder. Это работало для меня.

Примечание. Я понимаю, что Obj-C не должен быть таким трудным для изучения. Но поскольку у меня уже есть это приложение, существующее в JS, и я знаю, что он работает в Safari, для меня это намного быстрее. В какой-то день я уверен, что мне придется сломаться и узнать Obj-C.

Несколько других ресурсов, которые я нашел полезными:

Вызов Obj-C из javascript: вызов objective-c из javascript

Вызов javascript из Obj-C: разработка приложений iphone для веб-хакеров

Чтение файлов из набора приложений: uiwebview

Ответ 2

Проверьте PhoneGap на http://www.phonegap.com, которые, как утверждают, позволяют вставлять JavaScript, HTML и CSS в родное приложение для iPhone.

Ответ 3

Для тех, кто делает это на iPhone 2.1 (возможно, 2.0), вам не нужно создавать специальные службы для локального хранения данных. MobileSafari, похоже, поддерживает API базы данных HTML5/WHATWG SQL. Это тот же API, который поддерживается новейшими версиями настольных Safari и Firefox.

Если вы используете набор инструментов типа Dojo или ExtJS, который предлагает абстракцию хранилища, ваш код должен работать практически с любым современным браузером, включая MobileSafari.

Чтобы проверить, откройте http://robertsanders.name/dev/stackoverflow/html5.html на вашем iPhone.

Если вы откроете эту страницу, посмотрите на файловую систему Jailbroken iPhone, вы увидите базу данных где-нибудь в /private/var/mobile/Library/WebKit/Databases/. Там даже есть каталог открываемых в Интернете БД.

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 > выберите * из Базы данных;

1 | http_robertsanders.name_0 | Примечание | База данных | Пример API | 20000 | 0000000000000001.db

sqlite > выберите * from Origins;

http_robertsanders.name_0 | 5242880

Ответ 4

Вы можете создать приложение, не зная каких-либо obj-C. Это позволяет использовать QuickConnectiPhone. Проверьте http://tetontech.wordpress.com за то, как использовать его, а также другие способы делать то, что вы просили.

Ответ 5

У вас должна быть собственная оболочка, написанная в Objective C. Эта оболочка может содержать действительно несколько строк кода (например, 10), необходимых для создания WebView, и переместить его на заданный адрес в Интернете (где находится ваше приложение). Но в этом случае ваше приложение должно быть полнофункциональным веб-приложением (я имею в виду использование не только JavaScript, но и HTML для разметки).

Ответ 6

Я столкнулся с этой проблемой. У меня уже есть игра, полностью написанная в Javascript. Я хотел бы сделать iPhone дружественной версией, но Obj-C является излишним. В результате я использовал WebView, чтобы указать на специальный URL-адрес приложения iphone. Подумав об этом, я предположил, что могу просто перенести эти файлы в каталог приложения и запустить их локально.

Ответ 7

Там нет способа сделать это с помощью современных API Apple. Ваша самая близкая ставка - написать простое приложение для iPhone, в которое встроен браузер webkit. Это позволит вам просматривать ваше приложение xhtml/js локально.

Если вы хотите хранить данные, вам нужно сделать еще один шаг и включить HTTP-сервер с легким весом, который обслуживает ваше приложение и предоставляет вызовы для хранения и извлечения данных. Возможно, это не идеальное решение для вас, но, возможно, меньше работы, чем полное приложение Obj-C.

В качестве побочной заметки Obj-C довольно легко изучить. В SDK есть множество примеров. Сообщество является сильным и будет отвечать на вопросы, заданные без проблем.

Ответ 8

посмотрите на новый o'reilly book по этому вопросу

Ответ 9

Я использую телефонную развязку на некоторое время, и это, кажется, имеет лучшие результаты для меня. Я отправлю свой опыт через неделю или около того с помощью ссылки на мое приложение.

Ответ 10

Titanium Mobile также является вариантом - он позволяет вам писать JavaScript, который переводится в Objective-C.

Ответ 11

Как минимум 2 человека упомянули телефонную разборку, но я подумал, что я тоже опубликую это, и упомянуть, что Apple одобрила схему телефонных разговоров. Итак, теперь вы не получите отклонение Apple от Apple только потому, что используете телефонную трубку.

Сообщение в блоге о телефоне и Apple - http://blogs.nitobi.com/jesse/2009/11/20/phonegapp-store-approval/

Телефонный разрыв дома