Objective-C pour Windows

230

Quelle serait la meilleure façon d'écrire Objective-C sur la plate-forme Windows?

Cygwin et gcc? Existe-t-il un moyen d'intégrer cela en quelque sorte dans Visual Studio?

Dans ce sens - y a-t-il des suggestions sur la façon de se connecter et d'utiliser le SDK Windows pour quelque chose comme ça. C'est une bête différente, mais je sais que je peux écrire un assemblage et un lien dans les DLL Windows, ce qui me permet d'accéder à ces appels, mais je ne sais pas comment faire cela sans googler et obtenir des instructions fragmentaires.

Quelqu'un connaît-il une bonne ressource en ligne ou un livre pour faire ou expliquer ce genre de choses?

Luther Baker
la source
5
Si vous le faites pour iOS, vous pouvez utiliser iOS Build Environment par PM Baty ...
Cole Johnson

Réponses:

146

En développant les deux réponses précédentes, si vous voulez juste Objective-C mais pas l'un des frameworks Cocoa, alors gcc fonctionnera sur n'importe quelle plateforme. Vous pouvez l'utiliser via Cygwin ou obtenir MinGW. Cependant, si vous voulez les frameworks Cocoa, ou au moins un sous-ensemble raisonnable, alors GNUStep et Cocotron sont vos meilleurs paris.

Cocotron implémente beaucoup de choses que GNUStep ne fait pas, comme CoreGraphics et CoreData, bien que je ne puisse pas garantir à quel point leur implémentation est complète sur un cadre spécifique. Leur objectif est de maintenir Cocotron à jour avec la dernière version d'OS X afin que tout programme OS X viable puisse s'exécuter sur Windows. Étant donné que GNUStep utilise généralement la dernière version de gcc, ils ajoutent également la prise en charge d'Objective-C ++ et de nombreuses fonctionnalités d'Objective-C 2.0.

Je n'ai pas testé ces fonctionnalités avec GNUStep, mais si vous utilisez une version suffisamment nouvelle de gcc, vous pourrez peut-être les utiliser. Je n'ai pas pu utiliser Objective-C ++ avec GNUStep il y a quelques années. Cependant, GNUStep compile à partir de n'importe quelle plate-forme. Cocotron est un projet très centré sur le mac. Bien qu'il soit probablement possible de le compiler sur d'autres plates-formes, il contient des fichiers de projet XCode, pas des makefiles, donc vous ne pouvez compiler ses frameworks que sous OS X. Il est également livré avec des instructions sur la compilation d'applications Windows sur XCode, mais pas toute autre plateforme. Fondamentalement, il est probablement possible de configurer un environnement de développement Windows pour Cocotron, mais ce n'est pas aussi simple que d'en configurer un pour GNUStep, et vous serez seul, donc GNUStep est certainement la voie à suivre si vous développez sur Windows par opposition à seulement pour Windows.

Pour ce que ça vaut, Cocotron est sous licence MIT et GNUStep est sous licence LGPL.

Michael Buckley
la source
1
Vous pouvez toujours porter les framworks Cocoa qui sont open source. Exemple étant CoreFoundation.
Cole Johnson
Les logiciels libres de Core Foundation IS ne sont pas tous disponibles. Une énorme quantité est une source fermée.
uchuugaka
X'D Je ne sais pas pourquoi ce type a obtenu la meilleure réponse, il n'a même pas essayé ce dont il parle. Ils devraient créer un nouveau badge pour les réponses bs. Aucune infraction @michael. C'est une lecture intéressante.
Wolfpack'08
Aucune infraction n'a été prise, mais pour mémoire, au moment où j'ai écrit cette réponse, j'avais eu du mal pendant quelques semaines à compiler Objective-C pour Windows, et j'avais essayé d'aller à la fois GNUStep et Cocoatron. J'ai finalement été contraint de réécrire le projet en C ++, en raison de certains bogues du compilateur à l'époque et des ivars non initialisés à 0 sous Windows. J'ai fait référence à "Je n'ai pas testé ces fonctionnalités", mais je parlais des nouvelles fonctionnalités d'Objective-C 2.0, qui n'étaient disponibles sur les plates-formes Apple que depuis moins d'un an lorsque cette réponse a été écrite, et venait d'atterrir dans GNUStep.
Michael Buckley
89

Vous pouvez utiliser Objective C dans l'environnement Windows. Si vous suivez ces étapes, cela devrait très bien fonctionner:

  1. Visitez le site Web de GNUstep et téléchargez GNUstep MSYS Subsystem(MSYS pour GNUstep), GNUstep Core(Bibliothèques pour GNUstep) etGNUstep Devel
  2. Après avoir téléchargé ces fichiers, installez-les dans cet ordre, sinon vous aurez des problèmes de configuration
  3. Accédez à C:\GNUstep\GNUstep\System\Library\Headers\Foundation1 et assurez-vous qu'il Foundation.hexiste
  4. Ouvrez une invite de commande et exécutez gcc -vpour vérifier qu'il GNUstep MSYSest correctement installé (si vous obtenez une erreur de fichier introuvable, assurez-vous que le bindossier de se GNUstep MSYStrouve dans votre PATH)
  5. Utilisez ce simple programme "Hello World" pour tester la fonctionnalité de GNUstep:

    #include <Foundation/Foundation.h>
    
    int main(void)
    {
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
        NSLog(@"Hello World!.");
        [pool drain];
     return;
    }
  6. Revenez à l'invite de commande et cdà l'endroit où vous avez enregistré le programme "Hello World", puis compilez-le: 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. Enfin, à l'invite de commandes, tapez helloworldpour l'exécuter

Bonne chance et amusez-vous avec Objective-C!


REMARQUES :

  1. J'ai utilisé le chemin d'installation par défaut - ajustez votre ligne de commande en conséquence
  2. Assurez-vous que le chemin de votre dossier est similaire au mien, sinon vous obtiendrez une erreur
teshguru
la source
1
Cette installation suggérée n'a pas fonctionné sur mon PC car j'ai déjà installé gcc que j'ai utilisé pour nasm. Donc , je viens corrigeais gcc -o helloworld...à c:\gnustep\bin\gcc -o helloworld...et cela a fonctionné. L'alternative serait de modifier les variables d'environnement, ce que je n'ai pas fait car je ne faisais que voir l'objectif C. Merci à teshguru pour la réponse précise.
Martin Berger
Pensez à supprimer la mise en forme du code autour des noms des choses. GNUstep MYSY n'est pas du code, c'est juste le nom d'un logiciel. Si vous voulez que quelque chose se démarque, envisagez peut-être de l'enhardir? Et si quelque chose se connecte à une balise, envisagez d'utiliser les délimiteurs de balises, mais il ne devrait y avoir aucune raison de mettre des noms appropriés dans les délimiteurs de balises.
Wolfpack'08
lorsqu'il est utilisé c: \ 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 ça marche pour moi
Dalvik
13

Aussi:

Le Cocotron est un projet open source qui vise à implémenter une API Objective-C multiplateforme similaire à celle décrite par la documentation Cocoa d'Apple Inc. Cela inclut le runtime AppKit, Foundation, Objective-C et les API de support telles que CoreGraphics et CoreFoundation.

http://www.cocotron.org/

amrox
la source
4
Le projet Cocotron est conçu pour être compilé de manière croisée à partir de XCode, non écrit sur Windows et compilé là-bas.
Dan Udey
2
ce n'est pas une bonne réponse, je ne sais même pas pourquoi l'OP a choisi cela comme 'la réponse' parce que CoCotron est pour Mac et l'OP veut une solution basée sur Windows.
cbrulak
Vous avez raison - je me suis un peu trop excité en lisant ceci: "L'objectif général est de fournir un support complet sur toute plate-forme viable, le projet est destiné à être aussi portable que possible. Cependant, la plupart du travail en ce moment est concentré sur la prise en charge de Microsoft Windows. En particulier les versions basées sur NT, 2000 à Vista. "
Luther Baker
13

WinObjC? Windows Bridge pour iOS (anciennement appelé «Project Islandwood»).

Windows Bridge pour iOS (également appelé WinObjC) est un projet open source Microsoft qui fournit un environnement de développement Objective-C pour Visual Studio / Windows. En outre, WinObjC prend en charge la compatibilité des API iOS. Bien que la version finale se produise plus tard cet automne (permettant au pont de tirer parti des nouvelles capacités d'outils qui seront livrées avec la prochaine mise à jour de Visual Studio 2015),

Le pont est disponible pour la communauté open source maintenant dans son état actuel. Entre maintenant et l'automne. Le pont iOS en tant que projet open source sous licence MIT. Compte tenu de l'ambition du projet, faciliter la création et l'exécution d'applications sur Windows pour les développeurs iOS.

Salmaan Ahmed a un article détaillé sur le pont Windows pour iOS http://blogs.windows.com/buildingapps/2015/08/06/windows-bridge-for-ios-lets-open-this-up/ discutant de la compilateur, runtime, intégration IDE et ce que le pont est et n'est pas. Mieux encore, le code source du pont iOS est actuellement en ligne sur GitHub.

Le pont iOS prend en charge les applications Windows 8.1 et Windows 10 conçues pour les architectures de processeur x86 et x64, et nous ajouterons bientôt des optimisations de compilateur et la prise en charge d'ARM, qui ajoute une prise en charge mobile.

Lee Stott
la source
9

J'ai des sentiments mitigés sur le projet Cocotron. Je suis content qu'ils publient du code source et partagent, mais je ne pense pas qu'ils font les choses de la manière la plus simple.

Exemples.
Apple a publié le code source de l' exécution objective-c , qui comprend les propriétés et la récupération de place. Le projet Cocotron a cependant sa propre implémentation du runtime objective-c. Pourquoi prendre la peine de dupliquer l'effort? Il existe même un fichier de projet Visual Studio qui peut être utilisé pour créer un fichier objc.dll. Ou si vous êtes vraiment paresseux, vous pouvez simplement copier le fichier DLL à partir d'une installation de Safari sur Windows.

Ils n'ont pas non plus pris la peine de tirer parti de CoreFoundation, qui est également open source par Apple. J'ai posté une question à ce sujet mais je n'ai pas reçu de réponse.

Je pense que la meilleure solution actuelle est de prendre le code source de plusieurs sources (Apple, CocoTron, GnuStep) et de le fusionner ensemble pour ce dont vous avez besoin. Vous devrez lire beaucoup de sources mais cela vaudra le résultat final.

Matthieu Cormier
la source
2
Désolé de ne pas répondre à votre question sur le groupe, pour résumer: l'APSL craint et le runtime et CF sont sous eux.
Christopher Lloyd
1
Qu'est-ce qui craint l'APSL? ( opensource.apple.com/license/apsl ) Ce n'est pas envahissant comme la GPL. Si vous modifiez le code couvert, vous devez rendre ce code disponible. Le code couvert serait toutes les modifications que vous apportez à CoreFoundation par exemple, mais ne comprendrait pas votre programme réel. Vous devez également marquer clairement vos modifications. C'est une nuisance mais cela vaut le coup d'utiliser le code hautement testé d'Apple, n'est-ce pas?
Matthieu Cormier
8
Je ne pense pas que vous compreniez comment fonctionne la résiliation, ce n'est pas quelque chose qu'ils peuvent faire à tout le monde à la fois, le code est autorisé sous les termes et utilisable sous ces termes indéfiniment. Ce qui peut arriver, c'est qu'Apple peut distinguer les individus / entreprises qui, selon eux, ont violé la licence. La FSF fait déjà cela avec des violations de la GPL, vous pensez vraiment qu'Apple est plus convivial avec les développeurs que la FSF? Si vous pensez que les termes sont sans importance et dénués de sens, je suis sûr que vous pouvez convaincre Apple légal de simplement les supprimer.
Christopher Lloyd
8
Il convient de noter qu'Apple a travaillé avec la FSF sur les modifications apportées à l'APSL et que la FSF considère l'APSL version 2.0 comme une licence de logiciel libre. gnu.org/philosophy/apsl.html
Sean
3
De mon point de vue (en tant que personne ayant traité BSD, LGPL, MIT et d'autres licences dans un produit propriétaire), la licence d'Apple est MOINS restrictive que la GPL - ce qui est franchement une douleur dans le cul. Si je peux obtenir BSD, MIT ou APSL, je préfère travailler avec ceux-ci qu'avec GPL.
Lloyd Sargent
8

Je suis conscient qu'il s'agit d'un très ancien article, mais j'ai trouvé une solution qui n'est devenue disponible que plus récemment ET active presque toutes les fonctionnalités d'Objective-C 2.0 sur la plate-forme Windows.

Avec l'avènement de gcc 4.6, la prise en charge des fonctionnalités du langage Objective-C 2.0 (blocs, syntaxe à points, propriétés synthétisées, etc.) a été ajoutée au compilateur Objective-C (voir les notes de publication pour plus de détails). Leur runtime a également été mis à jour pour fonctionner de manière presque identique au runtime Objective-C 2.0 d'Apple. En bref, cela signifie que (presque) tout programme qui compilera légitimement avec Clang sur un Mac compilera également avec gcc 4.6 sans modification.

En guise de remarque, une fonctionnalité qui n'est pas disponible est les littéraux dictionnaire / tableau / etc, car ils sont tous codés en dur dans Clang pour utiliser les classes NSDictionary, NSArray, NSNumber, etc. d'Apple.

Cependant, si vous êtes heureux de vivre sans les cadres étendus d'Apple, vous le pouvez. Comme indiqué dans d'autres réponses, GNUStep et Cocotron fournissent des versions modifiées des bibliothèques de classes d'Apple, ou vous pouvez écrire les vôtres (mon option préférée).

MinGW est un moyen d'obtenir GCC 4.6 sur la plate-forme Windows et peut être téléchargé à partir de site Web de MinGW . Assurez-vous que lorsque vous l'installez, vous incluez l'installation de C, C ++, Objective-C et Objective-C ++. Bien que facultatif, je suggère également d'installer l'environnement MSYS.

Une fois installée, la source d'Objective-C 2.0 peut être compilée avec:

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

MinGW inclut également la prise en charge de la compilation d'applications Windows GUI natives avec l' -mwindowsindicateur. Par exemple:

g++ -mwindows MyFile.cpp

Je ne l'ai pas encore essayé, mais j'imagine que si vous encapsulez vos classes Objective-C dans Objective-C ++ à la couche la plus élevée possible, vous devriez être en mesure de combiner avec succès l'interface graphique native Windows C ++ et Objective-C dans la même application Windows.

Éphémère
la source
6

Si vous voulez juste expérimenter, il y a un compilateur Objective-C pour .NET (Windows) ici: qckapp

user397362
la source
ce programme n'a pas pu être compilé avec osc. # import <Foundation / Foundation.h> int main (int argc, const char * argv []) {NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog (@ "Test ... \ n..1 \ n ... 2 \ n .... 3"); [drain de piscine]; retourner 0; }
KIRAN KJ
5

Vous pouvez obtenir un compilateur objectif c qui fonctionnera avec Windows et jouera bien avec Visual Studio 2008 \ 2010 ici.

open-c flite

Téléchargez simplement la dernière source. Vous n'avez pas besoin de construire tout CF-Lite, il existe une solution appelée objc.sln. Vous devrez corriger quelques-uns des chemins d'inclusion, mais cela se construira très bien. Il y a même un projet de test inclus afin que vous puissiez voir certains fichiers objective-c .m en cours de compilation et de travail dans Visual Studio. Une chose triste est que cela ne fonctionne qu'avec Win32 et non x64. Il y a du code d'assembly qui devrait être écrit pour x64 pour qu'il prenne en charge cela.

Aaron Stainback
la source
J'ai téléchargé et exécuté ce projet à l'aide de Visual Studio 2013 et j'ai obtenu 30 instances de cette erreur. Erreur 64 Erreur C2632: 'char' suivi de 'bool' est illégal C: \ opencflite-code-248-trunk \ include \ c99 \ stdbool.h 20 1 objc
Adam Mendoza
4

Une tentative récente de porter Objective C 2.0 vers Windows est le subjectif projet .

Du Readme:

Subjective est une tentative pour apporter Objective C 2.0 avec prise en charge ARC à Windows.

Ce projet est un fork d'objc4-532.2, le runtime Objective C fourni avec OS X 10.8.5. Le port peut être compilé de manière croisée sur OS X en utilisant llvm-clang combiné avec l'éditeur de liens MinGW.

Il existe certaines limitations, dont beaucoup sont une question de travail supplémentaire, tandis que d'autres, telles que les exceptions et les blocages, dépendent d'un travail plus sérieux dans les projets tiers. Les limitations sont les suivantes:

• 32 bits uniquement - 64 bits est en cours

• Liaison statique uniquement - la liaison dynamique est en cours

• Pas de fermetures / blocs - jusqu'à ce que libdispatch les supporte sous Windows

• Aucune exception - jusqu'à ce que clang les supporte sous Windows

• Pas de GC à l'ancienne - jusqu'à ce que quelqu'un s'en soucie ...

• Internes: pas de vtables, pas de support gdb, juste du malloc simple, pas de préoptimisations - certaines de ces choses seront disponibles sous la version 64 bits.

• Actuellement, un compilateur clang patché est requis; le patch ajoute l'indicateur -fobjc-runtime = subj

Le projet est disponible sur Github , et il y a aussi un fil sur le groupe Cocotron décrivant certains des progrès et des problèmes rencontrés.

insys
la source
2

Obtenez GNUStep ici

Obtenez MINGW ici

Installer MINGW Installer GNUStep puis tester

raksa eng
la source
0

Si vous êtes à l'aise avec l'environnement Visual Studio,

Petit projet: jGRASP avec gcc Grand projet: Cocotron

J'ai entendu dire qu'il y avait des émulateurs, mais je n'ai trouvé que l'émulateur Apple II http://virtualapple.org/ . Cela semble limité aux jeux.

Cloud Cho
la source
0

Tout d'abord, oubliez les outils GNUStep . Ni ProjectManager ni ProjectCenter ne peuvent être appelés IDE. Avec tout le respect que je vous dois , il semble que les gars du projet GNUStep soient coincés à la fin des années 80 (c'est à ce moment-là que NeXTSTEP est apparu).

Vigueur

ctagsprend en charge Objective-C depuis r771 (assurez-vous de choisir la version préliminaire 5.9 et de l'ajouter --langmap=ObjectiveC:.m.hà la ligne de commande, voir ici ), vous aurez donc un acheminement de code / navigation décent.

Voici un bref guide sur l'ajout de la prise en charge d'Objective-C au plugin Vim tagbar.

Emacs

De même pour etagslivré avec Emacsen moderne, vous pouvez donc commencer avec Emacs Objectif Mode C . YASnippet fournira des modèles utiles:

Mode objc YASnippet

et si vous voulez quelque chose de plus intelligent que la complétion de code basée sur des balises de base , jetez un œil à cette question .

Éclipse

Le CDT soutient des Makefileprojets basés sur:

entrez la description de l'image ici

- donc techniquement, vous pouvez créer vos projets Objective-C hors de la boîte (sous Windows, vous aurez besoin de la chaîne d'outils Cygwin ou MinGW ). Le seul problème est l'éditeur de code qui signalera de nombreuses erreurs par rapport à ce qu'il pense être un code C pur (la vérification de code à la volée peut être désactivée, mais quand même ...). Si vous souhaitez mettre en évidence la syntaxe appropriée, vous pouvez ajouter Eclim à votre Eclipse et profiter de toutes les bonnes fonctionnalités d' Eclipse et de Vim (voir ci-dessus).

Un autre plugin Eclipse prometteur est Colorer , mais il ne prend pas encore en charge Objective-C. N'hésitez pas à déposer une demande de fonctionnalité.

SlickEdit

SlickEdit , entre autres fonctionnalités d'un excellent IDE, prend en charge Objective-C. Bien qu'il soit assez complexe à apprendre (pas aussi complexe qu'Emacs), je pense que c'est votre meilleure option à condition que cela ne vous dérange pas de l'acheter (le prix est assez abordable).

De plus, il dispose d'un plugin Eclipse qui peut être utilisé comme alternative à l'éditeur autonome.

KDevelop

La rumeur veut qu'il existe un patch KDevelop (15 ans, mais qui s'en soucie?). Personnellement , je ne pense pas que KDevelop soit supérieur aux fonctionnalités par rapport à Emacsen , donc je ne prendrais pas la peine de l'essayer.


Ce qui précède s'applique également au développement d'Objective-C sous Linux, car tous les outils mentionnés sont plus ou moins portables.

Basse
la source