Objective-C per Windows


230

Quale sarebbe il modo migliore per scrivere Objective-C sulla piattaforma Windows?

Cygwin e gcc? C'è un modo in cui in qualche modo posso integrarlo in Visual Studio?

In tal senso, esistono suggerimenti su come collegarsi e utilizzare Windows SDK per qualcosa del genere. È una bestia diversa ma so di poter scrivere assembly e link nelle DLL di Windows dandomi accessibilità a quelle chiamate ma non so come farlo senza cercare su Google e ottenere indicazioni frammentarie.

Qualcuno è a conoscenza di una buona risorsa online o di un libro per fare o spiegare questo tipo di cose?


5
Se lo fai solo per iOS, puoi usare iOS Build Environment di PM Baty ...
Cole Johnson

Risposte:


146

Espandendo le due risposte precedenti, se vuoi solo Objective-C ma non uno dei framework Cocoa, gcc funzionerà su qualsiasi piattaforma. Puoi usarlo tramite Cygwin o ottenere MinGW. Tuttavia, se vuoi i framework Cocoa, o almeno un loro sottoinsieme ragionevole, allora GNUStep e Cocotron sono le tue migliori scommesse.

Cocotron implementa molte cose che GNUStep non ha, come CoreGraphics e CoreData, anche se non posso garantire quanto sia completa la loro implementazione su un framework specifico. Il loro obiettivo è mantenere Cocotron aggiornato con l'ultima versione di OS X in modo che qualsiasi programma OS X praticabile possa essere eseguito su Windows. Poiché in genere GNUStep utilizza l'ultima versione di gcc, aggiunge anche il supporto per Objective-C ++ e molte funzionalità di Objective-C 2.0.

Non ho testato queste funzionalità con GNUStep, ma se usi una versione sufficientemente nuova di gcc, potresti essere in grado di usarle. Non sono stato in grado di utilizzare Objective-C ++ con GNUStep alcuni anni fa. Tuttavia, GNUStep si compila praticamente da qualsiasi piattaforma. Cocotron è un progetto molto macentrico. Anche se è probabilmente possibile compilarlo su altre piattaforme, arrivano i file di progetto XCode, non i makefile, quindi puoi solo compilare i suoi framework out of the box su OS X. Viene anche fornito con istruzioni sulla compilazione di app di Windows su XCode, ma non qualsiasi altra piattaforma. Fondamentalmente, è probabilmente possibile configurare un ambiente di sviluppo Windows per Cocotron, ma non è facile come configurarne uno per GNUStep, e sarai da solo, quindi GNUStep è sicuramente la strada da percorrere se stai sviluppando su Windows invece che solo per Windows.

Per quello che vale, Cocotron è concesso in licenza con la licenza MIT e GNUStep è concesso in licenza sotto la LGPL.


1
È sempre possibile eseguire il porting dei framwork di cacao che sono open source. Esempio di CoreFoundation.
Cole Johnson,

Non tutta la Core Foundation IS è open source. Una grande quantità è chiusa.
Uchuugaka,

X Non so perché questo ragazzo abbia avuto la migliore risposta che non ha nemmeno provato le cose di cui sta parlando. Dovrebbero creare un nuovo badge per le risposte bs. Senza offesa @michael. È una lettura interessante.
Wolfpack'08,

Senza offesa, ma per la cronaca, quando scrissi questa risposta, avevo lottato per alcune settimane per compilare Objective-C per Windows e avevo provato a utilizzare sia GNUStep che Cocoatron. Alla fine sono stato costretto a riscrivere il progetto in C ++, a causa di alcuni bug del compilatore, e gli ivar non inizializzati su 0 su Windows. Ho fatto riferimento a "Non ho testato quelle funzionalità", ma stavo parlando delle nuove funzionalità di Objective-C 2.0, che erano disponibili sulle piattaforme Apple da meno di un anno quando era stata scritta questa risposta, e era appena atterrato in GNUStep.
Michael Buckley,

89

È possibile utilizzare l'obiettivo C all'interno dell'ambiente Windows. Se segui questi passaggi, dovrebbe funzionare bene:

  1. Visitare il sito Web GNUstep e scaricare GNUstep MSYS Subsystem(MSYS per GNUstep), GNUstep Core(Librerie per GNUstep) eGNUstep Devel
  2. Dopo aver scaricato questi file, installali in questo ordine, altrimenti avrai problemi con la configurazione
  3. Passare a C:\GNUstep\GNUstep\System\Library\Headers\Foundation1 e assicurarsi che Foundation.hesista
  4. Apri un prompt dei comandi ed esegui gcc -vper verificare che GNUstep MSYSsia installato correttamente (se ricevi un file non trovato errore, assicurati che la bincartella di GNUstep MSYSsia nella tua PATH)
  5. Usa questo semplice programma "Hello World" per testare la funzionalità di GNUstep:

    #include <Foundation/Foundation.h>
    
    int main(void)
    {
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
        NSLog(@"Hello World!.");
        [pool drain];
     return;
    }
  6. Torna al prompt dei comandi e cdnel punto in cui hai salvato il programma "Hello World" e quindi compila: 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. Infine, dal prompt dei comandi, digitare helloworldper eseguirlo

Ti auguro il meglio e divertiti con Objective-C!


NOTE :

  1. Ho usato il percorso di installazione predefinito - regola di conseguenza la tua riga di comando
  2. Assicurati che il percorso della tua cartella sia simile al mio, altrimenti visualizzerai un errore

1
Questa installazione suggerita non ha funzionato sul mio PC perché ho già installato gcc che ho usato per nasm. Così ho solo corretto gcc -o helloworld...per c:\gnustep\bin\gcc -o helloworld...ed ha funzionato. L'alternativa sarebbe quella di modificare le variabili d'ambiente che non ho fatto da quando vedevo solo l'obiettivo C. Grazie a teshguru per la risposta puntuale.
Martin Berger,

Prendi in considerazione la rimozione della formattazione del codice attorno ai nomi delle cose. GNUstep MYSY non è un codice, è solo il nome di un software. Se vuoi che qualcosa si distingua, forse potresti incoraggiarlo? E se qualcosa si connette a un tag, considera l'utilizzo dei delimitatori di tag, ma non ci dovrebbero essere motivi per inserire nomi propri nei delimit di tag.
Wolfpack'08,

quando usato è questo: \ gnustep \ bin \ 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 funziona per me
Dalvik

13

Anche:

Cocotron è un progetto open source che mira a implementare un'API Objective-C multipiattaforma simile a quella descritta dalla documentazione Cocoa di Apple Inc. Ciò include AppKit, Foundation, Objective-C runtime e API di supporto come CoreGraphics e CoreFoundation.

http://www.cocotron.org/


4
Il progetto Cocotron è progettato per essere compilato in modo incrociato da XCode, non scritto su Windows e compilato lì.
Dan Udey,

2
questa non è una buona risposta, non sono nemmeno sicuro del motivo per cui l'OP ha scelto questa come "la risposta" perché CoCotron è per Mac e l'OP vuole una soluzione basata su Windows.
cbrulak,

Hai ragione - mi sono un po 'eccitato quando ho letto questo: "L'obiettivo generale è fornire un supporto completo su qualsiasi piattaforma praticabile, il progetto è pensato per essere il più portatile possibile. Tuttavia, la maggior parte del lavoro in questo momento è incentrato sulla fornitura di supporto per Microsoft Windows. In particolare le versioni basate su NT, 2000 fino a Vista. "
Luther Baker,

13

WinObjC? Windows Bridge per iOS (precedentemente noto come "Project Islandwood").

Windows Bridge per iOS (noto anche come WinObjC) è un progetto open source Microsoft che fornisce un ambiente di sviluppo Objective-C per Visual Studio / Windows. Inoltre, WinObjC fornisce supporto per la compatibilità dell'API iOS. Mentre la versione finale avverrà più avanti in autunno (consentendo al bridge di sfruttare le nuove funzionalità di strumenti fornite con il prossimo aggiornamento di Visual Studio 2015),

Il bridge è ora disponibile per la comunità open-source nel suo stato attuale. Tra ora e la caduta. Il bridge iOS come progetto open source con licenza MIT. Data l'ambizione del progetto, semplificare la creazione e l'esecuzione di app su Windows per gli sviluppatori iOS.

Salmaan Ahmed ha pubblicato un post approfondito su Windows Bridge per iOS http://blogs.windows.com/buildingapps/2015/08/06/windows-bridge-for-ios-lets-open-this-up/ discutendo del compilatore, runtime, integrazione IDE e cos'è e non è il bridge. Soprattutto, il codice sorgente per il bridge iOS è attivo su GitHub in questo momento.

Il bridge iOS supporta entrambe le app Windows 8.1 e Windows 10 create per architetture di processori x86 e x64 e presto aggiungeremo ottimizzazioni del compilatore e supporto per ARM, che aggiunge il supporto mobile.


9

Ho sentimenti contrastanti sul progetto Cocotron. Sono contento che stiano rilasciando codice sorgente e condividendo, ma non credo che stiano facendo le cose nel modo più semplice.

Esempi.
Apple ha rilasciato il codice sorgente nel runtime di object-c , che include proprietà e garbage collection. Il progetto Cocotron ha tuttavia la propria implementazione del runtime obiettivo-c. Perché preoccuparsi di duplicare lo sforzo? Esiste anche un file di progetto di Visual Studio che può essere utilizzato per creare un file objc.dll. O se sei davvero pigro, puoi semplicemente copiare il file DLL da un'installazione di Safari su Windows.

Inoltre, non si sono preoccupati di sfruttare CoreFoundation, che è anche open source di Apple. Ho pubblicato una domanda a riguardo ma non ho ricevuto risposta.

Penso che l'attuale migliore soluzione sia prendere il codice sorgente da più fonti (Apple, CocoTron, GnuStep) e unirlo insieme a ciò di cui hai bisogno. Dovrai leggere molta fonte, ma varrà la pena il risultato finale.


2
Mi dispiace non rispondere alla tua domanda sul gruppo, per riassumere: l'APSL fa schifo e sia il runtime che il CF sono sotto di loro.
Christopher Lloyd,

1
Cosa fa schifo dell'APSL? ( opensource.apple.com/license/apsl ) Non è invasivo come la GPL. Se si modifica il codice coperto, è necessario renderlo disponibile. Il codice coperto potrebbe essere qualsiasi modifica apportata a CoreFoundation, ad esempio, ma non includerebbe il programma effettivo. È inoltre necessario contrassegnare chiaramente le modifiche. Questo è un fastidio, ma vale la pena il compromesso dell'utilizzo del codice altamente testato di Apple, non è vero?
Matthieu Cormier,

8
Non penso che tu capisca come funziona la risoluzione, non è qualcosa che possono fare a tutti in una volta, il codice è concesso in licenza in base ai termini e utilizzabile a tempo indeterminato. Ciò che può accadere è che Apple può individuare individui / aziende che ritengono abbiano violato la licenza. La FSF lo fa già con violazioni della GPL, pensi davvero che Apple sia più amichevole con gli sviluppatori della FSF? Se ritieni che i termini siano insignificanti e insignificanti, sono sicuro che puoi convincere la Apple ad eliminarli.
Christopher Lloyd,

8
Va notato che Apple ha collaborato con FSF per apportare modifiche all'APSL e che l'FSF considera l'APSL versione 2.0 una licenza software gratuita. gnu.org/philosophy/apsl.html
Sean,

3
Dal mio punto di vista (come qualcuno che ha affrontato BSD, LGPL, MIT e altre licenze in un prodotto proprietario) la licenza di Apple è MENO restrittiva della GPL - che francamente è un dolore nel culo. Se riesco a ottenere BSD, MIT o APSL, preferirei lavorare con quelli piuttosto che con GPL.
Lloyd Sargent,

8

Sono consapevole che questo è un post molto vecchio, ma ho trovato una soluzione che è diventata disponibile solo di recente E abilita quasi tutte le funzionalità di Objective-C 2.0 sulla piattaforma Windows.

Con l'avvento di gcc 4.6, il supporto per le funzionalità del linguaggio Objective-C 2.0 (blocchi, sintassi punto, proprietà sintetizzate, ecc.) È stato aggiunto al compilatore Objective-C (vedere le note di rilascio per tutti i dettagli). Il loro runtime è stato inoltre aggiornato per funzionare in modo quasi identico al runtime Objective-C 2.0 di Apple. In breve, ciò significa che (quasi) qualsiasi programma che verrà legittimamente compilato con Clang su un Mac verrà compilato anche con gcc 4.6 senza modifiche.

Come nota a margine, una caratteristica che non è disponibile sono i dizionari / array / etc letterali poiché sono tutti codificati in Clang per utilizzare le classi NSDictionary, NSArray, NSNumber, ecc. Di Apple.

Tuttavia, se sei felice di vivere senza i vasti framework di Apple, puoi farlo. Come notato in altre risposte, GNUStep e Cocotron forniscono versioni modificate delle librerie di classi di Apple, oppure puoi scrivere la tua (la mia opzione preferita).

MinGW è un modo per ottenere GCC 4.6 sulla piattaforma Windows e può essere scaricato da sito Web di MinGW . Assicurati che quando lo installi includi l'installazione di C, C ++, Objective-C e Objective-C ++. Sebbene facoltativo, suggerirei anche di installare l'ambiente MSYS.

Una volta installato, il sorgente Objective-C 2.0 può essere compilato con:

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

MinGW include anche il supporto per la compilazione di applicazioni Windows GUI native con -mwindows flag. Per esempio:

g++ -mwindows MyFile.cpp

Non l'ho ancora provato, ma immagino che se avvolgi le tue classi Objective-C in Objective-C ++ al livello più alto possibile, dovresti essere in grado di intrecciare con successo la GUI nativa di Windows C ++ e Objective-C in un'unica applicazione Windows.



6

Se vuoi solo sperimentare, c'è un compilatore Objective-C per .NET (Windows) qui: qckapp


questo programma non è stato compilato con osc. # import <Foundation / Foundation.h> int main (int argc, const char * argv []) {NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog (@ "Testing ... \ n..1 \ n ... 2 \ n .... 3"); [drenaggio della piscina]; ritorna 0; }
KIRAN KJ,

5

È possibile ottenere un compilatore c obiettivo che funzionerà con Windows e funzioni bene con Visual Studio 2008 \ 2010 qui.

open-c flite

Scarica l'ultima fonte. Non è necessario compilare tutto CF-Lite, esiste una soluzione chiamata objc.sln. Dovrai correggere alcuni dei percorsi di inclusione ma poi andrà bene. C'è anche un progetto di test incluso in modo da poter vedere alcuni file di obiettivo-c .m in fase di compilazione e lavoro in Visual Studio. Una cosa triste è che funziona solo con Win32 e non con x64. Esiste un codice assembly che dovrebbe essere scritto per x64 per supportarlo.


Ho scaricato ed eseguito questo progetto utilizzando Visual Studio 2013 e ho ottenuto 30 istanze di questo errore. Errore 64 errore C2632: 'char' seguito da 'bool' è illegale C: \ opencflite-code-248-trunk \ include \ c99 \ stdbool.h 20 1 objc
Adam Mendoza

4

Un recente tentativo di portare l'Obiettivo C 2.0 su Windows è il progetto Soggettivo .

Dal file Leggimi:

Soggettivo è un tentativo di portare Objective C 2.0 con supporto ARC su Windows.

Questo progetto è un fork di objc4-532.2, il runtime di Objective C fornito con OS X 10.8.5. La porta può essere compilata su OS X usando llvm-clang in combinazione con il linker MinGW.

Vi sono alcune limitazioni, molte delle quali sono una questione di lavoro extra, mentre altre, come eccezioni e blocchi, dipendono da lavori più seri in progetti di terze parti. Le limitazioni sono:

• Solo 32 bit - 64 bit è in corso

• Solo collegamento statico: è in corso il collegamento dinamico

• Nessuna chiusura / blocco - fino a quando libdispatch li supporta su Windows

• Nessuna eccezione - fino a quando clang non li supporta su Windows

• Nessun GC vecchio stile - fino a quando a qualcuno non importa ...

• Internals: niente vtables, nessun supporto gdb, semplicemente malloc, nessuna preottimizzazione - alcune di queste cose saranno disponibili con la build a 64 bit.

• Attualmente è richiesto un compilatore di clang patchato; la patch aggiunge -fobjc-runtime = flag subj

Il progetto è disponibile su Github e c'è anche un thread sul gruppo Cocotron che illustra alcuni dei progressi e dei problemi riscontrati.



0

Se ti senti a tuo agio con l'ambiente di Visual Studio,

Piccolo progetto: jGRASP con gcc Grande progetto: Cocotron

Ho sentito che ci sono emulatori, ma ho potuto trovare solo l'emulatore Apple II http://virtualapple.org/ . Sembra limitato ai giochi.


0

Prima di tutto, dimentica gli strumenti GNUStep . Né ProjectManagerProjectCenter può essere chiamato un IDE. Con tutto il rispetto, sembra che i ragazzi del progetto GNUStep siano bloccati alla fine degli anni '80 (che è quando è apparso per la prima volta NeXTSTEP ).

Vim

ctagssupporta Objective-C da r771 (assicurati di scegliere la versione 5.9 della pre-release e aggiungerla --langmap=ObjectiveC:.m.halla riga di comando, vedi qui ), così avrai un completamento del codice / navigazione tag decente.

Ecco un breve howto sull'aggiunta del supporto Objective-C al plug-in Vim tagbar.

Emacs

Lo stesso vale per etagsfornito con Emacsen moderno, in modo da poter iniziare con Emacs Obiettivo Modo C . YASnippet fornirà modelli utili:

YASnippet objc-mode

e se desideri qualcosa di più intelligente del completamento del codice di base basato su tag , dai un'occhiata a questa domanda .

Eclisse

CDT supporta Makefileprogetti basati su:

inserisci qui la descrizione dell'immagine

- così tecnicamente puoi costruire i tuoi progetti Objective-C immediatamente (su Windows, avrai bisogno della toolchain Cygwin o MinGW ). L'unico problema è l'editor di codice che segnalerà molti errori rispetto a quello che pensa sia un codice C puro (il controllo al volo del codice può essere disattivato, ma comunque ...). Se desideri evidenziare correttamente la sintassi, puoi aggiungere Eclim a Eclipse e goderti tutte le buone funzionalità di Eclipse e Vim (vedi sopra).

Un altro promettente plug-in Eclipse è Colorer , ma non supporta ancora Objective-C. Sentiti libero di presentare una richiesta di funzionalità.

SlickEdit

SlickEdit , tra le altre caratteristiche di un grande IDE, fa il supporto Objective-C. Sebbene sia abbastanza complesso da imparare (non così complesso come Emacs), credo che questa sia la tua migliore opzione a condizione che non ti dispiaccia acquistarla (il prezzo è abbastanza abbordabile).

Inoltre, ha un plugin Eclipse che può essere usato come alternativa all'editor autonomo.

KDevelop

Si dice che esista una patch di KDevelop (15 anni, ma a chi importa?). Personalmente non penso che KDevelop sia superiore rispetto a Emacsen , quindi non mi preoccuperei di provarlo.


Quanto sopra si applica anche allo sviluppo di Objective-C su Linux, poiché tutti gli strumenti citati sono più o meno portatili.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.