Як я можу написати програму для 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 * path = [bundle bundlePath];
      NSString * fullPath = [NSBundle pathForResource: @ "index" ofType: @ "html" inDirectory: path];
      [webView loadRequest: [NSURLRequest requestWithURL: [файл NSURLURLWithPath: fullPath]]];
    }
  4. Тепер усі файли, які ви додали як ресурси до проекту, доступні для використання у вашому веб-додатку. У мене є файл index.html, що включає файли javascript, css та зображення без проблем. Єдине обмеження, яке я знайшов на даний момент, полягає в тому, що я не можу створювати нові папки, тому всі файли захаращують папку ресурсів.

  5. Хитрість: переконайтесь, що ви додали файл як ресурс у XCode, інакше файл буде недоступний. Я додав порожній файл у XCode, а потім перетягнув файл зверху у шукач. Це працювало на мене.

Примітка: Я розумію, що Obj-C не повинен бути таким важким для вивчення. Але оскільки я вже маю цю програму в JS, і я знаю, що вона працює в Safari, це набагато швидший цикл розробки для мене. Якось я впевнений, що мені доведеться зламатися і вивчити Obj-C.

Кілька інших ресурсів, які я знайшов корисними:

Виклик Obj-C з javascript: виклик object-c з javascript

Виклик javascript з Obj-C: розробка програми iphone для веб-хакерів

Читання файлів із набору програм: uiwebview


Цікаво, що я просто розглядав код GitX (стандартний додаток для MacOS) на цих вихідних, і я думаю, що це теж те, що вони роблять. wiki.github.com/pieter/gitx
Pat Notz

1
Щоб вирішити проблему безладу, спробуйте додати каталог до свого проекту xcode та виберіть "Створити посилання на папки ..." замість "Рекурсивно створювати групи ...".
Rhythmic Fistman

1
+1. І я майже впевнений, що ви могли б використовувати ту саму техніку, щоб створити додаток для телефонів Android. І, мабуть, інші смартфони розвиватимуть свої браузери, щоб підтримувати Javascript, і тоді ви також зможете підтримувати їх. Кроссплатформенний HTML / CSS / JavaScript - шлях 21 століття. Напевно, корінний специфічний для платформи рідний код давно вийшов з моди?
MarkJ


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.

Якщо ви відкриєте цю сторінку, то подивіться на файлову систему 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 головний /private/var/mobile/Library/WebKit/Databases/Databases.db

sqlite> .tables

Бази даних Походження

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

1 | http_robertsanders.name_0 | NoteTest | База даних | Приклад API | 20000 | 0000000000000001.db

sqlite> виберіть * з Origins;

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 зберігання SQL WHATWG / HTML5 для 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

Принаймні ще 2 згадали про фонегап, ​​але я думав, що я теж це опублікую та згадаю, що Apple схвалила фненегап. Отже, зараз ви не отримаєте від Apple відхилення вашого додатка лише тому, що ви використовуєте фонегап.

Повідомлення в блозі про phonegap та Apple - http://blogs.nitobi.com/jesse/2009/11/20/phonegapp-store-approval/

Телефонний розрив додому

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.