Как я могу написать приложение для iPhone полностью на JavaScript, не превращая его в веб-приложение? - PullRequest
84 голосов
/ 15 сентября 2008

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

Ответы [ 11 ]

71 голосов
/ 15 сентября 2008

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

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

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

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

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

Вызов Obj-C из JavaScript: Вызов Objective-C из JavaScript

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

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

22 голосов
/ 23 октября 2008

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

7 голосов
/ 22 сентября 2008

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

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

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

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

root # sqlite3 /private/var/mobile/Library/WebKit/Databases/Databases.db SQLite версии 3.5.9. Введите «.help» для инструкции

sqlite> .database имя файла seq


0 main /private/var/mobile/Library/WebKit/Databases/Databases.db

sqlite> .tables

Базы данных Происхождение

sqlite> выбрать * из баз данных;

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

sqlite> select * from Origins;

http_robertsanders.name_0 | 5242880

4 голосов
/ 24 октября 2008

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

2 голосов
/ 11 октября 2009

посмотрите на новую о'рейли книгу по этому вопросу

2 голосов
/ 15 сентября 2008

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

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

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

2 голосов
/ 15 сентября 2008

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

2 голосов
/ 15 сентября 2008

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

1 голос
/ 05 апреля 2010

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

1 голос
/ 17 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...