Existe uma maneira suportada de executar aplicativos .NET 4.0 nativamente em um Mac?


11

Quais são as opções suportadas pela Microsoft para executar o código C # / .NET 4.0 nativamente no Mac? Sim, eu sei sobre o Mono, mas, entre outras coisas, fica atrás da Microsoft. E o Silverlight funciona apenas em um navegador da web. Uma solução do tipo VMWare também não é suficiente.

Existe alguma resposta semi-oficial para o motivo pelo qual a Microsoft simplesmente não suporta .NET no próprio Mac? Parece que eles poderiam usar o Silverlight e / ou comprar o Mono e rapidamente estar lá. Não há necessidade de Visual Studio nativo; compilação cruzada e depuração remota estão bem.

A razão é que, onde trabalho, há uma quantidade crescente de incerteza sobre o futuro, o que está causando muito mais desenvolvimento em C ++ em vez de C #; novos projetos estão optando por usar C ++. Ninguém quer dizer à gerência daqui a 18 a 24 meses "desculpe" se o Mac (ou iPad) se tornar um requisito. O C ++ é visto como a opção mais segura, mesmo que isso signifique uma perda de produtividade hoje.


2
Suportado por quem?

Por que você realmente se importa se a MS suporta? Na IMO, importa mais se a Apple suportar, se você deseja segmentar o Mac.
alternativa

Ir com C ++ não é uma má ideia. Você pode ter uma base de código portátil e usar as GUIs nativas em cada plataforma.
precisa saber é o seguinte

11
Para atualizar este post, parece que a Microsoft tomou conhecimento e eles começarão a oferecer suporte ao .NET em diferentes sistemas operacionais, embora não esteja claro como isso será feito. Você pode criar aplicativos de plataforma cruzada com o .NET usando NOV: nevron.com/products-open-vision.aspx (trabalho para esta empresa). Geralmente, você codifica em C # no Windows e depois compila para Wpf, MAC, Silverlight e em breve para iOS e Android. Há uma edição gratuita (comunitária) deste produto, portanto não há necessidade de sacrificar a produtividade e ficar com o C ++ arcano.
22815 Bob Milanov

Respostas:


17

existe alguma resposta semi-autorizada para o motivo pelo qual a Microsoft simplesmente não suporta .NET no próprio Mac?

A melhor resposta é provavelmente que você "não suporta" apenas o .NET no Mac. Você gasta centenas de milhões de dólares e vários anos portando o .NET no Mac.

Embora algumas coisas sejam totalmente gerenciadas e não exijam portabilidade, a maioria delas envolve a API do Win32 (janelas, controles, gdi +, criptografia, diretório ativo, COM, serviços corporativos, acesso a dispositivos, som, vídeo, codecs, winforms, etc., etc).

Cada um deles teria que ser abstraído no back-end e remapeado para bibliotecas nativas equivalentes no OSX. Obviamente, não haverá um bom mapeamento limpo, então você também precisa escrever hacks sobre hacks para fazê-lo funcionar exatamente da mesma maneira.

Depois, há o problema de que essas APIs no OSX podem ser quebradiças e a Apple não é muito boa em compatibilidade com versões anteriores, então você pode refazer seus hacks a cada versão principal (e às vezes versões menores e hotfixes), acumulando um alto custo de manutenção.

Basicamente, é uma quantidade enorme de dinheiro e trabalha com muito pouco ganho em uma plataforma cujo proprietário seria contra você de qualquer maneira. E você realmente não deseja gastar dinheiro para ajudar as pessoas a migrar da sua própria plataforma para a de um concorrente.

Portanto, você tem opções não perfeitas de plataforma cruzada:

  • C ++, que ainda exigirá portar no futuro
  • Silverlight fora do navegador, para suporte da Microsoft
  • Mono, que trabalha para oferecer suporte a um subconjunto saudável do .NET, mas não é o Microsoft

5
You spend hundreds of millions of dollars and several years porting .NET to the Mac.Com licença? Esse número parece um pouco alto ... Tenho certeza de que o Mono-Framework (com suporte para muitos mais sistemas operacionais) não custou tanto.
Bobby

11
@ Bobby: é o que estou pensando. O Mono + Silverlight parece a maior parte do caminho. Adicione a isso alguns P / Invoke e / ou C ++ / CLI para coisas menos populares (criptografia, AD, etc.) e acho que você teria uma solução bastante razoável a um custo razoável. Meu argumento é que a Microsoft quer gastar dinheiro ajudando as pessoas a entrar no OSX; caso contrário, as pessoas deixarão de usar C # /. NET no Windows.
Ðаn

@ Dan: Exatamente, a Microsoft não quer ser compatível com o mundo, caso contrário, o mundo poderia usar algo diferente. ;)
Bobby

15
A estrutura Mono também não é uma solução completa, totalmente testada, documentada e suportada. Há uma diferença no que é "bom o suficiente" para o código aberto e a qualidade que as pessoas esperam da Microsoft. Custaria facilmente centenas de milhões de dólares para fazê-lo no nível exigido pelos usuários. O que eles poderiam fazer para diminuir o investimento seria escolher um subconjunto popular (e portátil) da estrutura .NET e apenas fazê-lo. Foi isso que eles escolheram, eles chamam de "Silverlight".
jpobst

@jpobst, mas ainda assim parece que a MS fez exatamente isso ... e mais?
Ðаn

14

Não, o Silverlight é a única opção da Microsoft do .Net no OS X. O Mono não fica "atrasado" tanto quanto você pensa; suporta .Net 4.0 e C # 4, por exemplo. No entanto, os kits de ferramentas da interface do usuário (WinForms e WPF) não são bem suportados no OS X. O Mono não oferece suporte a WPF. A Microsoft também não poderia reescrever todo o mecanismo de renderização. Provavelmente tudo bem. Se você deseja escrever um aplicativo nativo do Mac, deve escrever uma interface do usuário nativa (talvez usando o MonoMac).


A gerência não parece muito inclinada a concordar com a opção Mono. E certamente não suportava o .NET 4.0 no mesmo dia que no Windows (ou?).
Ðаn

O Silverlight já não está na maior parte do caminho lá na frente do WPF (como)? Sim, o XAML precisaria ser diferente para obter a aparência do Mac.
Ðаn

2
@ Dan: A maneira como o Mono se move atualmente, se você começar a desenvolver um aplicativo para a versão mais recente do .NET quando a Microsoft o lançar, o Mono oferecerá suporte à mesma versão no momento em que o aplicativo estiver pronto para ser enviado.
Anon.

O @Dan SL e o WPF estão tentando mesclar o máximo possível. Existem diferenças técnicas, mas os conceitos fundamentais são multiplataforma.
Aaron McIver 15/02

6
Se o gerenciamento da sua empresa não estiver disposto a usar o Mono, você não poderá tornar um aplicativo de desktop escrito em C # 4.0 tradicional tão simples assim.
Ramhound 15/02/11


4

O Silverlight não é apenas um navegador . Desde a versão 3 OOB já existia e seria o caminho que eu seguiria se uma plataforma suportada pela Microsoft fosse obrigatória.

Embora o Mono possa ficar atrasado, ele não é tão removido da pilha do .NET quanto você imagina e não deve ser descartado como uma opção viável.

Por que a Microsoft não implementa toda a pilha .NET; ROI.


Mas parece que eles estão muito próximos do Silverlight ... por que não terminar o trabalho? Isso parece muito melhor para todo mundo que Mono reverse-engineering o compilador, CLR, etc.
Ðаn

11
SL não é a pilha .NET inteira. O tempo de execução do SL versus a pilha .NET inteira são animais completamente diferentes.
Aaron McIver 15/02

Sim, mas como você já pode fazer coisas como OOB, como sugere no SL, por que não portar o restante (1/3 a 40%?) Da pilha do .NET? Ou o SL nada mais é do que uma tentativa de matar o Flash?
15/02/11

@ Dan Quando as empresas estão empurrando coisas para a nuvem ... a última coisa que você quer fazer é portar uma pilha que não pode ser executada na nuvem. O SL pode ser executado em navegadores. Você pode discutir com pessoas como o Google e outras pessoas que a pressão para trabalhar em um navegador é real. Por que, nesse momento, você optaria por portar uma pilha inteira para um sistema operacional com menos de 10% de participação no mercado, além de virtualização tão prevalente nos dias de hoje?
Aaron McIver 15/02

A Microsoft (sem dúvida) tem o melhor ambiente de desenvolvimento disponível hoje em dia com C # e .NET. Mas empresas como a minha ficarão cada vez mais afastadas por causa da incerteza em torno do Mac / iPad / nuvem / etc. C ++ parece muito mais seguro.
Ðаn

3

A maior parte do lucro da Microsoft vem de dois produtos - Windows e Office. A compatibilidade entre plataformas prejudicaria o Windows.

Se você realmente deseja que o mesmo código seja executado em várias plataformas, escreva um aplicativo da web. Não soa como você faz. "Só por precaução" não é um bom motivo, é a fluência do escopo.

Mesmo que você decida segmentar o Mac OS X ou iOS daqui a 16 meses, você realmente acha que poderia pegar o código C ++ existente e transformá-lo em um bom aplicativo nativo (ou mesmo funcional)? A menos que você esteja trabalhando em um jogo em tela cheia, a resposta é não.

Economize tempo com o C # agora e, se você decidir mudar para o Mac, reescreva-o da maneira Mac com Objective-C e Cocoa - seus usuários agradecerão.


11
"Apenas no caso" é a realidade; ninguém quer dizer "opa" ao gerenciamento quando houver uma opção mais segura no C ++.
Ðаn

11
Supondo que o código da interface esteja adequadamente separado, será mais fácil mover o código C ++ para o Mac. Reescreva a interface no Objective-C usando Cocoa, conecte-se ao restante e você terá muito trabalho realizado.
David Thornley

@ David: e, portanto, o problema por trás desta pergunta: mais C ++, (muito) menos C #. Eu (realmente) gosto de c #!
Ðаn

Essas preocupações entre plataformas aqui são o motivo pelo qual muitos de nós ainda estão usando Java e não estão migrando para C #.
22711 Brian BrianBoblinuch

1

existe alguma resposta semi-autorizada para o motivo pelo qual a Microsoft simplesmente não suporta .NET no próprio Mac?

Onde está o mercado que justificaria a MS gastando o tesouro codificando-o? Para fazer isso, eles teriam que gastar muito dinheiro - milhões de dólares em salário. Um processo contínuo, conforme correções e atualizações.

E para quê? Direito de se gabar? Tudo o que eles conseguem é a capacidade das pessoas abandonarem o Windows para a Apple e ainda poderem executar seus aplicativos.

Se alguém lucrasse com isso, seria a Apple. Facilite a transição das pessoas para sua plataforma e os desenvolvedores (DEVELOPERS DEVELOPERS) a codificarem. Mas você acha que SJ se importa? Eles preferem inventar coisas novas para manter um i Infront. Além disso, a maior parte da estrutura é OS e as especificações do CLR são gratuitas para qualquer pessoa implementar. Você não pode colocar um NDA imundo em nada disso.


Parte do "conteúdo da Microsoft" é manter as pessoas usando suas ferramentas de primeira linha no Windows. Da maneira como as coisas estão acontecendo por aqui, o C # /. NET será relegado para aplicativos internos. Os desenvolvedores que usam C # há anos estão escrevendo C ++ novamente. Quanto ao custo; parece que eles já estão em 2/3 do Silverlight e / ou Mono.
Ðаn

O Mono é uma plataforma de código aberto e, embora a fonte do .NET tenha sido lançada, o .NET Framework NÃO é de código aberto. A Microsoft não poderá comprar o Mono, por muitos motivos, o principal é que eles não possuem um único aplicativo de código-fonte 100% aberto. Você sabia que o Silverlight é apenas um idioma no .NET e o motivo de ser multiplataforma porque a Microsoft gostaria que fosse um substituto para o Flash. Devo acrescentar também que a Apple fez movimentos das mãos para nem mesmo permitir algo assim em seu sistema operacional.
Ramhound 15/02/11

11
O @Dan parece que a solução para seus problemas não é "um idioma para governar todos", mas "como podemos implantar de uma maneira independente de plataforma". A maioria das pessoas está conseguindo isso quebrando a interface do usuário da lógica, incorporando uma por plataforma e a outra como um serviço nos inertubes.
Arrancado em

11
@ Dan Eu tenho uma solução para isso ... Não codifique para o Mac. Tenho um contrato pessoal de não desenvolver para a Apple que escrevi e assinei. Eu odiaria totalmente não poder codificar C # e, portanto, evitaria fazê-lo. Mas às vezes você tem que fazer o que tem que fazer, e se desejos fossem peixes, teríamos que pensar em outra aliteração para descrever as muitas coisas que queremos, mas não podemos ter.
Arrancado

11
@Dan kindasorta. Eles ainda não tocaram a área de trabalho (ainda). Mas estou impressionado com a diferença que faz cinco anos.
rasgado fora

0

Você pode achar o projeto MonoMac útil - http://www.mono-project.com/MonoMac

Ele permite o desenvolvimento de aplicativos Cocoa estilo Mono, que pode ser implantado na Mac App Store.

Eu consideraria fortemente essa abordagem para um desenvolvedor não familiarizado com o Objective-C, mas com o .NET / Mono / Java que precisa entregar um aplicativo em um cenário com restrição de tempo.


0

Nenhum.

Eu recomendo que você escreva um aplicativo C ++ compilável de forma cruzada - você pode se divertir nele - ou use Ruby com wxWidgets.

Considero o .NET uma péssima proposta para desenvolvimento de plataforma cruzada e manutenção de produtos a longo prazo. Embora, cara, você pode aplicar aplicativos rapidamente nele. : - /

Queria que Delphi ainda fosse um grande concorrente.


11
Já ouviu falar de Lázaro?
Happy Coder

Além disso, sempre chefe de Java?
Fernando Gonzalez Sanchez

0

Se você deseja executar o .NET nativamente em um Mac, pode usar o BootCamp para fazer isso (por exemplo, você executa o Windows no Mac e seus aplicativos .NET no Windows).

Se você quis dizer o Mac OS X em vez de apenas o hardware, pode usar o VMWare ou o Parallels para executar os aplicativos .NET no Windows (emulação) no OS X. Ambos têm modos visuais que permitem que o aplicativo apareça como se estivesse executando apenas no OS X (ele parecerá e se comportará como um aplicativo do Windows, mas se você estiver escrevendo um aplicativo que não seja da Web de plataforma cruzada sem uma interface personalizada para cada sistema operacional, sempre terá esse problema).

Você obterá a mesma quantidade de "suporte" ao fazer isso, pois está executando o aplicativo no Windows, embora virtualizado. É claro que qualquer pessoa que esteja executando o aplicativo precisará de uma cópia do software de virtualização e do Windows e estará disposta a aceitar um aplicativo que não se comporte como um aplicativo do OS X - mas é a única maneira de ter "nativo" .NET rodando em um Mac.


0

Dan, eu não acho que você pode fazer isso. No entanto, uma solução possível (ainda vapourware) é usar o Embarcadero Rad Studio C ++ Builder, que possui uma boa VCL para o desenvolvimento de aplicativos visuais (nos quais se baseia grande parte do .net), e eles são rumores de que haverá suporte para várias plataformas. no próximo lançamento.

Isso será desenvolvido no Windows, direcionado para Mac ou Linux. Ou assim diz o roteiro deles.

O ambiente C ++ é razoável e, se você desenvolver o VCL, em teoria, o aplicativo funcionará apenas nas outras plataformas.

É claro que até que seja realmente enviado, resta ver como isso é realmente eficaz.


-2

A resposta é não.

Na verdade, seu caso parece ser um bom exemplo de quando não escolher o .NET.


Ninguém pode prever o futuro e ninguém quer assumir riscos "indevidos".
Ðаn

@ Dan: E o ponto é? Você parece estar concordando comigo ...?
Gabriel Magana

-3

Se você deseja desenvolver um sistema operacional, use as ferramentas certas. Não há aplicativos verdadeiramente profissionais escritos em mono para o Mac. Por outro lado, há muitos desenvolvedores não profissionais usando muitas ferramentas, criando muito lixo. Veja as avaliações de aplicativos mono que foram escritas para o OSX. Os desenvolvedores estão escrevendo usando uma estrutura incompleta hackeada para combinar com a plataforma OSX. Comece a escrever - se você usou o C # Objetivo C é um aprendizado rápido.

Desenvolvedores profissionais para mac usam C ++, Objective C, Cocoa e Xcode. Desenvolvo em várias plataformas e cada uma tem suas melhores ferramentas. Use o Xcode para Mac e iOS.

Assim como uma observação lateral, o Xcode não é o Visual Studio, não é tão estável e é uma desgraça para a apple em comparação, mas funciona bem quando você se acostuma com as peculiaridades dele. É muito difícil vencer as ferramentas Microsofts - mas elas foram escritas para Windows, não para Linux, iOS, OSX, AIX etc.


11
Você tem fatos para fazer backup de declarações como "O Xcode não é tão estável e é uma vergonha para a Apple" porque, com base em minha própria experiência pessoal, todos que usaram o Xcode o adoraram. Além disso, mesmo depois de expressar sua opinião pessoal sobre um assunto que lhe parece pouco familiar, você nem percebe que, em 2013, existe realmente uma solução. Claro que a solução é realmente Monoe, Xamarin.Macmas é uma solução. A versão atual do Mono é quase uma implementação 100% completa do .NET 4.0, faltando apenas alguns dos principais recursos que provavelmente nunca serão portados (por exemplo, WPF).
Ramhound
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.