Mono, MonoTouch + C# vs. iPhone SDK + Objective-C
Так сложилось, что моя деятельность в качестве разработчика программного
обеспечения связана как с 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/