Общая библиотека для iPhone и BlackBerry - PullRequest
4 голосов
/ 19 июня 2009

У меня есть набор функций (классов), которыми я хотел бы поделиться с приложением, которое я создаю для iPhone и для Blackberry (Java). У кого-нибудь есть лучшие практики в этом?

Ответы [ 4 ]

4 голосов
/ 19 июня 2009

Как упомянул Гручал - вы не сможете разделить какие-либо физические компоненты вашего приложения между двумя платформами. Однако вы должны иметь возможность поделиться логическим дизайном вашего приложения, если тщательно разделите его на слои с высокой степенью разделения. Это все еще большая победа, потому что логический дизайн приложения, вероятно, составляет большую часть ваших усилий по разработке.

Вы можете попытаться обернуть разделы API-интерфейсов платформы (iPhone SDK и т. Д.), Которые вы используете, в свои собственные интерфейсы. При этом вы эффективно скрываете библиотеки, специфичные для платформы, и облегчаете управление своим дизайном и кодом при работе с различиями в платформах.

Имея это в виду, вы можете написать свой основной код приложения, чтобы он выглядел очень похожим на любой платформе - даже если они написаны на разных языках. Я считаю, что Java и Objective-C концептуально очень похожи (по крайней мере, на том уровне, на котором я их использую), и я ожидаю, что смогу достичь паритета по крайней мере со следующим:

  • Почти идентичный набор классов Java и Objective-C с одинаковыми именами и обязанностями
  • Java / Objective-C классы с одноименными методами
  • Java / Objective-C методы с одинаковыми обязанностями и логическими реализациями

Это само по себе облегчит понимание приложения на разных платформах. Конечно, код всегда будет выглядеть очень по-разному - т.е. когда вы начнете работать с представлением, многопоточностью, сетью и т. Д. Однако эти проблемы будут обрабатываться вашими обертками API, которые после разработки должны иметь довольно статичные интерфейсы.

Вы также можете получить выгоду, если позже разработаете дополнительные приложения, которые необходимо доставить на обе платформы, поскольку вы можете обнаружить, что можете повторно использовать или расширять свои обертки API.

4 голосов
/ 19 июня 2009

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

Это не похоже на сборку для OS X, где вы можете использовать Java, к сожалению, iPhone не поддерживает Java.

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

Если вы сохраняете структуру ваших классов одинаковой, то вам гораздо проще найти обслуживание - исправьте ошибку в Java, и вам будет легко найти такую ​​же ошибку в методах ObjC и т. Д.

Надеюсь, это поможет - извините, что это не все хорошие новости.

3 голосов
/ 19 июня 2009

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

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

UI API и парадигмы юзабилити для BlackBerry и iPhone настолько различны, что в большинстве случаев невозможно напрямую портировать такую ​​логику между приложениями. Самая большая ошибка, которую можно сделать (на мой взгляд), состоит в том, чтобы попытаться перенести пользовательский интерфейс, разработанный для одной мобильной платформы, на другую. То, как люди взаимодействуют с BlackBerrys и iPhone, сильно отличается, поэтому будьте готовы обновить пользовательский интерфейс для каждой мобильной платформы, на которой вы хотите развернуть.

Надеюсь, это полезно.

0 голосов
/ 02 декабря 2012

Можно написать код C ++, который работает как в приложении BB10 Native, так и в приложении iOS. XCode должен видеть файлы C ++ как код ObjectiveCPP.

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

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

Моя общая схема такова, что у меня есть «класс Foo» для выполнения кроссплатформенных вещей и «класс FooPlatform» для выполнения платформо-зависимых вещей. Класс "Foo" может вызывать класс "FooPlatform", который абстрагирует что-либо специфичное для платформы.

Необработанный кроссплатформенный код сам по себе не компилируется. Отдельные проекты BB10 и XCode создаются в соответствующих IDE. Каждый проект реализует тонкую (несколько [дюжину] строчек) «класс FooPlatform» и ссылается на необработанный кроссплатформенный код.

Когда я получу что-то, что смогу показать, я снова напишу здесь ...

...