Использование библиотеки Java в приложении Objective-C для Mac и размещение этого приложения в Mac App Store

Я уже некоторое время изучаю эту проблему и пока не пришел к четкому ответу. Я пишу приложение для Mac OSX, которое собираюсь в конечном итоге разместить в магазине приложений, и хотя я смогу написать большую его часть на Objective-C, мне нужно вызывать методы из библиотеки, которая доступна только на Java. У меня есть 2 вопроса:

  1. Из того, что я прочитал, похоже, что JNI (с использованием API Invocation) — единственный приемлемый способ сделать это (хотя Apple не рекомендует использовать Java в приложениях для Mac, и это неприемлемо). Есть ли другой способ сделать это?

  2. Я читал, что Apple не разрешает приложения Java в магазине приложений для Mac, но позволит ли она в основном нативному приложению, использующему JNI, включать некоторые классы Java? Поскольку JNI можно использовать для «упаковки» виртуальной машины Java с приложением, кажется, что прекращение Apple включения Java в OSX в будущем не должно быть проблемой.

Ваше понимание будет высоко оценено. Спасибо.


person Andrew    schedule 24.12.2011    source источник
comment
JNI — это единственный способ вызвать код Java из собственного кода. Однако я не уверен в мнении Apple по этому поводу.   -  person zneak    schedule 24.12.2011
comment
@zneak - нет, нет. Вы можете просто раскошелиться и перенаправить стандартный вывод. Я понимаю, что вы пытаетесь сказать, но это не по теме и не совсем корректно.   -  person Steve    schedule 24.12.2011
comment
В качестве продолжения, похоже, я смогу скомпилировать нужные мне компоненты Java в собственный машинный код с помощью чего-то вроде GCJ. Кто-нибудь знает что-нибудь об этом?   -  person Andrew    schedule 25.12.2011


Ответы (1)


@Andrew - короче говоря, если то, что вы делаете, очень просто (и не касается библиотек, использующих java.awt или java.swing), тогда GCJ /может/ работать. Я бы вообще не рекомендовал его на самом деле. Причина, по которой я говорю это, заключается в том, что GCJ не поддерживает /многие/ из «новых» функций Java, и если ваш код Java не написан для старой версии JDK, вы столкнетесь с проблемами компиляции. Если вы компилируете с внешними сторонними приложениями, например, eclipse.anything и т. д., вы столкнетесь с огромными головными болями.

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

Конечно, есть возможность использовать собственный пользовательский интерфейс Mac в качестве простого тонкого клиента для уровня распределенных облачных служб (написанного на java ofc). Но я не уверен, как и что Apple думает о тонких клиентах для веб-сервисов в своем магазине приложений.

person Chris Moran    schedule 02.01.2012
comment
Спасибо за ответ, Крис. Примерно так я и думал. К сожалению, нужная мне библиотека Java написана не мной, и переписать ее на obj-C у меня нет возможности. Я собираюсь найти другую библиотеку, которая делает то же самое на C/C++/obj-C. - person Andrew; 05.01.2012