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

84

Я не хочу тратить время на изучение Obj-C. Я более 7 лет занимаюсь программированием веб-приложений. Разве не должно быть способа использовать 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 * путь = [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, а затем перетаскивал свой файл наверх в поисковике. Это работает для меня.

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

Еще несколько полезных ресурсов:

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

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

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

Джефф
источник
Интересно, что на этих выходных я как раз смотрел код для GitX (стандартное приложение MacOS) и думаю, что они тоже этим занимаются. wiki.github.com/pieter/gitx
Пэт Нотц,
1
Для решения проблемы беспорядка попробуйте добавить каталог в свой проект xcode и выбрать «Создать ссылки на папки ...» вместо «Рекурсивно создавать группы ...».
Rhythmic Fistman
1
+1. И я почти уверен, что вы могли бы использовать ту же технику для создания приложения для телефона Android. И, по-видимому, другие смартфоны будут развивать свои браузеры для поддержки Javascript, и тогда вы сможете их поддерживать. Кросс-платформенный HTML / CSS / JavaScript - это путь 21 века. Неужто неуклюжий нативный код для конкретной платформы давно вышел из моды?
MarkJ
22

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

Крис Сэмюэлс
источник
7

Тем, кто делает это на 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


0 основной /private/var/mobile/Library/WebKit/Databases/Databases.db

sqlite>. таблицы

Истоки баз данных

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

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

sqlite> выберите * из Источников;

http_robertsanders.name_0 | 5242880

Роберт Сандерс
источник
4

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

Ли
источник
2

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

Сергей Миханов
источник
2

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

рассвет
источник
2

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

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

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


источник
Вы можете использовать локальное хранилище через API хранилища WHATWG / HTML5 SQL для JavaScript. См. Мой ответ для получения дополнительной информации.
Роберт Сандерс,
1

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


источник
теперь одобрено Apple blogs.nitobi.com/jesse/2009/11/20/phonegapp-store-approval
Neo42
1

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

Джош Браун
источник
Это действительно переведено на Objective-C? Я думаю, что он запускается в компоненте веб-браузера, таком как PhoneGap.
Jonas
0

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

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

Phone Gap Home

Neo42
источник