Depois de assistir a uma sessão hoje no Mono em um evento .Net local, o uso do MonoTouch foi 'abordado' como uma alternativa para o desenvolvimento do iPhone. Sendo muito confortável em C # e .Net, parece uma opção atraente, apesar de algumas peculiaridades da pilha Mono. No entanto, como o MonoTouch custa US $ 400, estou um pouco decepcionado se esse é o caminho a seguir para o desenvolvimento do iPhone.
Alguém tem uma experiência desenvolvendo com o MonoTouch e o Objective-C e, em caso afirmativo, está desenvolvendo com o MonoTouch muito mais simples e rápido do que aprender o Objective-C e, por sua vez, vale os US $ 400?
c#
objective-c
mono
xamarin.ios
jamesaharvey
fonte
fonte
Respostas:
Ultimamente tenho visto essa pergunta (e variações nela). O que me surpreende é a frequência com que as pessoas respondem, mas o número de respostas .
Tenho minhas preferências (gosto das duas pilhas), mas é aqui que a maioria das "respostas" começa a dar errado. Não deve ser sobre o que eu quero (ou o que mais alguém quer).
Aqui está como eu determinaria o valor do MonoTouch - obviamente, não posso ser objetivo, mas acho que isso é bastante isento de zelos:
Isso é para diversão ou negócios? Se você quiser entrar em consultoria nessa área, poderá recuperar os seus US $ 399 rapidamente.
Deseja aprender a plataforma de dentro para fora ou "apenas" deseja criar aplicativos para ela?
Você gosta do .Net o suficiente para usar uma pilha de desenvolvimento diferente para tirar a diversão dele? Mais uma vez, gosto das duas pilhas (Apple e Mono), mas para mim o MonoTouch torna a experiência muito mais divertida. Não parei de usar as ferramentas da Apple, mas é principalmente porque eu realmente gosto das duas pilhas . Eu amo o iPhone e amo .Net. Nesse caso, para mim, o MonoTouch não era acéfalo.
Você se sente confortável trabalhando com C? Não me refiro ao Objective-C, mas C - importa porque o Objective-C é C. É uma versão OO agradável, chique e amigável, mas se os indicadores lhe derem heebie-jeebies, o MonoTouch é seu amigo. E não ouça os pessimistas que pensam que você é um covarde, se acontecer de não gostar de ponteiros (ou C, etc.). Eu costumava andar por aí com uma cópia do IBM ROM BIOS Pocket Reference, e quando eu escrevia assembly e forçava meu computador a modos de vídeo engraçados e escrevia meus próprios bits de renderização de fonte para eles e sistemas de janelas (reconhecidamente inúteis), eu não ' acho que os desenvolvedores do QuickBasic eram covardes. Eu estavaum desenvolvedor QuickBasic (além do restante). Nunca ceda ao machismo nerd. Se você não gosta de C e não gosta de ponteiros, e se deseja ficar o mais longe possível do gerenciamento manual de memória (e, para ser justo, não é ruim no ObjC), então. .. MonoTouch. E não se importe com isso.
Deseja segmentar usuários ou empresas? Não importa muito para mim, mas ainda existem pessoas no Edge, e o fato é: você pode criar um pacote de download muito menor se usar a pilha da Apple. Ando brincando com o MonoTouch e tenho um pequeno aplicativo decente que, uma vez compactado, fica em torno de 2,7 MB (ao enviar seu aplicativo para distribuição, você o fecha - quando os aplicativos são baixados da loja, eles ' é compactado novamente. Portanto, ao descobrir se seu aplicativo está abaixo do limite de 10 MB da OTA, primeiro aperte o botão - você ficará surpreso com o MonoTouch. Mas, à parte a felicidade do MT, meio megas versus quase três (por exemplo) é algo que pode ser importante para você se você estiver segmentando usuários finais. Se você está pensando no trabalho da empresa, alguns MB não importarão nada. E, só para esclarecer: vou enviar um aplicativo baseado em MT para a loja rapidamente, e não tenho nenhum problema com o tamanho. Não me incomoda nada. Mas se isso é algo que preocupariavocê , então a pilha da Apple vence esta.
Algum XML funciona? MonoTouch. Período.
Manipulação de cordas? Manipulação de datas? Um milhão de outras pequenas coisas com as quais nos acostumamos às estruturas de tudo-e-a-cozinha-da-net. MonoTouch.
Serviços web? MonoTouch.
Sintaticamente, ambos têm suas vantagens. O Objetivo-C tende a ser mais detalhado onde você deve escrevê-lo . Você se encontrará escrevendo código com C #, não precisaria escrever com ObjC, mas é nos dois sentidos. Este tópico em particular pode preencher um livro. Eu prefiro a sintaxe C #, mas depois de superar minha reação inicial do outro mundo ao Objective-C, aprendi a gostar um pouco. Eu zoo um pouco disso nas conversas ( é estranho para desenvolvedores que estão acostumados a C # / Java / etc.), Mas a verdade é que eu tenho um ponto em forma de Objective-C no meu coração que me faz feliz.
Você planeja usar o Interface Builder? Porque, mesmo nesta versão inicial, eu me vejo fazendo muito menos trabalho para criar minhas UIs com o IB e depois usá-las no código. Parece que etapas inteiras estão faltando na maneira de fazer as coisas do Objective-C / IB, e tenho certeza que é porque faltam etapas inteiras na maneira de fazer as coisas do Objective-C / IB. Até agora, e acho que não testei o suficiente, mas até agora , o MonoTouch é o vencedor por quanto menos trabalho você tem que fazer.
Você acha divertido aprender novos idiomas e plataformas? Nesse caso, o iPhone tem muito a oferecer, e a pilha da Apple provavelmente o tirará da sua zona de conforto - o que, para alguns desenvolvedores, é divertido (Oi - eu sou um desses desenvolvedores - eu brinco com isso e dou É difícil para a Apple, mas me diverti muito aprendendo o desenvolvimento do iPhone através das ferramentas da Apple).
Há tantas coisas a considerar. O valor é tão abstrato. Se estamos falando de custo e se vale a pena, a resposta se resume ao meu primeiro item: se isso é para negócios e se você pode obter o trabalho, você ganhará seu dinheiro de volta.
Então ... isso é tão objetivo quanto eu posso ser. Esta é uma pequena lista do que você pode se perguntar, mas é um ponto de partida.
Pessoalmente (vamos deixar cair a objetividade por um momento), eu amo e uso os dois. E fico feliz por ter aprendido a pilha da Apple primeiro. Era mais fácil para mim começar a operar com o MonoTouch quando eu já sabia o que fazer no mundo da Apple. Como já foi dito, você ainda estará trabalhando com o CocoaTouch - ele estará apenas em um ambiente com rede.
Mas há mais do que isso. As pessoas que não usaram o MonoTouch tendem a parar por aí - "É um invólucro blá blá blá" - esse não é o MonoTouch.
O MonoTouch oferece acesso ao que o CocoaTouch tem a oferecer e também ao que (um subconjunto de) .Net tem a oferecer, um IDE com o qual algumas pessoas se sentem mais confortáveis (eu sou um deles), melhor integração com o Interface Builder , e embora você não consiga esquecer completamente o gerenciamento de memória, você tem um bom grau de margem de manobra.
Se você não tiver certeza, pegue a pilha da Apple (é grátis) e pegue a pilha de avaliação MonoTouch (é grátis). Até você ingressar no programa de desenvolvimento da Apple, os dois só rodam no simulador, mas isso é suficiente para ajudá-lo a descobrir se você prefere muito um ao outro e possível se o MonoTouch vale para você US $ 399.
E não dê ouvidos aos fanáticos - eles tendem a ser os que não usaram a tecnologia contra a qual se opõem :)
fonte
Há muito boato neste post de desenvolvedores que não experimentaram o MonoTouch e o Objective-C. Parece ser principalmente desenvolvedores de Objective-C que nunca experimentaram o MonoTouch.
Eu sou obviamente tendencioso, mas você pode conferir o que a comunidade MonoTouch está fazendo:
http://xamarin.com
Lá você encontrará vários artigos de desenvolvedores desenvolvidos em Objective-C e C #.
fonte
Portanto, minha resposta a uma pergunta semelhante anterior é aprender o Objective-C. (Além disso, não se esqueça do suporte à depuração)
Outro usuário também escreveu isso:
Monotouch é mais fácil para você agora. Mas mais difícil depois.
Por exemplo, o que acontece quando novas sementes são lançadas contra as quais você precisa testar, mas interromper o MonoTouch por algum motivo?
Ao aderir ao Mono, sempre que você estiver procurando recursos para estruturas, você deve traduzir mentalmente como vai usá-los com o Mono. Seus binários de aplicativos serão maiores, seu tempo de desenvolvimento não será muito mais rápido após alguns meses do Objective-C, e outros desenvolvedores de aplicativos terão muito mais vantagens sobre você, porque estão usando a plataforma nativa.
Outra consideração é que você deseja usar o C # porque está mais familiarizado com o idioma que o Objective-C. Mas a grande maioria da curva de aprendizado do iPhone não é Objective-C, são os frameworks - com os quais você também precisará usar o C #.
Para qualquer plataforma, você deve usar a plataforma que expressa diretamente a filosofia de design dessa plataforma - no iPhone, que é o Objective-C. Pense nisso do ponto de vista inverso, se um desenvolvedor Linux acostumado a programar no GTK desejasse escrever aplicativos do Windows, seriamente recomendável que eles não usassem C # e se atendessem ao GTK porque era "mais fácil" fazer isso?
fonte
Usar o Mono não é uma muleta. Há muitas coisas que ele adiciona ao iPhone OS. LINQ, WCF, código compartilhável entre um aplicativo Silverlight, uma página ASP.NET, um aplicativo WPF, um aplicativo Windows Form e também há mono para Android e funcionará também para o Windows Mobile.
Portanto, você pode gastar muito tempo escrevendo Objective-C (você verá em muitos estudos onde exatamente o mesmo código de exemplo em C # é significativamente menor para escrever que OC) e depois DUPLICATE tudo para outras plataformas. Para mim, escolhi o MonoTouch porque o aplicativo em nuvem que estou escrevendo terá muitas interfaces, sendo o iPhone apenas uma delas. A transmissão de dados WCF da nuvem para o aplicativo MonoTouch é incrivelmente simples. Eu tenho bibliotecas principais que são compartilhadas entre as várias plataformas e só preciso escrever uma camada de apresentação simples para as implantações do iPhone / WinMobile / Android / SilverLight / WPF / ASP.NET. Recriar tudo no Objective-C seria um enorme desperdício de tempo, tanto para o desenvolvedor inicial quanto para a manutenção, pois o produto continua avançando, já que toda a funcionalidade precisa ser replicada e não reutilizada.
As pessoas que estão insultando o MonoTouch ou insinuando que seus usuários precisam de uma muleta não têm uma visão geral do que significa ter a estrutura .NET ao seu alcance e talvez não entendam a separação adequada da lógica da apresentação feita de uma maneira que pode ser reutilizado em plataformas e dispositivos.
O Objective-C é interessante e muito diferente de muitos idiomas comuns. Gosto de um desafio e de aprender abordagens diferentes ... mas não quando isso impede o meu progresso ou cria uma recodificação desnecessária. Existem algumas coisas realmente excelentes sobre a estrutura do iPhone SDK, mas toda essa grandeza é totalmente suportada pelo MonoTouch e corta todo o gerenciamento manual de memória, reduz a quantidade de código necessária para executar as mesmas tarefas, permite reutilizar meus assemblies e mantém minhas opções em aberto para poder mudar para outros dispositivos e plataformas.
fonte
Eu troquei. Monotouch, deixe-me escrever aplicativos pelo menos 3-4 vezes mais rápido (4 aplicativos por mês em comparação com o antigo 1 por mês no Obj C)
Muito menos digitação.
Apenas minha experiência.
fonte
Se esse é o único aplicativo para iPhone que você desenvolverá, e você também não tem interesse em desenvolver aplicativos para Mac, então o MonoTouch provavelmente vale o custo.
Se você pensa que algum dia desenvolverá mais aplicativos para iPhone ou desejará desenvolver algum desenvolvimento nativo para Mac, provavelmente vale a pena aprender o Objective-C e as estruturas associadas. Além disso, se você é do tipo de programador que gosta de aprender coisas novas, é um novo paradigma divertido de se estudar.
fonte
Pessoalmente, acho que você terá um tempo melhor aprendendo o Objective-C.
Em resumo:
Descobri que projetos como o Unity e o MonoTouch "economizam seu tempo", mas, no final das contas, você precisará aprender o idioma específico de seu domínio e, às vezes, precisará dar um passo adiante. Tudo o que provavelmente levará o tempo necessário para aprender o idioma que você estava tentando evitar aprender (no horário do calendário). No final, você não economizou tempo e está fortemente acoplado a algum produto.
Edição: Eu nunca quis implicar nada negativo sobre o .NET. Eu sou um grande fã disso. O que quero dizer é que adicionar mais camadas de complexidade só porque você ainda não se sente confortável com a notação peculiar bracket objc realmente não faz muito sentido para mim.
Atualização de 2019: são 7 anos depois. Eu ainda me sinto da mesma forma, se não mais. Certamente, 'idioma específico do domínio' pode ter sido o termo errado a ser usado, mas ainda acredito que é muito melhor escrever diretamente para a plataforma com a qual você está trabalhando e evitar camadas e abstrações de compatibilidade o máximo possível. Se você estiver preocupado com a reutilização e re-trabalho do código, geralmente qualquer funcionalidade que seu aplicativo multiplataforma precise executar provavelmente poderá ser realizada com as modernas tecnologias da web.
fonte
Para adicionar ao que os outros já disseram (bem!): Minha sensação é de que você basicamente está dobrando o número de bugs com os quais precisa se preocupar, adicionando os do MonoTouch aos já existentes no iPhone OS. A atualização para novas versões do sistema operacional será ainda mais dolorosa do que o normal. Eca, por toda parte.
O único caso convincente que eu posso ver para o MonoTouch são as organizações que possuem muitos programadores e código C # por aí, que eles devem aproveitar no iPhone. (O tipo de loja que nem sequer pisca em US $ 3.500.)
Mas para quem está começando do zero, realmente não posso ver isso como algo que valha a pena ou que seja sensato.
fonte
Três palavras: Linq to SQL
Sim, vale bem a pena o dólar.
fonte
Algo que eu gostaria de acrescentar, mesmo que haja uma resposta aceita - quem pode dizer que a Apple não rejeitará apenas aplicativos que tenham sinais de serem criados com o Mono Touch?
fonte
Investiria o tempo no Objective-C principalmente por causa de toda a ajuda que você pode obter de sites como este. Um dos pontos fortes do Objective-C é que você pode usar o código C e C ++, e há muitos projetos por aí que são bem testados .
Outra coisa é que seu código (idioma de escolha) será suportado pela apple. O que o iOS 5.x, por exemplo, remove o suporte para uma solução de terceiros como o MonoTouch? O que você dirá a seus clientes?
Talvez seja melhor usar uma solução independente de plataforma como HTML5, se você não estiver totalmente pronto para ir para o Objective-C?
fonte
Estou usando o MonoTouch há alguns meses, enviei meu aplicativo pela metade do ObjectiveC para poder oferecer suporte ao Android em algum momento no futuro.
Aqui está a minha experiência:
Bits ruins:
Xamarin Studio. Desenvolvedores independentes, como eu, somos forçados a usar o Xamarin Studio. Está ficando melhor a cada semana, os desenvolvedores são muito ativos nos fóruns, identificando e corrigindo bugs, mas ainda é muito lento, geralmente trava, tem muitos bugs e a depuração é bem lenta também.
Tempos de construção. A criação do meu aplicativo grande (vinculado) para depuração em um dispositivo pode levar alguns minutos; isso é comparado ao XCode, que é implantado quase imediatamente. Construir para o simulador (não vinculado) é um pouco mais rápido.
Problemas com o MonoTouch. Eu experimentei problemas de vazamento de memória causados pela manipulação de eventos e tive que colocar algumas soluções bastante feias para evitar vazamentos, como anexar e desanexar eventos ao entrar e sair de visualizações. Os desenvolvedores do Xamarin estão analisando ativamente problemas como este.
Bibliotecas de terceiros. Passei bastante tempo convertendo / vinculando bibliotecas ObjectiveC para usar no meu aplicativo, embora isso esteja melhorando com software automatizado como o Objective Sharpie.
Binários maiores. Isso realmente não me incomoda, mas pensei em mencionar. OMI um par de Mb extra não é nada nos dias de hoje.
Bons bits:
Multi plataforma. Meu amigo está feliz em criar uma versão Android do meu aplicativo a partir da minha base de código principal, estamos desenvolvendo em paralelo e comprometendo-nos com um repositório Git remoto no Dropbox, está indo bem.
.Internet. Trabalhar em C # .Net é muito melhor do que o Objective C IMO.
MonoTouch. Praticamente tudo no iOS é espelhado no .Net e é bastante simples fazer as coisas funcionarem.
Xamarin. Você pode ver que esses caras estão realmente trabalhando para melhorar tudo, tornando o desenvolvimento mais fácil e fácil.
Definitivamente, recomendo o Xamarin para o desenvolvimento de várias plataformas, especialmente se você tiver dinheiro para usar as edições Business ou Enterprise que funcionam com o Visual Studio.
Se você estiver criando apenas um aplicativo para iPhone que nunca será necessário em outra plataforma, e você for um desenvolvedor independente, eu ficaria com o XCode e o Objective C por enquanto.
fonte
Como alguém com experiência em C # e Objective-C, eu diria que para a maioria das pessoas, o Xamarin valerá a pena.
C # é uma linguagem realmente boa e as APIs de C # também são bem projetadas. É claro que as APIs do Cocoa Touch (incluindo o UIKit) também têm um ótimo design, mas o idioma pode ser aprimorado de várias maneiras. Ao escrever em C #, você provavelmente será mais produtivo em comparação com o mesmo código em Objective-C. Isso ocorre por vários motivos, mas alguns seriam:
C # tem inferência de tipo . A inferência de tipo torna a escrita do código mais rápida, pois você não precisa "conhecer" o tipo no lado esquerdo de uma tarefa. Também torna a refatoração mais fácil e mais econômica.
O C # possui genéricos , o que reduzirá os erros em comparação com o código Objective-C equivalente (embora haja algumas soluções alternativas no Objective-C, na maioria das situações os desenvolvedores os evitarão).
Recentemente, o Xamarin adicionou suporte ao Async / Await , o que facilita a gravação de código assíncrono.
Você poderá reutilizar parte da base de código no iOS, Android e Windows Phone.
O MonoTouch implementa amplamente as APIs do CocoaTouch de maneira muito direta. Por exemplo: se você tiver experiência com o CocoaTouch, saberá onde encontrar classes para controles no MonoTouch (o MonoTouch.UIKit contém classes para UIButton, UIView, UINavigationController, etc. NSData, etc ...).
O Xamarin dará aos usuários uma experiência nativa, ao contrário de soluções como PhoneGap ou Titanium.
Agora, o Objective-C tem algumas vantagens sobre o C #, mas na maioria das situações, escrever aplicativos em C # geralmente resultará em menos tempo de desenvolvimento e código mais limpo e menos trabalho para portar o mesmo aplicativo para outras plataformas. Uma exceção notável pode ser jogos de alto desempenho que dependem do OpenGL.
fonte
O custo da biblioteca MonoTouch está totalmente fora de questão. A razão pela qual você não deve usar o Mono para seus aplicativos para iPhone é que é uma muleta. Se você não pode se incomodar em aprender as ferramentas nativas, não tenho motivos para acreditar que vale a pena fazer o download do seu produto.
Edit: 14/04/2010 Os aplicativos criados com o MonoTouch não são elegíveis para a iTunes Store. É assim que deve ser. A Apple viu muitas portas rasas no Mac, usando kits de ferramentas de plataforma cruzada, como o Qt, ou a reimplementação parcial da própria Adobe da caixa de ferramentas do System 7, e o longo e curto disso é que eles simplesmente não são bons o suficiente.
fonte