Mono, MonoTouch + C# vs. iPhone SDK + Objective-C

среда, 24 февраля 2010, Александр Краковецкий

Так сложилось, что моя деятельность в качестве разработчика программного обеспечения связана как с iPhone, так и с .NET технологиями. Если говорить, что первично, то это, конечно, .NET и C#, поэтому информация будет подана с точки зрения дотнетчика.

В статье хочу рассказать о небольшом опыте разработки одного проекта одновременно на mono с использованием MonoTouch и на родном Objective-C.

Описание проекта

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

Вариант №1: Mono + MonoTouch

Думаю, не нужно говорить, что такое Mono.

MonoTouch позволяет писать приложения на C# и компилировать их для iPhone, а также использовать .NET библиотеки.

Полный набор программного обеспечения:

  • Apple Mac OS X
  • утановленный Mono для Mac OS X
  • MonoDevelop
  • MonoTouch

Во превых, исходный код на Silverlight без проблем скомпилировался под макосью и запустился в Safari (Silverlight на макоси — это уже Moonlight). Это был хороший знак.

Был создан MonoTouch проект и, используя кроссплатформенную технологию copy-paste, было написано 80% приложения. Адаптация остального кода заняла около двух дней, после чего была продемонстрирована первая версия приложения. Хочу заметить, что приложение работало быстро (оно состояло, в основном, из математических вычислений, которые использовались для транформаций изображений).

К сожалению, заказчика вариант на MonoTouch не устроил, нужно было приложение, написанное на родном Objective-C.

Вариант №2: iPhone SDK + Objective-C

Код с C# на Objective-C был переписан в течении дня и… после этого приложение начало жутко тормозить. Еще два дня было потрачено на борьбу с memory leaks и написании release для некоторых локальных переменных, после чего приложения стали работать идентично.

Тут, нужно остановиться, и сделать лирическое отступление. Я прекрасно понимаю, что хороший разработчик должен понимать, как работает выделение, освободжение памяти, как искать memory leaks и как сделать так, чтобы их не было. Так вот, почему я люблю .NET и C#, что мне не нужно отвлекаться на то, как что-то реализовать, а можно сконцентрироваться на то, что мне нужно реализовать.

Выводы

Таким образом, я сделал следующие выводы в этой ситуации:

  • никакого привыкания и дополнительных мануалов не нужно (как в случае с Xcode) для того, чтобы начать работать с вышеперечисленными инструментами;
  • если вы дотнетчик и у вас есть возможность писать на C# и MonoTouch — лучше так и делайте, что избавит вас от многих проблем;
  • mono — не такая уж конч*ная платформа, как кому-то хочется думать;
  • несмотря на то, что MonoTouch — молодой продукт, в сети уже есть много материалов, связанных с особенностями использования этого продукта;
  • фактически, вы используете iPhone SDK, но используете синтаксис C# и возможности .NET (например string1 + string2 вместо [string1 stringByAppendingString:string2]);
  • удобство работы в MonoDevelop намного выше чем в Xcode.

Надеюсь, этот небольшой опыт поможет вам сориентироваться в будущем при выборе инструментов для разработки iPhone приложений (в случае, если вы дотнетчик).

P.S. В итоге был выбран OpenGL ES для реализации, так как на девайсе эффект жутко тормозил.

P.S.S. Для тех, кто увлекается iPhone разработкой, советую наш проект iPhoner: http://iphoner.org.ua/


Ищите нас в интернетах!

Комментарии

Свежие вакансии