it-swarm-ru.tech

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

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

84
Jeff

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

  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 для веб-хакеров

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

71
Jeff

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

22
Chris Samuels

Для тех, кто делает это на 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> .databases seq name file


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

7
Robert Sanders

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

4
Lee

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

2
cris

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

2
Sergey Mikhanov

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

2
dawnerd

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

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

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

2
jsapara

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

1
shawn

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

1
Josh Brown

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

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

Phone Gap Home

0
Neo42