Каково состояние программирования без Objective-C для iPhone? - PullRequest
21 голосов
/ 09 ноября 2009

Проведя три недели, изучая программирование Objective-C и Какао для своей работы, мне было поручено исследовать его альтернативы для разработки iPhone.

Я знаю о двух существующих альтернативах и одной будущей возможности.

C #

  • Xamarin (ранее MonoTouch) - это реализация C # .NET с привязками для определенных функций iPhone, таких как сенсорный экран и акселерометр. Он интегрируется с Xcode и Interface Builder, а также позволяет создавать пользовательские привязки Objective-C.

Java

  • alcheMo-для-iPhone генерирует код C ++ для компиляции для iPhone из источника J2ME. Он также обеспечивает привязку сенсорного экрана и акселерометра.

Flash / ActionScript 3

  • Adobe объявила, что Flash Professional CS5 позволит развертывать приложения Flash для iPhone. Подробности пока не предоставлены.

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

РЕДАКТИРОВАТЬ: Я знаю недостатки использования Objective-C и предоставленных структур. Я хотел бы получить информацию о возможных решениях от людей с опытом, делающими это, а не о причинах, почему Objective-C лучше.

Ответы [ 18 ]

22 голосов
/ 09 ноября 2009

Я бы скептически относился к не-ObjC языкам на iPhone. Не обязательно, потому что есть какое-то огромное техническое препятствие, которое нужно преодолеть (вы можете скомпилировать практически все, что вы хотите, вплоть до iPhone, и даже заставить его работать с некоторыми изменениями), но по двум другим важным причинам:

  • рамочные. Несмотря на то, что перечисленные объекты имеют привязки к сенсорному экрану и акселерометру, вам, скорее всего, не хватит таких вещей, как подключение по Bluetooth и игровой комплект, звуковые платформы, покупки в приложении и т. П. Было бы довольно сложно воспроизвести все, что Apple предлагает на другом языке, и если вы выберете другой путь, а затем вам понадобится одна из этих платформ, вы можете застрять.
  • Приложение подано. Если вы хотите получать приложения в App Store, вам, вероятно, стоит придерживаться ObjC. Apple, как известно, требовательна к тому, что они пропускают, и использование другого языка может поразить некоего рецензента.

У вас также будет намного больше проблем с такими вещами, как подписание кода / сертификаты, не говоря уже об отладке (мне показалось странным, что MonoTouch рекламирует отладку как функцию, а не как то, что воспринимается как должное в рамках язык).

В общем, я бы придерживался ObjC, если вы можете. Как правило, это просто для всех заинтересованных сторон.

Обновление : сентябрь 2010 Новые условия использования iOS включают сторонние разработки, рекламные платформы

6 голосов
/ 09 ноября 2009

MonoTouch выглядит хорошо, но мучительно медленно. Некоторое время я играл с XCode на моем последнем поколении MacBook (около 2007 года), и он быстрый и отзывчивый. Я скачал MonoTouch на прошлой неделе, так как я хотел бы преобразовать существующую большую кодовую базу Mono для работы на iPhone, и пока она устанавливается и работает нормально, использовать ее крайне болезненно, поскольку все в IDE не работает и не отвечает.

YMMV, если у вас более новый и мощный комплект, но он не сулит ничего хорошего.

5 голосов
/ 26 ноября 2009

Как насчет другого встроенного языка, Javascript?

Либо вы можете запустить веб-приложение внутри UIWebView, либо вы можете использовать скрытый UIWebView для запуска фрагментов кода Javascript и проверки их возвращаемых значений для управления вашим собственным приложением.

Преимущество по сравнению со сторонними языками и платформами заключается в том, что лицензия Apple dev однозначно позволяет загружать и запускать программы javascript (поскольку для этого используется их официальный API).

Только что нашел этот плагин Xcode, который предлагает разработку HTML и Javascript собственных приложений: Nimble Kit . Может быть стоит посмотреть ...

3 голосов
/ 09 ноября 2009

Unity для iPhone - хорошая платформа для разработки без ObjectiveC.

http://unity3d.com/unity/features/iphone-publishing

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

ИМХО: MonoTouch - это больше работы, чем хороший стек IB + ObjectiveC, даже с некоторыми затратами на обучение ObjectiveC.

2 голосов
/ 26 ноября 2009

В настоящее время в App Store есть четыре приложения, которые полностью написаны на Squeak Smalltalk (и платформе Seaside над ним), используя виртуальную машину, созданную Джоном Макинтошем. (имя полностью совпадает).

2 голосов
/ 26 ноября 2009

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

Нет ярлыков. Вы должны знать Objective-C и CocoaTouch, прежде чем даже подумать о чем-то еще. Вы не можете взять MonoTouch и начать кодировать для телефона, не зная нативных вещей, просто этого не произойдет.

MonoTouch достаточно легко расширять / изменять по мере необходимости, если вы уже достаточно хорошо знаете CocoaTouch и ObjC. Так что идея о том, что нативные фреймворки могут измениться, оставив вас в пыли, не столь актуальна.

По своему опыту я обнаружил, что приложения MonoTouch работают медленнее, чем их собственные аналоги, но их недостаточно. Если это имеет значение, вы всегда можете написать эту часть приложения с нативным кодом, и, возможно, ObjC будет недостаточно быстрым, и вам захочется перейти на чистый C даже в нативном приложении.

MonoTouch принес мне серьезный прирост производительности: от возможности использовать гораздо менее лаконичный и болтливый язык до возможности использовать библиотеки, такие как Rhino Mocks и NUnit, из коробки.

MonoDevelop - отличная IDE в теории. Это также намного превосходит xcode, в теории. Это легкий, простой, очень простой в использовании, отличный intellisense и макрос, и делает управление проектом iPhone намного проще, чем xcode. Но ... это действительно глючит. Это настоящее падение.

2 голосов
/ 09 ноября 2009

Что касается флеш-компилятора, там может быть несколько проблем:

  • Скомпилированный двоичный файл объединяет все свои ресурсы в скомпилированное приложение, тогда как в XCode скомпилированный двоичный файл объединяет все в отдельные файлы. Это может стоить вам пространства, так как есть методы сжатия, которые Apple использует на некоторых ресурсах (PNG и т. Д.), Чтобы получить меньшие двоичные файлы с другой стороны. Более того, любые оптимизации обработки ресурсов, предоставляемые операционной системой, не будут доступны для ресурсов в двоичном флэш-памяти.
  • Были некоторые дискуссии относительно приемлемости двоичных файлов iPhone, скомпилированных с флэш-памятью. Adobe считает, что они являются законными двоичными файлами и не нарушают бинарные правила приложений iPhone, условия обслуживания и т. Д. Apple не очень хорошо известна тем, что играет в доброжелательного диктатора в App Store, когда дело касается приложений, которые заставляют их нервничать. До тех пор, пока Apple не признает этот метод приемлемым, caveat builder .
2 голосов
/ 09 ноября 2009

Вы будете проигрывать несколькими способами, не выбирая Objective-C, поскольку это единственная поддерживаемая Apple среда.

Все документы Apple, примеры кода, цепочка инструментов и т. Д. Предполагают, что вы используете Objective-C. Вы действительно не сможете использовать свои инциденты поддержки уровня кода. Любой новый фреймворк должен быть перенесен в вашу среду, что также представляет новый источник ошибок.

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

1 голос
/ 04 декабря 2009

Существует также Rhodes framework , который является интерпретатором ruby ​​и позволяет писать приложения в стиле Rails с представлениями HTML.

1 голос
/ 26 ноября 2009

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

http://www.haskell.org/haskellwiki/IPhone

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...