Objective-C für Windows

230

Was wäre der beste Weg, um Objective-C auf der Windows-Plattform zu schreiben?

Cygwin und gcc? Gibt es eine Möglichkeit, dies irgendwie in Visual Studio zu integrieren?

In diesem Sinne - gibt es Vorschläge, wie Sie das Windows SDK für so etwas verknüpfen und verwenden können? Es ist ein anderes Biest, aber ich weiß, dass ich Assembly und Link in die Windows-DLLs schreiben kann, um auf diese Aufrufe zugreifen zu können, aber ich weiß nicht, wie ich das tun soll, ohne zu googeln und schrittweise Anweisungen zu erhalten.

Ist jemandem eine gute Online- oder Buchressource bekannt, um solche Dinge zu tun oder zu erklären?

Luther Baker
quelle
5
Wenn Sie es nur für iOS tun, können Sie iOS Build Environment von PM Baty verwenden ...
Cole Johnson

Antworten:

146

Wenn Sie die beiden vorherigen Antworten erweitern und nur Objective-C, aber keines der Cocoa-Frameworks möchten, funktioniert gcc auf jeder Plattform. Sie können es über Cygwin verwenden oder MinGW erhalten. Wenn Sie jedoch die Cocoa-Frameworks oder zumindest eine vernünftige Teilmenge davon möchten, sind GNUStep und Cocotron Ihre besten Wetten.

Cocotron implementiert eine Menge Dinge, die GNUStep nicht tut, wie CoreGraphics und CoreData, obwohl ich nicht dafür bürgen kann, wie vollständig ihre Implementierung in einem bestimmten Framework ist. Ihr Ziel ist es, Cocotron mit der neuesten Version von OS X auf dem neuesten Stand zu halten, damit jedes funktionsfähige OS X-Programm unter Windows ausgeführt werden kann. Da GNUStep normalerweise die neueste Version von gcc verwendet, werden auch Objective-C ++ und viele der Objective-C 2.0-Funktionen unterstützt.

Ich habe diese Funktionen nicht mit GNUStep getestet, aber wenn Sie eine ausreichend neue Version von gcc verwenden, können Sie sie möglicherweise verwenden. Ich konnte Objective-C ++ vor einigen Jahren nicht mit GNUStep verwenden. GNUStep kompiliert jedoch von nahezu jeder Plattform. Cocotron ist ein sehr mac-zentriertes Projekt. Obwohl es wahrscheinlich möglich ist, es auf anderen Plattformen zu kompilieren, werden XCode-Projektdateien und keine Makefiles mitgeliefert, sodass Sie die Frameworks nur unter OS X sofort kompilieren können. Es enthält auch Anweisungen zum Kompilieren von Windows-Apps unter XCode, jedoch nicht jede andere Plattform. Grundsätzlich ist es wahrscheinlich möglich, eine Windows-Entwicklungsumgebung für Cocotron einzurichten, aber es ist nicht so einfach wie die Einrichtung einer für GNUStep, und Sie sind auf sich allein gestellt. Daher ist GNUStep definitiv der richtige Weg, wenn Sie sich weiterentwickeln Windows im Gegensatz zu nur für Windows.

Für das, was es wert ist, ist Cocotron unter der MIT-Lizenz und GNUStep unter der LGPL lizenziert.

Michael Buckley
quelle
1
Sie können die Open-Source-Cocoa-Framworks jederzeit portieren. Beispiel ist CoreFoundation.
Cole Johnson
Nicht alle Core Foundation IS Open Source. Eine große Menge ist Closed Source.
Uchuugaka
X'D Ich weiß nicht, warum dieser Typ die beste Antwort bekommen hat, er hat nicht einmal das Zeug ausprobiert, über das er spricht. Sie sollten ein neues Abzeichen für bs Antworten machen. Nichts für ungut @michael. Es ist eine interessante Lektüre.
Wolfpack'08
Keine Beleidigung, aber als ich diese Antwort schrieb, hatte ich einige Wochen lang Probleme, Objective-C für Windows zu kompilieren, und hatte versucht, sowohl GNUStep als auch Cocoatron zu verwenden. Ich war schließlich gezwungen, das Projekt in C ++ umzuschreiben, da zu diesem Zeitpunkt einige Compiler-Fehler auftraten und ivars unter Windows nicht auf 0 initialisiert wurde. Ich habe zwar auf "Ich habe diese Funktionen nicht getestet" Bezug genommen, aber ich habe über die damals neuen Objective-C 2.0-Funktionen gesprochen, die zum Zeitpunkt der Erstellung dieser Antwort erst seit weniger als einem Jahr auf Apple-Plattformen verfügbar waren war gerade in GNUStep gelandet.
Michael Buckley
89

Sie können Objective C in der Windows-Umgebung verwenden. Wenn Sie diese Schritte ausführen, sollte es einwandfrei funktionieren:

  1. Besuchen Sie die GNUstep-Website und laden Sie GNUstep MSYS Subsystem(MSYS für GNUstep), GNUstep Core(Bibliotheken für GNUstep) und herunterGNUstep Devel
  2. Installieren Sie diese Dateien nach dem Herunterladen in dieser Reihenfolge, da sonst Probleme mit der Konfiguration auftreten
  3. Navigieren Sie zu C:\GNUstep\GNUstep\System\Library\Headers\Foundation1 und stellen Sie sicher, dass Foundation.hvorhanden
  4. Öffnen Sie eine Eingabeaufforderung und führen Sie sie aus gcc -v, um zu überprüfen, GNUstep MSYSob sie korrekt installiert ist (wenn der Fehler "Datei nicht gefunden" angezeigt wird, stellen Sie sicher, dass sich der binOrdner von GNUstep MSYSin Ihrem befindet PATH).
  5. Verwenden Sie dieses einfache "Hello World" -Programm, um die Funktionalität von GNUstep zu testen:

    #include <Foundation/Foundation.h>
    
    int main(void)
    {
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
        NSLog(@"Hello World!.");
        [pool drain];
     return;
    }
  6. Gehen Sie zurück zur Eingabeaufforderung und dorthin cd, wo Sie das Programm "Hello World" gespeichert haben, und kompilieren Sie es dann: 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. Geben Sie schließlich an der Eingabeaufforderung ein, helloworldum es auszuführen

Alles Gute und viel Spaß mit Objective-C!


ANMERKUNGEN :

  1. Ich habe den Standardinstallationspfad verwendet - passen Sie Ihre Befehlszeile entsprechend an
  2. Stellen Sie sicher, dass Ihr Ordnerpfad meinem ähnlich ist, da sonst eine Fehlermeldung angezeigt wird
Teshguru
quelle
1
Diese vorgeschlagene Installation funktionierte nicht auf meinem PC, da ich bereits gcc installiert habe, das ich für nasm verwendet habe. Also ich korrigiert nur gcc -o helloworld...an c:\gnustep\bin\gcc -o helloworld...und es funktionierte. Die Alternative wäre, Umgebungsvariablen zu ändern, was ich nicht getan habe, da ich nur Ziel C gesehen habe. Vielen Dank an Teshguru für die aktuelle Antwort.
Martin Berger
Entfernen Sie möglicherweise die Code-Formatierung um die Namen der Dinge. GNUstep MYSY ist kein Code, sondern nur der Name einer Software. Wenn Sie möchten, dass etwas auffällt, sollten Sie es vielleicht ermutigen? Wenn eine Verbindung zu einem Tag hergestellt wird, sollten Sie die Tag-Trennzeichen verwenden. Es sollte jedoch keinen Grund geben, Eigennamen in Tag-Trennzeichen einzufügen.
Wolfpack'08
bei Verwendung yhis c: \ gnustep \ bin \ gcc -o helloworld.exe helloworld.m -I / GNUstep / GNUstep / System / Bibliothek / Header -L / GNUstep / GNUstep / System / Bibliothek / Bibliotheken -std = c99 -lobjc - lgnustep-base -fconstant-string-class = NSConstantString es funktioniert für mich
Dalvik
13

Ebenfalls:

Das Cocotron ist ein Open-Source-Projekt, das darauf abzielt, eine plattformübergreifende Objective-C-API zu implementieren, die der in der Cocoa-Dokumentation von Apple Inc. beschriebenen ähnelt. Dies umfasst die AppKit-, Foundation-, Objective-C-Laufzeit- und Support-APIs wie CoreGraphics und CoreFoundation.

http://www.cocotron.org/

amrox
quelle
4
Das Cocotron-Projekt ist so konzipiert, dass es aus XCode kompiliert, nicht unter Windows geschrieben und dort kompiliert wird.
Dan Udey
2
Dies ist keine gute Antwort. Ich bin mir nicht einmal sicher, warum das OP dies als "Antwort" ausgewählt hat, da CoCotron für Mac ist und das OP eine Windows-basierte Lösung wünscht.
Cbrulak
Sie haben Recht - ich war etwas zu aufgeregt, als ich dies las: "Das allgemeine Ziel ist es, auf jeder funktionsfähigen Plattform vollständigen Support zu bieten. Das Projekt soll so portabel wie möglich sein. Der größte Teil der Arbeit ist jedoch zu diesem Zeitpunkt konzentrierte sich auf die Unterstützung von Microsoft Windows. Insbesondere die NT-basierten Versionen 2000 bis Vista. "
Luther Baker
13

WinObjC? Windows Bridge für iOS (früher als "Project Islandwood" bekannt).

Windows Bridge für iOS (auch als WinObjC bezeichnet) ist ein Microsoft Open Source-Projekt, das eine Objective-C-Entwicklungsumgebung für Visual Studio / Windows bereitstellt. Darüber hinaus bietet WinObjC Unterstützung für die iOS-API-Kompatibilität. Die endgültige Version wird zwar im Herbst dieses Jahres veröffentlicht (damit die Bridge die neuen Tooling-Funktionen nutzen kann, die mit dem kommenden Visual Studio 2015-Update geliefert werden).

Die Brücke steht der Open-Source-Community jetzt in ihrem aktuellen Zustand zur Verfügung. Bis zum Herbst. Die iOS-Brücke als Open-Source-Projekt unter der MIT-Lizenz. Angesichts der Ambitionen des Projekts ist es für iOS-Entwickler einfach, Apps unter Windows zu erstellen und auszuführen.

Salmaan Ahmed hat eine eingehende Post auf der Windows - Brücke für iOS http://blogs.windows.com/buildingapps/2015/08/06/windows-bridge-for-ios-lets-open-this-up/ der Diskussion Compiler, Laufzeit, IDE-Integration und was die Bridge ist und was nicht. Das Beste ist, dass der Quellcode für die iOS-Bridge derzeit auf GitHub verfügbar ist .

Die iOS-Bridge unterstützt sowohl Windows 8.1- als auch Windows 10-Apps, die für x86- und x64-Prozessorarchitekturen entwickelt wurden. In Kürze werden wir Compiler-Optimierungen und Unterstützung für ARM hinzufügen, wodurch mobile Unterstützung hinzugefügt wird.

Lee Stott
quelle
9

Ich habe gemischte Gefühle gegenüber dem Cocotron-Projekt. Ich bin froh, dass sie Quellcode veröffentlichen und teilen, aber ich habe nicht das Gefühl, dass sie die Dinge am einfachsten machen.

Beispiele.
Apple hat den Quellcode für die Objective-C-Laufzeit freigegeben , die Eigenschaften und Garbage Collection enthält. Das Cocotron-Projekt hat jedoch eine eigene Implementierung der Objective-C-Laufzeit. Warum sich die Mühe machen, den Aufwand zu duplizieren? Es gibt sogar eine Visual Studio-Projektdatei, mit der eine objc.dll-Datei erstellt werden kann. Wenn Sie wirklich faul sind, können Sie die DLL-Datei einfach aus einer Installation von Safari unter Windows kopieren.

Sie haben sich auch nicht die Mühe gemacht, CoreFoundation zu nutzen, das ebenfalls von Apple als Open-Source-Lösung angeboten wird. Ich habe eine Frage dazu gestellt, aber keine Antwort erhalten.

Ich denke, die derzeit beste Lösung besteht darin, Quellcode aus mehreren Quellen (Apple, CocoTron, GnuStep) zu entnehmen und nach Ihren Wünschen zusammenzuführen. Sie müssen viel Quelle lesen, aber es wird das Endergebnis wert sein.

Matthieu Cormier
quelle
2
Es tut uns leid, dass Sie Ihre Frage in der Gruppe nicht beantwortet haben, um es zusammenzufassen: Die APSL ist zum Kotzen und sowohl die Laufzeit als auch die CF sind darunter.
Christopher Lloyd
1
Was ist scheiße an der APSL? ( opensource.apple.com/license/apsl ) Es ist nicht invasiv wie die GPL. Wenn Sie den abgedeckten Code ändern, müssen Sie diesen Code verfügbar machen. Abgedeckter Code sind alle Änderungen, die Sie beispielsweise an CoreFoundation vornehmen, aber nicht das eigentliche Programm. Sie müssen auch Ihre Änderungen deutlich kennzeichnen. Dies ist ein Ärgernis, aber es lohnt sich, den hoch getesteten Code von Apple zu verwenden, nicht wahr?
Matthieu Cormier
8
Ich glaube nicht, dass Sie verstehen, wie die Kündigung funktioniert. Sie kann nicht jedem auf einmal etwas antun. Der Code ist unter den Bedingungen lizenziert und kann unter diesen Bedingungen auf unbestimmte Zeit verwendet werden. Was passieren kann, ist, dass Apple Personen / Unternehmen herausgreifen kann, von denen sie glauben, dass sie gegen die Lizenz verstoßen haben. Die FSF tut dies bereits bei GPL-Verstößen. Denken Sie wirklich, Apple ist entwicklerfreundlicher als die FSF? Wenn Sie der Meinung sind, dass die Begriffe nicht relevant und bedeutungslos sind, können Sie Apple Legal davon überzeugen, sie einfach herauszunehmen.
Christopher Lloyd
8
Es ist zu beachten, dass Apple bei Änderungen an der APSL mit der FSF zusammengearbeitet hat und dass die FSF die APSL Version 2.0 als freie Softwarelizenz betrachtet. gnu.org/philosophy/apsl.html
Sean
3
Aus meiner Sicht (als jemand, der sich mit BSD, LGPL, MIT und anderen Lizenzen in einem proprietären Produkt befasst hat) ist Apples Lizenz WENIGER restriktiv als die GPL - was ehrlich gesagt ein Ärgernis ist. Wenn ich BSD, MIT oder APSL bekommen kann, würde ich lieber mit diesen als mit GPL arbeiten.
Lloyd Sargent
8

Ich bin mir bewusst, dass dies ein sehr alter Beitrag ist, aber ich habe eine Lösung gefunden, die erst seit kurzem verfügbar ist UND nahezu alle Objective-C 2.0-Funktionen auf der Windows-Plattform aktiviert.

Mit dem Aufkommen von gcc 4.6 wurde dem Objective-C-Compiler die Unterstützung für Objective-C 2.0-Sprachfunktionen (Blöcke, Punktsyntax, synthetisierte Eigenschaften usw.) hinzugefügt ( Einzelheiten finden Sie in den Versionshinweisen). Ihre Laufzeit wurde ebenfalls aktualisiert, sodass sie fast identisch mit Apples eigener Objective-C 2.0-Laufzeit funktioniert. Kurz gesagt bedeutet dies, dass (fast) jedes Programm, das mit Clang auf einem Mac legitim kompiliert wird, auch ohne Änderung mit gcc 4.6 kompiliert wird.

Nebenbei bemerkt, eine Funktion, die nicht verfügbar ist, sind Wörterbuch- / Array- / usw.-Literale, da sie alle in Clang fest codiert sind, um die Klassen NSDictionary, NSArray, NSNumber usw. von Apple zu verwenden.

Wenn Sie jedoch gerne ohne die umfangreichen Frameworks von Apple leben möchten, können Sie dies tun. Wie in anderen Antworten erwähnt, bieten GNUStep und Cocotron modifizierte Versionen der Klassenbibliotheken von Apple an, oder Sie können Ihre eigenen schreiben (meine bevorzugte Option).

MinGW ist eine Möglichkeit, GCC 4.6 auf der Windows-Plattform zu installieren , und kann von der MinGW-Website heruntergeladen werden . Stellen Sie sicher, dass Sie bei der Installation die Installation von C, C ++, Objective-C und Objective-C ++ einschließen. Obwohl optional, würde ich auch empfehlen, die MSYS-Umgebung zu installieren.

Nach der Installation kann die Objective-C 2.0-Quelle kompiliert werden mit:

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

MinGW bietet auch Unterstützung für das Kompilieren nativer Windows-GUI-Anwendungen mit dem -mwindowsFlag. Beispielsweise:

g++ -mwindows MyFile.cpp

Ich habe es noch nicht versucht, aber ich stelle mir vor, wenn Sie Ihre Objective-C-Klassen in Objective-C ++ auf der höchstmöglichen Ebene verpacken, sollten Sie in der Lage sein, native Windows-GUI C ++ und Objective-C erfolgreich in einer einzigen Windows-Anwendung zu verflechten.

Ephemera
quelle
6

Wenn Sie nur experimentieren möchten, gibt es hier einen Objective-C-Compiler für .NET (Windows): qckapp

user397362
quelle
Dieses Programm konnte nicht mit osc kompiliert werden. # import <Foundation / Foundation.h> int main (int argc, const char * argv []) {NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog (@ ”Testen ... \ n..1 \ n ... 2 \ n .... 3”); [Poolablauf]; return 0; }
KIRAN KJ
5

Sie können hier einen objektiven c-Compiler herunterladen, der mit Windows funktioniert und mit Visual Studio 2008 \ 2010 gut funktioniert.

Open-C-Flite

Laden Sie einfach die neueste Quelle herunter. Sie müssen nicht alles von CF-Lite erstellen. Es gibt eine Lösung namens objc.sln. Sie müssen einige der Include-Pfade korrigieren, aber dann funktioniert es einwandfrei. Es ist sogar ein Testprojekt enthalten, damit Sie sehen können, wie einige Objective-C-M-Dateien kompiliert werden und in Visual Studio arbeiten. Eine traurige Sache ist, dass es nur mit Win32 funktioniert, nicht mit x64. Es gibt einige Assembly-Codes, die für x64 geschrieben werden müssten, damit dies unterstützt wird.

Aaron Stainback
quelle
Ich habe dieses Projekt mit Visual Studio 2013 heruntergeladen und ausgeführt und 30 Instanzen dieses Fehlers erhalten. Fehler 64 Fehler C2632: 'char' gefolgt von 'bool' ist unzulässig C: \ opencflite-code-248-trunk \ include \ c99 \ stdbool.h 20 1 objc
Adam Mendoza
4

Ein kürzlich unternommener Versuch, Objective C 2.0 auf Windows zu portieren, ist das Subjective- Projekt.

Aus der Readme:

Subjektiv ist ein Versuch, Objective C 2.0 mit ARC-Unterstützung auf Windows zu bringen.

Dieses Projekt ist eine Abzweigung von objc4-532.2, der Objective C-Laufzeit, die im Lieferumfang von OS X 10.8.5 enthalten ist. Der Port kann unter OS X mit llvm-clang in Kombination mit dem MinGW-Linker überkompiliert werden.

Es gibt bestimmte Einschränkungen, von denen viele zusätzliche Arbeit erfordern, während andere, wie Ausnahmen und Blockierungen, von ernsthafterer Arbeit in Projekten von Drittanbietern abhängen. Die Einschränkungen sind:

• Nur 32-Bit - 64-Bit ist im Gange

• Nur statische Verknüpfung - Dynamische Verknüpfung ist im Gange

• Keine Schließungen / Blöcke - bis libdispatch sie unter Windows unterstützt

• Keine Ausnahmen - bis clang sie unter Windows unterstützt

• Kein GC im alten Stil - bis sich jemand darum kümmert ...

• Interna: keine vtables, keine GDB-Unterstützung, nur Malloc, keine Voroptimierungen - einige dieser Dinge werden im 64-Bit-Build verfügbar sein.

• Derzeit ist ein gepatchter Clang-Compiler erforderlich. Der Patch fügt das Flag -fobjc-runtime = subj hinzu

Das Projekt ist auf Github verfügbar , und es gibt auch einen Thread über die Cocotron-Gruppe, in dem einige der Fortschritte und Probleme beschrieben werden.

insys
quelle
2

Holen Sie sich GNUStep hier

Holen Sie sich MINGW hier

MINGW installieren GNUStep installieren Dann testen

raksa eng
quelle
0

Wenn Sie mit der Visual Studio-Umgebung vertraut sind,

Kleines Projekt: jGRASP mit gcc Großes Projekt: Cocotron

Ich habe gehört, dass es Emulatoren gibt, aber ich konnte nur den Apple II-Emulator http://virtualapple.org/ finden . Es scheint auf Spiele beschränkt zu sein.

Cloud Cho
quelle
0

Vergessen Sie zunächst die GNUStep- Tools. Weder ProjectManager noch ProjectCenter können als IDE bezeichnet werden. Bei allem Respekt sieht es so aus, als ob die Leute vom GNUStep- Projekt in den späten 80ern feststecken (als NeXTSTEP zum ersten Mal erschien).

Vim

ctagsUnterstützt Objective-C seit r771 (wählen Sie unbedingt die Vorabversion 5.9 aus und fügen Sie --langmap=ObjectiveC:.m.hsie zur Befehlszeile hinzu, siehe hier ), damit Sie eine anständige Code-Vervollständigung / Tag-Navigation haben.

Hier ist eine kurze Anleitung zum Hinzufügen von Objective-C-Unterstützung zum Vim-Tagbar-Plugin.

Emacs

Gleiches gilt für den etagsVersand mit modernem Emacsen, sodass Sie mit dem Emacs Objective C-Modus beginnen können . YASnippet bietet nützliche Vorlagen:

YASnippet objc-mode

Wenn Sie etwas Intelligenteres als die grundlegende, auf Tags basierende Code-Vervollständigung wünschen , werfen Sie einen Blick auf diese Frage .

Finsternis

CDT unterstützt Makefile-basierte Projekte:

Geben Sie hier die Bildbeschreibung ein

- Technisch gesehen können Sie Ihre Objective-C-Projekte sofort erstellen (unter Windows benötigen Sie die Cygwin- oder MinGW- Toolchain). Das einzige Problem ist der Code-Editor, der viele Fehler in Bezug auf einen reinen C- Code meldet (die Überprüfung des Codes im laufenden Betrieb kann deaktiviert werden, aber immer noch ...). Wenn Sie eine korrekte Syntaxhervorhebung wünschen, können Sie Eclim zu Ihrer Eclipse hinzufügen und alle guten Funktionen von Eclipse und Vim nutzen (siehe oben).

Ein weiteres vielversprechendes Eclipse- Plugin ist Colorer , das Objective-C jedoch noch nicht unterstützt. Sie können jedoch gerne eine Funktionsanfrage stellen.

SlickEdit

SlickEdit , unter anderen Merkmalen eines großen IDE, hat Unterstützung Objective-C. Das Lernen ist zwar ziemlich komplex (allerdings nicht so komplex wie Emacs), aber ich glaube, dies ist Ihre beste Option, vorausgesetzt, Sie haben nichts dagegen, es zu kaufen (der Preis ist ziemlich erschwinglich).

Darüber hinaus verfügt es über ein Eclipse-Plugin , das als Alternative zum eigenständigen Editor verwendet werden kann.

KDevelop

Gerüchten zufolge gibt es einen KDevelop- Patch (15 Jahre alt, aber wen interessiert das?). Ich persönlich denke nicht, dass KDevelop im Vergleich zu Emacsen überlegen ist , also würde ich es nicht versuchen.


Dies gilt auch für die Objective-C-Entwicklung unter Linux, da alle genannten Tools mehr oder weniger portabel sind.

Bass
quelle