Objetivo C para Windows

Qual seria a melhor maneira de escrever Objective-C na plataforma Windows?

Cygwin e gcc? Existe uma maneira que eu possa integrar isso no Visual Studio?

Nesse sentido – há alguma sugestão sobre como vincular e usar o SDK do Windows para algo como isso. É um animal diferente, mas eu sei que posso escrever assembly e link nas DLLs do Windows me dando access a essas chamadas, mas eu não sei como fazer isso sem googling e obter instruções parciais.

Alguém está ciente de um bom recurso on-line ou do livro para fazer ou explicar esses tipos de coisas?

Expandindo as duas respostas anteriores, se você quiser apenas o Objective-C, mas não qualquer uma das estruturas do Cocoa, o gcc funcionará em qualquer plataforma. Você pode usá-lo através do Cygwin ou obter o MinGW. No entanto, se você quiser os frameworks Cocoa, ou pelo menos um subconjunto razoável deles, então o GNUStep e o Cocotron são suas melhores apostas.

O Cocotron implementa muitas coisas que o GNUStep não possui, como CoreGraphics e CoreData, embora eu não possa garantir a conclusão de sua implementação em uma estrutura específica. Seu objective é manter o Cocotron atualizado com a versão mais recente do OS X, para que qualquer programa viável do OS X possa ser executado no Windows. Como o GNUStep normalmente usa a última versão do gcc, eles também adicionam suporte para Objective-C ++ e muitos dos resources do Objective-C 2.0.

Eu não testei esses resources com o GNUStep, mas se você usar uma versão suficientemente nova do gcc, você poderá usá-los. Eu não era capaz de usar o Objective-C ++ com GNUStep alguns anos atrás. No entanto, o GNUStep compila de praticamente qualquer plataforma. O Cocotron é um projeto muito centrado em mac. Embora seja provavelmente possível compilá-lo em outras plataformas, ele vem com arquivos de projeto XCode, não com makefiles, então você só pode compilar seus frameworks no OS X. Ele também vem com instruções para compilar aplicativos do Windows no XCode, mas não qualquer outra plataforma. Basicamente, é provavelmente possível configurar um ambiente de desenvolvimento do Windows para o Cocotron, mas não é tão fácil como configurar um para o GNUStep, e você estará por conta própria, então o GNUStep é definitivamente o caminho a seguir se você estiver desenvolvendo Windows ao invés de apenas para o Windows.

Por que vale a pena, Cocotron é licenciado sob a licença do MIT, e GNUStep é licenciado sob a LGPL.

Você pode usar o Objective C dentro do ambiente do Windows. Se você seguir estas etapas, ele deve estar funcionando bem:

  1. Visite o site GNUstep e faça o download do GNUstep MSYS Subsystem (MSYS para GNUstep), GNUstep Core (Bibliotecas para GNUstep) e GNUstep Devel
  2. Depois de baixar esses arquivos, instale nessa ordem, ou você terá problemas com a configuração
  3. Navegue para C:\GNUstep\GNUstep\System\Library\Headers\Foundation 1 e verifique se o Foundation.h existe
  4. Abra um prompt de comando e execute o gcc -v para verificar se o GNUstep MSYS está instalado corretamente (se você receber um erro de arquivo não encontrado, assegure-se de que a pasta bin do GNUstep MSYS esteja em seu PATH )
  5. Use este programa simples “Hello World” para testar a funcionalidade do GNUstep:

     #include  int main(void) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog(@"Hello World!."); [pool drain]; return; } 
  6. Volte para o prompt de comando e vá para o cd onde você salvou o programa “Hello World” e depois compile-o:

     gcc -o helloworld.exe .m -I /GNUstep/GNUstep/System/Library/Headers -L /GNUstep/GNUstep/System/Library/Libraries -std=c99 -lobjc -lgnustep-base -fconstant-string-class=NSConstantString 
  7. Finalmente, no prompt de comando, digite helloworld para executá-lo

Tudo de bom e divirta-se com o Objective-C!


NOTAS :

  1. Eu usei o caminho de instalação padrão – ajuste sua linha de comando de acordo
  2. Certifique-se de que o caminho da sua pasta é semelhante ao meu, caso contrário, você receberá um erro

Além disso:

O Cocotron é um projeto de código aberto que visa implementar uma API Objective-C de plataforma cruzada semelhante à descrita pela documentação do Cocoa da Apple Inc. Isso inclui o tempo de execução AppKit, Foundation, Objective-C e APIs de suporte, como CoreGraphics e CoreFoundation.

http://www.cocotron.org/

WinObjC? Windows Bridge para iOS (anteriormente conhecido como ‘Projeto Islandwood’).

O Windows Bridge para iOS (também conhecido como WinObjC) é um projeto de software livre da Microsoft que fornece um ambiente de desenvolvimento Objective-C para o Visual Studio / Windows. Além disso, o WinObjC fornece suporte para compatibilidade com API do iOS. Embora a versão final aconteça no final deste outono (permitindo que a ponte aproveite os novos resources de ferramentas que serão lançados com a Atualização do Visual Studio 2015),

A ponte está disponível para a comunidade de código aberto agora em seu estado atual. Entre agora e o outono. A ponte do iOS como um projeto de código aberto sob a licença do MIT. Dada a ambição do projeto, é fácil para os desenvolvedores de iOS criar e executar aplicativos no Windows.

Salmaan Ahmed tem uma postagem aprofundada no Windows Bridge para iOS http://blogs.windows.com/buildingapps/2015/08/06/windows-bridge-for-ios-lets-open-this-up/ discutindo o compilador, tempo de execução, integração com IDE e o que a bridge é e não é. O melhor de tudo é que o código-fonte da ponte do iOS está ativo no GitHub agora.

A ponte iOS suporta aplicativos do Windows 8.1 e do Windows 10 criados para arquiteturas de processadores x86 e x64 e, em breve, adicionaremos otimizações de compiladores e suporte para o ARM, que adiciona suporte móvel.

Eu tenho sentimentos contraditórios sobre o projeto Cocotron. Fico feliz que eles estão lançando código-fonte e compartilhamento, mas não sinto que eles estão fazendo as coisas da maneira mais fácil.

Exemplos.
A Apple lançou o código-fonte para o tempo de execução object-c , que inclui propriedades e garbage collection. O projeto Cocotron, no entanto, tem sua própria implementação do tempo de execução objective-c. Por que se preocupar em duplicar o esforço? Existe até mesmo um arquivo de projeto do Visual Studio que pode ser usado para criar um arquivo objc.dll. Ou se você é realmente preguiçoso, você pode simplesmente copiar o arquivo DLL de uma instalação do Safari no Windows.

Eles também não se deram ao trabalho de aproveitar o CoreFoundation, que também é aberto pela Apple. Eu postei uma pergunta sobre isso, mas não recebi uma resposta.

Acho que a melhor solução atual é pegar código-fonte de múltiplas fonts (Apple, CocoTron, GnuStep) e juntá-lo ao que você precisa. Você terá que ler muitas fonts, mas valerá o resultado final.

Estou ciente de que este é um post muito antigo, mas eu encontrei uma solução que só se tornou disponível mais recentemente e habilita quase todos os resources do Objective-C 2.0 na plataforma Windows.

Com o advento do gcc 4.6, o suporte para os resources da linguagem Objective-C 2.0 (blocos, syntax de pontos, propriedades sintetizadas, etc) foi adicionado ao compilador Objective-C (veja as notas da versão para maiores detalhes). Seu tempo de execução também foi atualizado para funcionar quase de forma idêntica ao próprio tempo de execução Objective-C 2.0 da Apple. Em suma, isso significa que (quase) qualquer programa que irá legitimamente compilar com o Clang em um Mac também irá compilar com o gcc 4.6 sem modificação.

Como uma nota lateral, um recurso que não está disponível é o dictionary / array / etc literais, já que eles são todos codificados no Clang para usar as classs NSDictionary, NSArray, NSNumber, etc da Apple.

No entanto, se você está feliz em viver sem os extensos frameworks da Apple, você pode. Como observado em outras respostas, o GNUStep e o Cocotron fornecem versões modificadas das bibliotecas de classs da Apple, ou você pode escrever suas próprias (minha opção preferida).

O MinGW é uma maneira de obter o GCC 4.6 na plataforma Windows e pode ser baixado no site do MinGW . Certifique-se de que, ao instalá-lo, você inclua a instalação de C, C ++, Objective-C e Objective-C ++. Embora opcional, sugiro também instalar o ambiente MSYS.

Uma vez instalado, o código fonte do Objective-C 2.0 pode ser compilado com:

gcc MyFile.m -lobjc -std=c99 -fobjc-exceptions -fconstant-string-class=clsname (etc, additional flags, see documentation)

O MinGW também inclui suporte para compilar aplicativos GUI nativos do Windows com o sinalizador -mwindows . Por exemplo:

g++ -mwindows MyFile.cpp

Eu não tentei ainda, mas eu imagino que se você quebrar suas classs Objective-C em Objective-C ++ na camada mais alta possível, você deve conseguir interligar com sucesso o Windows GUI C ++ e Objective-C nativos no Windows Application.

Confira o WinObjC :

https://github.com/Microsoft/WinObjC

É um projeto oficial e de código aberto da Microsoft que se integra ao Visual Studio + Windows.

Se você quer apenas experimentar, existe um compilador Objective-C para .NET (Windows) aqui: qckapp

Você pode obter um compilador c objective que irá trabalhar com o Windows e jogar legal com o Visual Studio 2008 \ 2010 aqui.

open-c flite

Basta baixar a última fonte. Você não precisa construir todo o CF-Lite, existe uma solução chamada objc.sln. Você precisará consertar alguns dos caminhos de inclusão, mas então irá construir muito bem. Existe até um projeto de teste incluído para que você possa ver alguns arquivos objective-c .m sendo compilados e trabalhando no visual studio. Uma coisa triste é que só funciona com Win32 não x64. Existe algum código assembly que precisaria ser escrito para x64 para suportar isso.

Uma recente tentativa de portar o Objective C 2.0 para o Windows é o projeto Subjetivo .

Do Leiame:

Subjetivo é uma tentativa de trazer o Objective C 2.0 com suporte a ARC para o Windows.

Este projeto é um fork do objc4-532.2, o runtime do Objective C que acompanha o OS X 10.8.5. A porta pode ser cross-compilada no OS X usando o llvm-clang combinado com o vinculador MinGW.

Existem certas limitações, muitas das quais são uma questão de trabalho extra, enquanto outras, como exceções e bloqueios, dependem de um trabalho mais sério em projetos de terceiros. As limitações são:

• 32 bits apenas – 64 bits está em andamento

• Somente vinculação estática – a vinculação dinâmica está em andamento

• Sem fechamentos / blocos – até que a libdispatch os suporte no Windows

• Sem exceções – até que o clang as suporte no Windows

• Sem estilo antigo GC – até que alguém se importe …

• Internals: no vtables, sem suporte a gdb, apenas malloc simples, sem pré-otimizações – algumas dessas coisas estarão disponíveis sob a compilation de 64 bits.

• Atualmente, é necessário um compilador clang patched; o patch adiciona -fobjc-runtime = sinalizador subj

O projeto está disponível no Github , e há também um tópico no Grupo Cocotron descrevendo alguns dos avanços e problemas encontrados.

Obtenha o GNUStep aqui

Obtenha o MINGW aqui

Instale o MINGW Instale o GNUStep e teste

Se você estiver confortável com o ambiente do Visual Studio,

Pequeno projeto: jGRASP com gcc Grande projeto: Cocotron

Ouvi dizer que há emuladores, mas só encontrei o Apple II Emulator http://virtualapple.org/ . Parece limitado a jogos.

Primeiro de tudo, esqueça as ferramentas GNUStep . Nem o ProjectManager nem o ProjectCenter podem ser chamados de IDE. Com todo o respeito, parece que os caras do projeto GNUStep estão presos no final dos anos 80 (que é quando o NeXTSTEP apareceu pela primeira vez).

Vim

ctags suportam o Objective-C desde r771 (certifique-se de pegar a versão 5.9 de pré-lançamento e adicionar --langmap=ObjectiveC:.mh na linha de comando, veja aqui ), então você terá uma boa navegação de tags / completação de código.

Aqui está um pequeno tutorial sobre como adicionar suporte ao Objective-C ao plugin do Vim tagbar.

Emacs

O mesmo se aplica aos etags enviados com o Emacsen moderno, para que você possa começar com o Modo C do Emacs Objective . O YASnippet fornecerá modelos úteis:

YASnippet objc-mode

e se você quiser algo mais inteligente do que o preenchimento de código básico baseado em tags , dê uma olhada nesta questão .

Eclipse

CDT suporta projetos baseados em Makefile :

insira a descrição da imagem aqui

– tecnicamente, você pode montar seus projetos do Objective-C (no Windows, você precisará do toolchain Cygwin ou MinGW ). O único problema é o editor de código, que irá reportar muitos erros contra o que ele acha que é um código C puro (a verificação de código on-the-fly pode ser desligada, mas ainda assim …). Se você quiser realce de syntax adequado, é possível include o Eclim em seu Eclipse e aproveitar todos os bons resources do Eclipse e do Vim (veja acima).

Outro promissor plugin para o Eclipse é o Colorer , mas ainda não suporta o Objective-C. Sinta-se à vontade para registrar uma solicitação de recurso.

SlickEdit

O SlickEdit , entre outros resources de um ótimo IDE, suporta o Objective-C. Embora seja bastante complexo para aprender (não tão complexo como Emacs embora), creio que esta é a sua melhor opção desde que você não se importe de comprá-lo (o preço é bastante acessível).

Além disso, ele possui um plug-in do Eclipse que pode ser usado como uma alternativa ao editor independente.

KDevelop

Há rumores de que existe um patch do KDevelop (15 anos de idade, mas quem se importa?). Pessoalmente, não acho que o KDevelop seja superior ao das funcionalidades do Emacsen , pelo que não me incomodaria tentar fazê-lo.


O acima também se aplica ao desenvolvimento do Objective-C no Linux, uma vez que todas as ferramentas mencionadas são mais ou menos portáteis.