Как выбрать между MonoTouch и Objective-C? [закрыто]


273

После сегодняшнего заседания в Mono на местном мероприятии .Net использование MonoTouch было «затронуто» в качестве альтернативы для разработки iPhone. Будучи очень комфортным в C # и .Net, это кажется привлекательным вариантом, несмотря на некоторые извороты стека Mono. Тем не менее, поскольку MonoTouch стоит 400 долларов, я несколько разозлился, если это путь для разработки iPhone.

У кого-нибудь есть опыт разработки с MonoTouch и Objective-C, и если это так, то разработка с MonoTouch намного проще и быстрее, чем изучение Objective-C, и, в свою очередь, стоит 400 долларов?


13
Я думаю, что многие комментарии о том, что MonoTouch не может работать на iOS, больше не действительны, так как Apple ослабила ограничение на инструменты разработки. См. Apple.com/pr/library/2010/09/09statement.html
sivabudh,

Ответы:


520

Я видел этот вопрос (и варианты по нему) много в последнее время. Что поражает меня, так это то, как часто люди отвечают, но как мало людей отвечают .

У меня есть свои предпочтения (мне нравятся оба стека), но именно здесь большинство «ответов» начинают ошибаться. Это не должно быть о том, что я хочу (или что хочет кто-то еще).

Вот как я могу определить ценность MonoTouch - очевидно, я не могу быть объективным, но я думаю, что это довольно без фанатизма:

  • Это для развлечения или бизнеса? Если вы хотите получить консультацию в этой области, вы можете вернуть свои $ 399 очень быстро.

  • Вы хотите изучать платформу наизнанку, или вы просто хотите написать приложения для нее?

  • Вам нравится .Net настолько, что использование другого стека разработчиков доставит вам удовольствие? Опять же, мне нравятся оба стека (Apple и Mono), но для меня MonoTouch делает этот опыт намного веселее. Я не перестал использовать инструменты Apple, но это в основном потому, что мне действительно нравятся оба стека . Я люблю iPhone, и я люблю .Net. В этом случае для меня MonoTouch был легким делом.

  • Вам комфортно работать с C? Я не имею в виду Objective-C, но C - это важно, потому что Objective-C - это C. Это хорошая, причудливая, дружелюбная ОО-версия, но если указатели дают вам хиби-джиби, MonoTouch - ваш друг. И не слушайте скептиков, которые думают, что вы изобретатель, если случится так, что вам не нравятся указатели (или C и т. Д.). Раньше я ходил с копией IBM ROM BIOS Pocket Reference, и когда я писал ассемблер и заставлял свой компьютер переходить в смешные режимы видео и писать свои собственные биты рендеринга шрифтов для них и (по общему мнению, дрянных) оконных систем, я этого не делал. Я думаю, что разработчики QuickBasic были хитрыми. Я былQuickBasic Dev (в дополнение к остальным). Никогда не поддавайся ботанику. Если вам не нравится C, и вам не нравятся указатели, и если вы хотите держаться как можно дальше от ручного управления памятью (и, честно говоря, это совсем не плохо в ObjC), тогда. .. MonoTouch. И не берись за это.

  • Хотите ли вы ориентироваться на пользователей или предприятия? Для меня это не имеет большого значения, но на Edge все еще есть люди, и дело в том, что вы можете создать гораздо меньший пакет загрузки, если используете стек Apple. Я играл с MonoTouch, и у меня есть приличное маленькое приложение, которое после сжатия сокращается до 2,7 МБ (когда вы отправляете свое приложение для распространения, вы архивируете его - когда приложения загружаются из магазина, они ' Застегните молнию - так что, выясняя, будет ли ваше приложение загружено в лимит OTA в 10 МБ, сначала застегните молнию на присоске - вы будете приятно удивлены MonoTouch). Но, если не считать счастья МТ, половина мег против почти трех (например) - это то, что может быть важно для вас, если вы ориентируетесь на конечных пользователей. Если вы думаете о работе предприятия, несколько МБ не будут иметь значения вообще. И, просто чтобы быть ясным - я собираюсь в ближайшее время представить приложение на базе MT в магазин, и у меня нет никаких проблем с размером. Меня совсем не беспокоит. Но если это то, что касаетсяВы , тогда стек Apple выигрывает этот.

  • Делаете какие-нибудь работы с XML? MonoTouch. Период.

  • Струнные манипуляции? Дата манипуляции? Миллион других мелочей, к которым мы привыкли, в .Net-инфраструктурах «все и кухня»? MonoTouch.

  • Веб-сервисы? MonoTouch.

  • Синтаксически они оба имеют свои преимущества. Objective-C имеет тенденцию быть более многословным, где вы должны написать это . Вы обнаружите, что пишете код на C #, вам не нужно писать на ObjC, но это происходит в обоих направлениях. Эта конкретная тема может заполнить книгу. Я предпочитаю синтаксис C #, но после преодоления моей первоначальной реакции "потусторонний мир" на Objective-C я научился получать от нее удовольствие. Я высмеивать него немного в переговорах (это является странным для разработчиков , которые вы использовать для C # / Java / и др.), Но правда в том , что у меня есть Objective-C форму пятна в моем сердце , что делает меня счастливым.

  • Планируете ли вы использовать Interface Builder? Потому что даже в этой ранней версии я выполняю гораздо меньше работы по созданию своих пользовательских интерфейсов с помощью IB, а затем использую их в коде. Такое ощущение, что целые шаги отсутствуют в способе выполнения Objective-C / IB, и я почти уверен, что это происходит потому, что целые шаги отсутствуют в способе выполнения Objective-C / IB. До сих пор, и я не думаю, что я достаточно протестировал, но пока MonoTouch - победитель за то, сколько меньше работы вам нужно сделать.

  • Как вы думаете, это интересно изучать новые языки и платформы? Если это так, у iPhone есть что предложить, и стек Apple, скорее всего, выведет вас из вашей комфортной зоны - что для некоторых разработчиков забавно (Привет - я один из тех разработчиков - я шучу об этом и даю Apple, это тяжелое время, но мне было очень весело изучать разработку iPhone с помощью инструментов Apple).

Есть так много вещей, чтобы рассмотреть. Ценность такая абстрактная. Если мы говорим о стоимости и о том, стоит ли она того, ответ сводится к моему первому пункту: если это для бизнеса, и если вы можете получить работу, вы вернете свои деньги обратно.

Так что ... это настолько объективно, насколько я могу быть. Это краткий список того, что вы можете задать себе, но это отправная точка.

Лично (давайте на минутку отбросим объективность), я люблю и использую оба. И я рад, что сначала изучил стек Apple. Мне было легче начать работать с MonoTouch, когда я уже знал свой путь в мире Apple. Как уже говорили другие, вы по-прежнему будете работать с CocoaTouch - он просто будет работать в среде .Net.

Но это еще не все. Люди, которые не использовали MonoTouch, как правило, останавливаются на достигнутом - «Это фантик бла-бла-бла» - это не MonoTouch.

MonoTouch дает вам доступ к тому, что может предложить CocoaTouch, а также дает доступ к тому, что может предложить (подмножество) .Net, IDE, с которой некоторые люди чувствуют себя более комфортно (я один из них), лучшая интеграция с Interface Builder и хотя вы не можете полностью забыть об управлении памятью, вы получаете хорошую степень свободы.

Если вы не уверены, возьмите стопку Apple (это бесплатно) и захватите стека MonoTouch eval (это бесплатно). Пока вы не присоединитесь к программе разработчиков Apple, оба будут работать только на симуляторе, но этого достаточно, чтобы помочь вам выяснить, предпочитаете ли вы одно другому, и возможно, стоит ли MonoTouch для вас $ 399.

И не слушайте фанатиков - они, как правило, те, кто не использовал технологию, против которой они ругаются :)


50
Вау, Рори, спасибо, что нашли время ответить на мой вопрос так подробно. Из того, что я могу сказать, вы единственный, кто использовал оба варианта, от которого я искал ответ. Я обязательно попробую оттуда. Кстати, я слышал вас на последнем SO подкасте, верно? Хорошая вещь. Еще раз спасибо!
Джеймсахарви

17
Спасибо за комментарии :) Я расстроился из-за ненависти к колену, которую я видел. Снова и снова на этот вопрос отвечают: «Ты, идиот, бросаешься для того, чтобы обрядовить систему опорожнения в первую очередь!» Что бесполезно и оскорбительно. У MonoTouch есть свои неровности, но у этих ребят гениальный послужной список. МТ быстро продвигается и становится красивее с каждым днем. Я продолжаю говорить: дай им пару месяцев. Они предусмотрительны в отношении функций, но я думаю, что мы увидим большие вещи. Я люблю стек Apple, но теперь у меня есть еще одна игровая площадка - это хорошо, и я легкомысленна :)
Рори Блит

4
@ Стефан - Неправильно сказать, что «пропало» - я могу сделать работу с Какао. Это больше об API. Просто намного проще работать со строками, датами, XML и т. Д. С .Net. Не знаю, знакомы ли вы с .Net, как делать эти вещи, а также с той степенью поддержки, которую MonoTouch поддерживает для них - если вы не рассматривали это, вам следует - просто проверить это. Я не хочу сказать, что есть вещи, которые вы не можете сделать с Какао, но есть много вещей, которые гораздо легче сделать с .Net. Разбор легче по всем направлениям - дата математика легче по всем направлениям - и т. Д.
Рори Блит

3
Также существует проблема повторного использования вашего собственного кода в iPhone / iPad с MT. У нас есть некоторый крипто-код и код бизнес-логики, работающие на наших серверах и настольных компьютерах, которые мы могли бы просто перекомпилировать с MT и использовать в нашем клиентском приложении для iOS. Это может быть важно для некоторых проектов.
Мономан

2
Также стоит учитывать тот факт, что, хотя лицензия стоит 400 долларов, существует также подписка на обслуживание, которую вы должны продлевать (по понятным причинам) каждый год - 250 долларов. Это, вероятно, справедливая цена, но все же стоит учитывать.
Amc_rtty

62

В этом посте много слухов от разработчиков, которые не пробовали MonoTouch и Objective-C. Похоже, что в основном это разработчики Objective-C, которые никогда не пробовали MonoTouch.

Я явно предвзят, но вы можете проверить, в чем состоит сообщество MonoTouch:

http://xamarin.com

Там вы найдете несколько статей от разработчиков, которые разработали как в Objective-C и C #.


29
@NSResponder - Вы использовали MonoTouch? Это релиз v1.x, практически новый и уже потрясающий. Попробуйте, прежде чем комментировать. Есть большие изменения (его интеграция Interface Builder намного лучше, чем у Xcode), и есть небольшие изменения (сравните, например, способ ObjC / Cocoa для получения папки документов пользователя по сравнению с MT). Я до сих пор использую стек Apple для некоторых вещей, но MT красив и полон потенциала. Серьезно - просто попробуйте. Или посмотрите, как API-интерфейсы Cocoa были связаны - вам не нужно его использовать - просто не ругайте работу, не узнав об этом.
Рори Блит

Да! Кроме того, некоторые новые функции C # 5.0 делают кодирование более увлекательным по сравнению с target-c.
harsimranb

39

Итак, мой ответ на предыдущий похожий вопрос - изучить Objective-C. (Также не забывайте о поддержке отладки)

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

Лично я не понимаю позицию, которая говорит об увеличении объема необходимой вам информации в пользу использования Mono над родным языком платформы. Это кажется несколько контрпродуктивным для меня. Я думаю, что если это очень дорогое предложение (изучение нового языка), то, возможно, стоит потратить некоторое время на фундаментальные концепции программирования, чтобы изучение новых языков было довольно дешевым предложением.

Другой пользователь также написал это:


Monotouch теперь проще для вас. Но сложнее позже.

Например, что происходит, когда появляются новые семена, с которыми вам нужно протестировать, но по какой-то причине сломать MonoTouch?

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

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

Для любой платформы вы должны использовать платформу, которая непосредственно выражает философию дизайна этой платформы - на iPhone, то есть Objective-C. Подумайте об этом с другой стороны: если бы разработчик Linux, привыкший к программированию на GTK, хотел писать приложения для Windows, вы бы серьезно рекомендовали им не использовать C # и придерживаться GTK, потому что им было «легче» это делать?



12
Вы, возможно, непреднамеренно, исказили МТ. Это вовсе не - не удаленно - аналогично использованию GTK для написания приложений Win. Привязки MT очень верны CocoaTouch. Они фактически улучшили некоторые соглашения CT API. Но вы не пишете свои приложения, используя, скажем, абстракцию на основе Windows Forms поверх CT. MT с MonoDevelop лучше интегрируется с IB, чем Xcode (если вы этого хотите), и вы часто можете сделать то же самое в половине кода или меньше. Двоичный размер улучшается, а инструменты (генератор привязок и т. Д.) Постоянно улучшаются. MT приложение - это нативное приложение.
Рори Блит

7
Чтобы привести примеры, а не ожидать, что вы примете мое (очевидно) мнение фаната МТ самостоятельно, я могу сделать что-то вроде (и это всего лишь небольшая часть преимуществ): создать свойство в одну строку; захватить ссылку на папку «Документ» без смешного разбрасывания массива (у приложения есть одна папка с документами, всегда в одном и том же месте - зачем вся дополнительная работа, чтобы «найти» ее?); использовать .Net Framework, где воняет какао (NSDate, кто-нибудь?); использовать товарные навыки для корпоративных приложений; использовать правильные современные биты XML (мне нравится, когда Какао тихо душит символы и просто останавливается - без сбоев - просто останавливается ).
Рори Блит

8
Не говорю, что я буду использовать это для всего. Мне нравится ObjC и до сих пор его использую. И, если производительность является проблемой, у меня есть более детальный контроль над тем, что происходит. Но ... бывают моменты, когда MT будет иметь больше смысла, и я думаю, что это сделает iPhone жизнеспособным вариантом для развития предприятия. Бросьте камень в воздух, и вы поразите разработчика .Net. Большинство компаний не имеют собственных разработчиков ObjC. И для работы на предприятии, они не должны. MT гораздо проще работать с веб-сервисами и БД. Вы действительно можете написать много видов приложений с помощью MT с половиной кода, который потребовался бы в ObjC.
Рори Блит

8
Наконец (я мог бы продолжить, но я думаю, что я делаю точку зрения), изменения, которые «ломают» MonoTouch, вероятно, так же вероятно, сломают приложения ObjC. Как только ваше приложение находится в магазине, оно становится родным приложением для iPhone (как и должно быть). В конечном счете, звонки ничем не отличаются - они выполняются так же, как и приложения, созданные в стеке Apple. Если ваше приложение MT ломается из-за изменения среды выполнения, то будут и приложения, созданные с помощью ObjC. И команда MT была на вершине этого материала, быстро выпуская обновления и исправления ошибок. Привязки МТ достаточно точно сопоставляются с КТ, поэтому вероятность возникновения каких-либо реальных проблем невелика. Aight - я сейчас заткнусь :)
Rory Blyth

27

Использование Mono не опора. Есть много вещей, которые он добавляет в iPhone OS. LINQ, WCF, разделяемый код между приложением Silverlight, страницей ASP.NET, приложением WPF, приложением Windows Form, а также моно для Android, и оно будет работать и для Windows Mobile.

Таким образом, вы можете потратить кучу времени на написание Objective-C (из многих исследований вы увидите, что один и тот же пример кода на C # значительно меньше писать, чем на OC), а затем ДУБЛИРОВАТЬ все это для других платформ. Для меня я выбрал MonoTouch, потому что у облачного приложения, которое я пишу, будет много интерфейсов, и iPhone - только один из них. Потоковая передача данных WCF из облака в приложение MonoTouch безумно проста. У меня есть основные библиотеки, которые совместно используются различными платформами, и тогда мне нужно только написать простой уровень представления для развертываний iPhone / WinMobile / Android / SilverLight / WPF / ASP.NET. Воссоздание всего этого в Objective-C было бы огромной тратой времени как для первоначальной разработки, так и для технического обслуживания, поскольку продукт продолжает двигаться вперед, поскольку все функции придется копировать, а не использовать повторно.

Людям, которые оскорбляют MonoTouch или намекают, что его пользователям нужен костыль, не хватает общей картины того, что значит иметь .NET Framework у вас под рукой, и, возможно, не понимают правильное разделение логики и представления таким образом, чтобы может быть повторно использован на разных платформах и устройствах.

Objective-C интересен и сильно отличается от многих распространенных языков. Мне нравится вызов и изучение различных подходов ... но не тогда, когда это мешает моему прогрессу или создает ненужное перекодирование. В структуре iPhone SDK есть несколько действительно замечательных вещей, но все это великолепие полностью поддерживается MonoTouch и исключает ручное управление памятью, уменьшает объем кода, требуемого для выполнения тех же задач, позволяет мне повторно использовать свои сборки и мои параметры остаются открытыми, чтобы можно было переходить на другие устройства и платформы.


19

Я перешел. Monotouch, давайте напишу приложения как минимум в 3-4 раза быстрее (4 приложения в месяц по сравнению с моим старым 1 в месяц в Obj C)

Намного меньше печатать.

Просто мой опыт.


2
«4 приложения в месяц» - когда количество важнее качества. МТ как Макдональдс. Но вы получите лучшую еду в ресторане XCode.
netshark1000

2
Хотя результаты говорят по-разному, Rdio и iCircuit являются приложениями MT, продемонстрированными Стивом Джобсом. C # и MT избавляются от сантехнической работы, которую заставляет выполнять obj-C.
Ян Винк

17

Если это единственное приложение для iPhone, которое вы когда-либо разрабатывали, и у вас также нет никакого интереса к разработке приложений для Mac, то MonoTouch, вероятно, стоит своих затрат.

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


6
Если это единственное приложение для iPhone, которое вы когда-либо разрабатываете, то $ 99 / год тоже не стоит.
Дина

Вы можете использовать те же инструменты разработки C # для создания приложений Mac. На самом деле вы можете делиться кодом между приложениями iPhone C # и Mac C #. MonoTouch теперь называется Xamarin
Ян Винк

9

Лично я думаю, что вы лучше проведете время, изучая Objective-C.

Коротко:

  • «Learning Objective-C» - это не так страшно, как вы думаете, вам это может понравиться даже после первых нескольких недель
  • Вы уже знакомы с синтаксисом "стиль C" с большим количеством * & () {}; где угодно
  • Apple сделала очень хорошую работу по документированию
  • Вы будете взаимодействовать с iPhone так, как задумал Apple, а это значит, что вы будете получать преимущества напрямую от источника, а не через какой-то фильтр.

Я обнаружил, что такие проекты, как Unity и MonoTouch, должны «экономить ваше время», но в конечном итоге вам все равно придется изучать язык, специфичный для их предметной области, и время от времени придется обходить стороной. Все это, вероятно, займет у вас столько же времени, сколько и выучить язык, который вы пытались избежать (в календарном времени). В конце концов, вы не сэкономили время и тесно связаны с каким-либо продуктом.

РЕДАКТИРОВАТЬ: Я никогда не имел в виду ничего негативного о .NET, я оказался большим поклонником этого. Моя точка зрения состоит в том, что добавление большего количества уровней сложности только потому, что вы еще не знакомы с причудливыми обозначениями скобок objc, на самом деле не имеет большого смысла для меня.

Обновление 2019 года: 7 лет спустя. Я все еще чувствую то же самое, если не больше. Конечно, «специфичный для предметной области язык», возможно, был неправильным термином для использования, но я все же считаю, что гораздо лучше писать непосредственно для платформы, с которой вы работаете, и по возможности избегать слоев и абстракций совместимости. Если вы беспокоитесь о повторном использовании и переработке кода, то, вообще говоря, любые функциональные возможности, которые необходимы вашему кроссплатформенному приложению, могут быть реализованы с помощью современных веб-технологий.


12
Во-первых, C # не является «языком, специфичным для предметной области» - это далеко не так. Это товарный навык. Это часть ценности MonoTouch. Можно утверждать (несправедливо и неточно), что ObjC является DSL в том смысле, что большинство разработчиков (вне финансовых и университетских лабораторий и подвалов) будут когда-либо использовать его только для разработки OS X или iPhone. Но это не так. Как и C #, это универсальный язык, который в основном существует, чтобы позволить вам сосредоточиться на фреймворках, а не на самом языке (я думаю, что мы согласны с этим). Но имейте в виду, что ваш код ObjC будет ломаться с обновлениями Apple. Это не специфическая проблема МТ.
Рори Блит

3
MT может даже спасти вас в некоторых случаях, потому что есть этот уровень абстракции. Apple модифицирует API? Что ж, ваше приложение ObjC и ваше (давайте представим, что оно существует) эквивалентное приложение MT сломается. Ребята из MT могли бы выпустить решение о временной задержке, чтобы изменить, как MonoTouch API обрабатывает вызов за кулисами. Ваш код МТ не должен был бы изменяться - вы могли бы просто перестроиться против выпуска МТ с ограничением. Да: это грязное исправление, которое может легко привести к проблемам, но правильный отказ от API MTG с ограничением времени даст разработчикам время для беспрепятственной обработки изменений и выигрыш времени для реального исправления.
Рори Блит

4
Плюс, новый, как MT, стало намного проще создавать свои собственные привязки при необходимости (MT 1.2). Вы не полностью зависит от МТ выглядывает , чтобы сделать все , что работа (хотя они будут делать эту работу), и никогда не было. У них есть очень простые способы создания привязок. Они предоставляют достаточно времени выполнения ObjC с MT-фреймворками, чтобы вы не были привязаны к их действиям. Я переопределил привязки, чтобы посмотреть, нравится ли мне мой путь лучше. Вы можете игнорировать платформы MT и отправлять и получать сообщения «вручную», если хотите, и это занимает мало кода. Они умные люди. Доверься им :)
Рори Блит

2
Я думаю, что slf не знает о том факте, что Monotouch - это просто C # (с GC), который напрямую связан с библиотеками ObjC + необязательными библиотеками .NET. Таким образом, вы все еще используете API, предоставленный Apple. Но с аккуратным синтаксисом и сборкой мусора.
Басарат

4

В дополнение к тому, что уже сказали другие (хорошо!): У меня такое ощущение, что вы в основном удваиваете количество ошибок, о которых вам нужно беспокоиться, добавляя ошибки в MonoTouch к уже существующим в iPhone OS. Обновление для новых версий ОС будет еще более болезненным, чем обычно. Фу, все вокруг.

Единственный убедительный случай, который я вижу для MonoTouch, - это организации, в которых много и много программистов на C # и кода C #, которые они должны использовать на iPhone. (Магазин, который даже не будет мигать за 3500 долларов.)

Но для любого, начинающего с нуля, я действительно не вижу в этом смысла или мудрости.


-1: Что вы подразумеваете под "больше ошибок"? Есть ли явное несоответствие импеданса между Mono и Objective-C?
Джим Г.

4

Три слова: Linq to SQL

Да, оно того стоит.


4
С помощью привязок значения ключа и основных данных Objective-C вы получаете нечто очень похожее на Linq-to-SQL. Не то же самое. Может быть, не так мощно - но охватывает много той же земли. Обратите внимание, что Core-Data в настоящее время не поддерживается MonoTouch
philsquared

Является ли Linq to SQL актуальным для приложения для iPhone? Это работает с SQLite?
Бпапа

1
И вы хотите, чтобы ваши пользователи обменивались данными по сети. Что вы делаете с SQL Lite?
Брайан

«MonoTouch основан на гибридном профиле API .NET 2.0 и Silverlight 2». Поддерживается ли LINQ для объектов?
Крис С

2

Что-то, что я хотел бы добавить, несмотря на то, что есть общепринятый ответ - кто скажет, что Apple не просто отклонит приложения, которые имеют признаки того, что они созданы с Mono Touch?


Они, конечно, должны, и они также должны отклонять приложения Flash, но их условия App Store не исключают их использования.
NSResponder

3
@bpapa - это вполне обоснованная проблема, но: 1) Нет причин отклонять приложения (пользователям не важно, с чем написаны их приложения - они заботятся о самих приложениях), и 2) MonoTouch имеет большой потенциал для развития предприятия , и если у вас есть корпоративная учетная запись разработчика, Apple не может помешать вам распространять ваше приложение. Также Apple принимает игры, созданные с помощью Unity. В конечном счете, МТ следует правилам. Иногда процесс Apple кажется случайным, но ... МТ следует правилам: |
Рори Блит

1
@bpapa - Не знаю, как я так долго пропускал этот комментарий, но: 1) Тонны приложений ObjC «загнали» за использование недокументированных («приватных») API - FB, как вы заметили, один из них, но пока FB все еще жив и доступен для скачивания. 2) Проблема Unity была быстро решена, и Unity снова там. - Насколько Apple хочет, чтобы вы использовали свои собственные вещи, я бы не согласился, но требования и требования сильно отличаются. Что касается корпоративных приложений: вы можете развернуть корпоративные приложения MT. Они просто родные двоичные файлы. Я не вижу проблемы и не понимаю, почему ты так против МТ.
Рори Блит

1
Я должен добавить, что дело не в том, что я «ненавижу» синтаксис ObjC, а в том, что я предпочитаю C #. Я также предпочитаю .Net Framework Пути Какао. Манипулирование строками , обработка XML, все , что связано с датами и т. Д. - я буду использовать привязки MT CocoaTouch для работы пользовательского интерфейса, но для большинства других задач подмножество .Net Framework, поставляемого с MT, значительно облегчает жизнь. Я мог бы продолжать и продолжать (например, мое предпочтение находить определенные ошибки во время компиляции ). Я критически отношусь к стеку Apple, но мне это не нравится. Можно любить MT и ObjC / и т.д.
Рори Блит

1
Apple изменила свое мнение, и теперь она принимает приложения на любом языке / основе, и излагает более «объективный» список критериев для принятия приложений в магазине.
Мономан

2

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

Другое дело, что ваш код (язык выбора) будет поддерживаться Apple. Что, например, iOS 5.x удаляет поддержку стороннего решения, такого как MonoTouch? Что вы скажете своим клиентам тогда?

Может быть, лучше использовать независимое от платформы решение, такое как HTML5, если вы не совсем готовы перейти на Objective-C?


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

2

Я использую MonoTouch уже несколько месяцев, я портировал свое наполовину законченное приложение из ObjectiveC, чтобы в будущем я мог поддерживать Android.

Вот мой опыт:

Плохие биты:

  • Студия Хамарин. Независимые разработчики, такие как я, вынуждены использовать Xamarin Studio. С каждой неделей все лучше, разработчики очень активно выявляют и исправляют ошибки на форумах, но они все еще очень медленные, часто зависают, содержат много ошибок, а отладка также довольно медленная.

  • Время сборки. Создание моего большого (связанного) приложения для отладки на устройстве может занять несколько минут, по сравнению с XCode, который развертывается практически сразу. Сборка для симулятора (без привязки) происходит немного быстрее.

  • MonoTouch выдает. У меня возникли проблемы с утечкой памяти, вызванные обработкой событий, и мне пришлось применять довольно уродливые обходные пути, чтобы предотвратить утечки, такие как присоединение и отсоединение событий при входе и выходе из представлений. Разработчики Xamarin активно изучают подобные проблемы.

  • Сторонние библиотеки. Я потратил довольно много времени на преобразование / связывание библиотек ObjectiveC для использования в моем приложении, хотя это становится лучше с помощью автоматизированного программного обеспечения, такого как Objective Sharpie.

  • Большие двоичные файлы. Это на самом деле не беспокоит меня, но думал, что я упомяну это. ИМО пара лишних мб ничего не значит в наши дни.

Хорошие биты:

  • Мультиплатформная. Мой друг с радостью создает версию моего приложения для Android из моей базовой базы кода, мы параллельно разрабатываем и подключаемся к удаленному Git-репозиторию на Dropbox, и все идет хорошо.

  • .Сеть. Работать в C # .Net гораздо приятнее, чем в Objective C IMO.

  • MonoTouch. Практически все в iOS отражается в .Net, и довольно просто заставить все работать.

  • Xamarin. Вы можете видеть, что эти ребята действительно работают над тем, чтобы улучшить все, делая разработку более гладкой и легкой.

Я определенно рекомендую Xamarin для межплатформенной разработки, особенно если у вас есть деньги, чтобы использовать выпуски Business или Enterprise, которые работают с Visual Studio.

Если вы создаете исключительно приложение для iPhone, которое никогда не понадобится на другой платформе, и вы являетесь разработчиком для инди, я бы остановился на XCode и Objective C.


Быстрое обновление моего ответа выше. После перехода на более быстрый Mac я обнаружил, что время сборки намного быстрее, но все равно не мгновенно, как в XCode, но все в порядке.
Дэнфордхэм

1

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

C # - действительно хорошо разработанный язык, и API C # также хорошо разработаны. Конечно, у Cocoa Touch API (включая UIKit) также отличный дизайн, но язык можно улучшить несколькими способами. При написании на C # вы, вероятно, будете более продуктивными по сравнению с написанием того же кода в Objective-C. Это связано с несколькими причинами, но некоторые причины могут быть:

  • C # имеет вывод типа . Вывод типа делает написание кода быстрее, так как вам не нужно «знать» тип в левой части присваивания. Это также делает рефакторинг проще и безопаснее.

  • В C # есть обобщения , которые уменьшат ошибки по сравнению с эквивалентным кодом Objective-C (хотя в Objective-C есть некоторые обходные пути, в большинстве случаев разработчики их избегают).

  • Недавно Xamarin добавил поддержку Async / Await , что делает написание асинхронного кода очень простым.

  • Вы сможете повторно использовать часть кода на iOS, Android и Windows Phone.

  • MonoTouch в значительной степени реализует API-интерфейсы CocoaTouch очень простым способом. Например: если у вас есть опыт работы с CocoaTouch, вы будете знать, где найти классы для элементов управления в MonoTouch (MonoTouch.UIKit содержит классы для UIButton, UIView, UINavigationController и т. Д., Аналогично MonoTouch.Foundation получил классы для NSString, NSData и т.д ...).

  • Xamarin предоставит пользователям нативный опыт, в отличие от таких решений, как PhoneGap или Titanium.

Теперь Objective-C имеет некоторые преимущества по сравнению с C #, но в большинстве ситуаций написание приложений на C # обычно приводит к меньшему времени разработки и более чистому коду и меньшему количеству работы по переносу того же приложения на другие платформы. Одним заметным исключением могут быть высокопроизводительные игры, использующие OpenGL.


-35

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

Изменить: 14.04.2010 Приложения, написанные с MonoTouch, не имеют права на iTunes Store. Это так и должно быть. Apple видела множество мелких портов на Mac, используя кроссплатформенные наборы инструментов, такие как Qt, или собственное частичное повторное внедрение Adobe Toolbox для System 7, и в общем и целом они просто недостаточно хороши.


14
Рыночная доля Mac OS X очень мала, поэтому для многих iPhone является единственной неопровержимой причиной даже подумать о том, чтобы возиться с X-Code и ObjC. Оба были великолепны более 15 лет назад, когда он был Project Builder и кросс-платформенным усложнением и упаковкой, но, честно говоря - как тот, кто использует ряд платформ - с, возможно, лучшими инструментами и языками сейчас, вряд ли разработчики хотят использовать общее CodeBase и использовать альтернативные инструменты разработки. Это не значит, что их творения будут ниже номинала.
Иэн Коллинз

37
Я не знаю, чувак ... Я думаю, что Objective-C и CocoaTouch - опора. Если вы не пишете ассемблер, я чувствую, что вам просто все равно, и я не собираюсь загружать ваше приложение (потому что первое, что пользователи делают, конечно, это проверяют, какие инструменты были используется для создания загружаемого ими приложения для моделирования метеоризма).
Рори Блит

3
Андрей, ты не знаешь, о чем говоришь. Objective-C - это не заводь; это основа родной среды разработки для Mac, iPhone и iPad.
NSResponder

5
Таким образом, вы выбираете один простой пример того, что Apple встроила в каркас, и заявляете о своем превосходстве, в то же время удобно игнорируя те части каркаса, которые гораздо более грубые, чем эквивалент C #? Разве это не спорный случай?
Эндрю Роллингс

8
Я переключился на MonoTouch и опубликовал 47 приложений на 4.0. Я делаю это полный рабочий день. Работает отлично, быстро. Раньше я писал в Objective C, но нашел C # с Linq быстрее, написав гораздо меньше кода.
Ян Винк
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.