Objective-C para Windows

230

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

Cygwin e gcc? Existe uma maneira de integrar isso de alguma forma no Visual Studio?

Nesse sentido - existem sugestões sobre como vincular e usar o Windows SDK para algo assim. É uma fera diferente, mas sei que posso escrever assembly e link nas DLLs do Windows, dando-me acessibilidade a essas chamadas, mas não sei como fazer isso sem pesquisar no Google e obter instruções fragmentadas.

Alguém está ciente de um bom recurso on-line ou de livro para fazer ou explicar esse tipo de coisa?

Luther Baker
fonte
5
Se você só está fazendo isso para iOS, você pode usar iOS Ambiente de Compilação por PM Baty ...
Cole Johnson

Respostas:

146

Expandindo as duas respostas anteriores, se você quiser apenas o Objective-C, mas não nenhuma 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ê deseja as estruturas Cocoa, ou pelo menos um subconjunto razoável delas, o GNUStep e o Cocotron são suas melhores apostas.

O Cocotron implementa muitas coisas que o GNUStep não faz, como CoreGraphics e CoreData, embora eu não possa garantir como a implementação deles é completa em uma estrutura específica. Seu objetivo é 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 geralmente usa a versão mais recente do gcc, eles também adicionam suporte ao Objective-C ++ e muitos dos recursos do Objective-C 2.0.

Não testei esses recursos com o GNUStep, mas se você usar uma versão suficientemente nova do gcc, poderá usá-los. Não consegui usar o Objective-C ++ com o GNUStep há alguns anos atrás. No entanto, o GNUStep compila a partir de praticamente qualquer plataforma. Cocotron é um projeto muito centralizado em mac. Embora provavelmente seja possível compilá-lo em outras plataformas, ele vem com arquivos de projeto XCode, não makefiles, portanto você só pode compilar suas estruturas prontas para uso no OS X. Ele também vem com instruções sobre a compilação de 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 quanto configurar um para o GNUStep, e você estará por conta própria, portanto o GNUStep é definitivamente o caminho a seguir, se você estiver desenvolvendo no Windows em vez de apenas para Windows.

Pelo que vale, a Cocotron é licenciada sob a licença MIT e o GNUStep é licenciado sob a LGPL.

Michael Buckley
fonte
1
Você sempre pode portar os framworks do Cocoa que são de código aberto. Exemplo sendo CoreFoundation.
Cole Johnson
Nem todo o Core Foundation IS é de código aberto. Uma quantidade enorme é de código fechado.
Uchuugaka
Não sei por que esse cara teve a melhor resposta, ele nem tentou as coisas de que estava falando. Eles devem criar um novo crachá para as respostas bs. Sem ofensa @michael. É uma leitura interessante.
Wolfpack'08
Sem ofensas, mas, para constar, no momento em que escrevi essa resposta, eu lutava há algumas semanas para compilar o Objective-C para Windows e tentara usar o GNUStep e o Cocoatron. Acabei sendo forçado a reescrever o projeto em C ++, devido a alguns erros do compilador no momento, e os ivars não foram inicializados como 0 no Windows. Fiz referência a "Não testei esses recursos", mas estava falando dos então novos recursos do Objective-C 2.0, que só estavam disponíveis nas plataformas da Apple há menos de um ano quando essa resposta foi escrita e acabara de desembarcar no GNUStep.
Michael Buckley
89

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

  1. Visite o site do GNUstep e faça o download GNUstep MSYS Subsystem(MSYS para GNUstep), GNUstep Core(Bibliotecas para GNUstep) eGNUstep 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\Foundation1 e verifique se Foundation.hexiste
  4. Abra um prompt de comando e execute gcc -vpara verificar se GNUstep MSYSestá instalado corretamente (se você receber um erro de arquivo não encontrado, verifique se a binpasta GNUstep MSYSestá na sua PATH)
  5. Use este simples programa "Hello World" para testar a funcionalidade do GNUstep:

    #include <Foundation/Foundation.h>
    
    int main(void)
    {
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
        NSLog(@"Hello World!.");
        [pool drain];
     return;
    }
  6. Volte para o prompt de comando e cdpara onde você salvou o programa "Hello World" e compile-o: 2

    gcc -o helloworld.exe <HELLOWORLD>.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 helloworldpara executá-lo

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


NOTAS :

  1. Usei o caminho de instalação padrão - ajuste sua linha de comando de acordo
  2. Verifique se o caminho da pasta é semelhante ao meu, caso contrário, você receberá um erro
teshguru
fonte
1
Esta instalação sugerida não funcionou no meu PC porque eu já instalei o gcc que usei para o nasm. Então eu só corrigido gcc -o helloworld...para c:\gnustep\bin\gcc -o helloworld...e funcionou. A alternativa seria modificar as variáveis ​​de ambiente, o que eu não fiz desde que estava apenas vendo o objetivo C. Obrigado ao teshguru pela resposta direta.
Martin Berger
Considere remover a formatação do código em torno dos nomes das coisas. GNUstep MYSY não é código, é apenas o nome de um software. Se você quer que algo se destaque, considere encorajá-lo? E se algo se conectar a uma tag, considere usar os delimitadores de tags, mas não deve haver motivo para colocar nomes próprios nos delimitadores de tags.
Wolfpack'08
quando usado yhis c: \ gnustep \ bin \ gcc -o helloworld.exe helloworld.m -I / GNUstep / GNUstep / Sistema / Biblioteca / Cabeçalhos -L / GNUstep / GNUstep / Sistema / Biblioteca / Bibliotecas -std = c99 -lobjc - lgnustep-base-corda classe -fconstant = NSConstantString funciona fir me
Dalvik
13

Além disso:

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

http://www.cocotron.org/

amrox
fonte
4
O projeto Cocotron foi projetado para ser compilado em cruz do XCode, não gravado no Windows e compilado lá.
Dan Udey 26/09/08
2
essa não é uma boa resposta, nem sei por que o OP escolheu isso como 'a resposta', porque o CoCotron é para Mac e o OP quer uma solução baseada no Windows.
Cbrulak 03/04/09
Você está correto - fiquei um pouco empolgado ao ler o seguinte: "O objetivo geral é fornecer suporte completo em qualquer plataforma viável; o projeto deve ser o mais portátil possível. No entanto, a maior parte do trabalho neste momento é concentrou-se em fornecer suporte para o Microsoft Windows. Em particular as versões baseadas em NT, 2000 até o Vista ".
Luther Baker
13

WinObjC? Windows Bridge para iOS (anteriormente conhecido como 'Project Islandwood').

O Windows Bridge para iOS (também conhecido como WinObjC) é um projeto de código aberto da Microsoft que fornece um ambiente de desenvolvimento Objective-C para o Visual Studio / Windows. Além disso, o WinObjC fornece suporte à compatibilidade da API do iOS. Embora a versão final ocorra ainda este outono (permitindo que a ponte aproveite os novos recursos de ferramentas que serão lançados com a próxima 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 MIT. Dada a ambição do projeto, tornando fácil para os desenvolvedores do iOS criar e executar aplicativos no Windows.

Salmaan Ahmed tem uma postagem detalhada 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 IDE e o que a ponte é e não é. O melhor de tudo é que o código fonte da ponte para iOS está ativo no GitHub agora.

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

Lee Stott
fonte
9

Eu tenho sentimentos contraditórios sobre o projeto Cocotron. Estou feliz por eles estarem liberando código-fonte e compartilhando, mas não sinto que eles estejam fazendo as coisas da maneira mais fácil.

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

Eles também não se deram ao trabalho de alavancar o CoreFoundation, que também é de código aberto da Apple. Eu postei uma pergunta sobre isso, mas não recebi uma resposta.

Eu acho que a melhor solução atual é pegar o código fonte de várias fontes (Apple, CocoTron, GnuStep) e juntá-lo ao que você precisa. Você terá que ler muita fonte, mas valerá o resultado final.

Matthieu Cormier
fonte
2
Desculpe por não responder à sua pergunta do grupo, para resumir: O APSL é péssimo e o tempo de execução e o CF estão abaixo deles.
11119 Christopher Lloyd
1
O que é péssimo no APSL? ( opensource.apple.com/license/apsl ) Não é invasivo como a GPL. Se você modificar o código coberto, deverá disponibilizá-lo. O código coberto seria qualquer modificação que você fizer no CoreFoundation, por exemplo, mas não incluiria seu programa real. Você também precisa marcar claramente suas modificações. Isso é um incômodo, mas vale a pena trocar o código altamente testado da Apple, não é?
Matthieu Cormier
8
Eu não acho que você entenda como a rescisão funciona, não é algo que eles podem fazer com todos de uma vez, o código é licenciado sob os termos e utilizável por esses termos indefinidamente. O que pode acontecer é que a Apple possa destacar indivíduos / empresas que acham que violaram a licença. A FSF já faz isso com violações da GPL, você realmente acha que a Apple é mais amigável para os desenvolvedores do que a FSF? Se você acha que os termos são irrelevantes e sem sentido, tenho certeza de que você pode convencer a Apple legal a removê-los.
Christopher Lloyd
8
Deve-se observar que a Apple trabalhou com o FSF nas alterações do APSL e que o FSF considera o APSL Versão 2.0 uma licença de software livre. gnu.org/philosophy/apsl.html
Sean
3
Na minha perspectiva (como alguém que lidou com BSD, LGPL, MIT e outras licenças em um produto proprietário), a licença da Apple é MENOS restritiva do que a GPL - o que francamente é um problema. Se eu puder obter BSD, MIT ou APSL, prefiro trabalhar com eles do que com a GPL.
Lloyd Sargent
8

Estou ciente de que esta é uma publicação muito antiga, mas encontrei uma solução que só ficou disponível mais recentemente E habilita quase todos os recursos do Objective-C 2.0 na plataforma Windows.

Com o advento do gcc 4.6, o suporte aos recursos da linguagem Objective-C 2.0 (blocos, sintaxe de pontos, propriedades sintetizadas etc.) foi adicionado ao compilador Objective-C (consulte as notas de versão para obter detalhes completos). Seu tempo de execução também foi atualizado para funcionar quase de forma idêntica ao tempo de execução Objective-C 2.0 da Apple. Em resumo, isso significa que (quase) qualquer programa que legitimamente seja compilado com o Clang em um Mac também será compilado com o gcc 4.6 sem modificação.

Como uma observação lateral, um recurso que não está disponível é o literal dictionary / array / etc, pois todos são codificados no Clang para usar as classes NSDictionary, NSArray, NSNumber, etc da Apple.

No entanto, se você gosta de viver sem os extensos quadros da Apple, pode. Conforme observado em outras respostas, o GNUStep e o Cocotron fornecem versões modificadas das bibliotecas de classes 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 The MinGW . Certifique-se de que ao instalá-lo inclua a instalação de C, C ++, Objective-C e Objective-C ++. Embora opcional, eu também sugeriria a instalação do ambiente MSYS.

Uma vez instalado, a fonte do Objective-C 2.0 pode ser compilada 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 nativos da GUI do Windows com o -mwindowssinalizador. Por exemplo:

g++ -mwindows MyFile.cpp

Ainda não tentei, mas imagino que, se você agrupar suas classes de Objective-C no Objective-C ++ na camada mais alta possível, conseguirá entrelaçar com êxito a GUI nativa do Windows C ++ e Objective-C nativas, tudo em um Aplicativo do Windows.

Coisas efêmeras
fonte
6

Se você quiser experimentar, há um compilador Objective-C para .NET (Windows) aqui: qckapp

user397362
fonte
este programa não pôde ser compilado com osc. # import <Foundation / Foundation.h> int main (int argc, const char * argv []) {NSAutoreleasePool * pool = [[NSAutoreleasePool aloc] init]; NSLog (@ "Testando ... \ n..1 \ n ... 2 \ n .... 3"); [esgoto da piscina]; retornar 0; }
KIRAN KJ
5

Você pode obter um compilador c objetivo que funcionará com o Windows e funcionará bem com o Visual Studio 2008 \ 2010 aqui.

open-c flite

Basta baixar a fonte mais recente. Você não precisa criar todo o CF-Lite; existe uma solução chamada objc.sln. Você precisará corrigir alguns dos caminhos de inclusão, mas depois ele será compilado. Existe até um projeto de teste incluído para que você possa ver alguns arquivos de objetivo-c .m sendo compilados e trabalhando no visual studio. Uma coisa triste é que ele só funciona com o Win32 e não com o x64. Há algum código de montagem que precisaria ser escrito para x64 para suportar isso.

Aaron Stainback
fonte
Fiz o download e executei este projeto usando o Visual Studio 2013 e recebi 30 instâncias desse erro. Erro 64 erro C2632: 'char' seguido por 'bool' é ilegal C: \ opencflite-code-248-trunk \ include \ c99 \ stdbool.h 20 1 objc
Adam Mendoza
4

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

No Leiame:

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

Este projeto é uma bifurcação do objc4-532.2, o tempo de execução do Objective C fornecido com o OS X 10.8.5. A porta pode ser compilada de forma cruzada 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 blocos, dependem de trabalhos mais sérios em projetos de terceiros. As limitações são:

• somente 32 bits - 64 bits está em andamento

• Somente link estático - o link dinâmico está em andamento

• Sem fechamentos / blocos - até o libdispatch os suportar no Windows

• Sem exceções - até o clang suportá-las no Windows

• Nenhum GC antigo - até que alguém se importe ...

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

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

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

insys
fonte
2

Obtenha o GNUStep aqui

Obtenha o MINGW aqui

Instale o MINGW Instale o GNUStep e teste

raksa eng
fonte
0

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

Projeto pequeno: jGRASP with gcc Projeto grande: Cocotron

Ouvi dizer que existem emuladores, mas só consegui encontrar o Emulador Apple II http://virtualapple.org/ . Parece limitado a jogos.

Cloud Cho
fonte
0

Antes 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 (quando o NeXTSTEP apareceu pela primeira vez).

Vim

ctagsofereça suporte ao Objective-C desde r771 (certifique-se de escolher a versão pré-lançamento 5.9 e adicioná --langmap=ObjectiveC:.m.h-la à linha de comando, veja aqui ), para que você tenha uma conclusão decente do código / navegação por tags.

Aqui está um pequeno tutorial sobre como adicionar suporte ao Objective-C ao plug-in da barra de tags do Vim.

Emacs

O mesmo se aplica às etagsversões modernas do Emacsen, para que você possa começar com o Emacs Objective C Mode . O YASnippet fornecerá modelos úteis:

YASnippet objc-mode

e se você quiser algo mais inteligente do que a conclusão básica de código baseada em tags , dê uma olhada nesta pergunta .

Eclipse

O CDT suporta Makefileprojetos baseados em:

insira a descrição da imagem aqui

- para que tecnicamente você possa criar seus projetos Objective-C imediatamente (no Windows, você precisará da cadeia de ferramentas Cygwin ou MinGW ). O único problema é o editor de código, que relatará muitos erros contra o que considera um código C puro (a verificação de código em tempo real pode ser desativada, mas ainda assim ...). Se você deseja destacar a sintaxe adequada, é possível adicionar o Eclim ao seu Eclipse e aproveitar todos os bons recursos do Eclipse e do Vim (veja acima).

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

SlickEdit

SlickEdit , entre outras características de uma grande IDE, faz suporte Objective-C. Embora seja bastante complexo aprender (não tão complexo quanto o Emacs), acredito que esta é sua melhor opção, desde que você não se importe em 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, mas quem se importa?). Pessoalmente, não acho que o KDevelop seja superior ao Emacsen , por isso não me incomodaria em tentar.


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

Graves
fonte