Objective-C и Android

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

Итак, для моего следующего проекта я хочу написать его таким образом, чтобы большинство компонентов легко переносились между платформами iPhone и Android. Способ, которым я собираюсь это сделать, – это кодирование большей части его в Objective-C, а затем добавление частей, относящихся к платформе, в более Objective-C и Java соответственно. На стороне Android это потребует использования NDK.

Мои знания о C хороши, но мои знания Objective-C близки к нулю, и у меня нет желания изучать C ++. Насколько разумным является подход выше, и есть ли лучший? Есть ли способ, которым я могу закодировать на Java и до сих пор дошел до не-взломанного рынка iPhone? И насколько вероятно, что люди, которых я знаю (пользователи iPhone), будут иметь Android-телефон к следующему году?

Отступите назад и подумайте о том, что в итоге вы сможете логически разделить.

Модели пользовательского интерфейса довольно разные, компоненты разные. В конце концов, вы могли бы поделиться, это классы объектов данных, возможно, некоторые алгоритмы. Это даже не похоже на то, что вы могли бы реально обменяться сетевым кодом, как в старые времена, потому что вы не используете напрямую сокеты, вы используете библиотеки HTTP.

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

Почему вы пишете приложения? Сделать жизнь проще для вас или ваших пользователей?

Другие говорили в основном об этом, но я хотел бы сделать его более явным. Лучше всего, наверное, написать:

  1. Кросс-платформенные модели данных и основная логика, используя:
    • Бит GNUstep (Obj-C) или
    • CF-Lite (C) или
    • Что бы вы ни хотели, пока это кросс-платформенный: P
  2. IPhone-только код интерфейса, используя Cocoa Touch (Obj-C)
  3. Android-интерфейс, однако они делают это для Android.

Это как можно ближе; Любая попытка написать код межплатформенного интерфейса , несомненно, приведет к посредственному приложению на обеих платформах. Но сделать все остальное из вашего кода переносимым и просто обернуть интерфейс, специфичный для устройства, он выполняется все время и отлично работает для некоторых разработчиков iPhone.

Objective-C без какао не очень полезен и не будет приближать вас к созданию рабочей кодовой базы iPhone. Вероятно, вам лучше написать свое ядро ​​в C с Core Foundation и использовать Java или Objective-C для конкретных частей платформы. Apple открыла большой кусок Core Foundation в качестве CF-Lite, и он без сбоев соединяется с Cocoa на OS X (т. Е. Вы можете использовать многие классы CF взаимозаменяемо со своими коллегами из Cocoa).

Мое предположение, которое не имеет опыта для его резервного копирования, заключается в том, что вы, возможно, могли бы написать Obj-C с NDK Google, учитывая, что GCC существует для ARM, является открытым исходным кодом, имеет компилятор Obj-C и базовую среду выполнения Obj-C (Который, если он еще не может быть взломан для работы над новой архитектурой) и т. Д.

Это также может быть большой проблемой для сомнительной выгоды.

И, конечно же, «Obj-C» (без классов NS ) означает нечто совершенно иное, чем «Cocoa», что на самом деле означает большинство людей, когда говорят «Obj-C». Возможно, вы сможете повторно использовать некоторые из GNUstep для некоторых, но … Честно говоря, я сомневаюсь. Звучит снова, как много работы.

Итак, да, я думаю, это возможно. Это также много работы, и я не думаю, что это того стоит.

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

Исходя из этого под другим углом … Я знаю, что вы сказали, что хотите попробовать придерживаться Java, но если вы знаете C #, вы можете пойти с картой MonoTouch для iPhone. Моно по существу и с открытым исходным кодом. Net. Команда Mono работает над подключением Mono к Android, поэтому вы можете в принципе писать общую библиотеку C # для своей бизнес-логики и иметь разные представления / контроллеры на платформу. Конечно, все это будет в C #, и это немного дороже, но это решает проблему написания всего на разных языках.

Я считаю, что он называется MonoTouch на iPhone и MonoDroid на Android.

Apportable SDK – это подход Objective-C для однократной записи и развертывания как для IOS, так и для Android. Он перекрестно скомпилирует запущенный проект IOS Xcode в Android SDK.

См. Здесь примеры приложений, которые запускаются на обеих платформах через несколько минут после загрузки.

Я не уверен в Android, но с iPhone вы можете писать прямо C до тех пор, пока вы завершаете его в классах Objective-C.

Время выполнения Objective-C еще не перенесено на Android. Это не должно быть слишком много работы, но все же, без знания языка, я сомневаюсь, что вам будет легко переносить его.

То, что вы пытаетесь сделать, будет сложно для общего приложения, но должно быть возможным для игр, если вы решите разработать игру на простом C (который поддерживается как Android NDK, так и iPhone). Вам нужно будет написать некоторый код клея, чтобы передавать входные события из сред Obj-C и Java в ваш C-код, но это не должно быть большой проблемой. Objective-C позволяет вам напрямую звонить в ваш код C И есть много примеров проектов, которые делают именно это для Android.

Я не пробовал это сам или еще не просмотрел этот разговор, но есть Google Tech Talk по разработке приложений для iPhone с использованием Java на YouTube, который выглядит довольно многообещающим.

XMLVM – это проект, который способен переводить (некоторые) приложения Android на iPhone. Для получения дополнительной информации посетите http://xmlvm.org/android/

Я понимаю, что это может быть немного поздно, но, похоже, индустрия в настоящее время идет в направлении веб-приложений, чтобы обеспечить мобильность приложений. То есть, встраивание веб-браузера в ваше «скелетное родное приложение» и запись javascript, css и html для Android, iOS и других крупных платформ для смартфонов.

Есть инструменты, которые помогут вам в этом. Возможно, вы захотите проверить PhoneGap и Sencha Touch , но их еще много. Обратите внимание, что этот подход может быть не идеальным для приложений в режиме реального времени / анимации.

Вот беседа с конференции facebook на мобильном уровне, где две команды (Dropbox и оркестр) использовали аналогичные подходы. Dropbox использовал C ++ для создания libdropbox и Orchestra (почтовый ящик), который использовался Objective-c для создания libmailbox.

Опять же, они написали свои интерфейсы на родном языке платформы и использовали свои кросс-платформенные библиотеки для основной логики и данных.

Основные преимущества, которые я забрал: Почтовый ящик перешел от ios к Android в течение 5 недель, потому что он просто создавал код пользовательского интерфейса. Dropbox может бета-тестировать изменения основных функций, которые находятся в общей библиотеке с бета-версиями Android, было проще сделать массовые развертывания в масштабе для бета-сборок.

Если вы можете подождать до конца этого года (точное время неизвестно), Adobe будет иметь AIR для Android и компилятор для iPhone. Таким образом, вы можете написать приложение в AIR для Android и использовать большую часть того же кода для компиляции на iPhone.

http://labs.adobe.com/technologies/flashcs5/appsfor_iphone/

Даже если вы не можете дождаться, см. http://www.insideria.com/2008/12/actionscript-to-cocoa—protot.html, где объясняется сходство между ActionScript и Cocoa.

Также проверьте: http://labs.adobe.com/technologies/air2/ для версии AIR, которая может использовать сенсорный экран.

Таким образом, вы можете скоро написать один раз и развернуть на Android и iPhone с помощью ActionScript 3.