Objective-C dla Windows


230

Jaki byłby najlepszy sposób napisania Objective-C na platformie Windows?

Cygwin i gcc? Czy jest jakiś sposób, żeby jakoś zintegrować to z Visual Studio?

Wzdłuż tych linii - czy są jakieś sugestie, jak połączyć się i użyć zestawu Windows SDK do czegoś takiego. To inna bestia, ale wiem, że mogę pisać asembler i link w bibliotekach DLL systemu Windows, zapewniając mi dostęp do tych wywołań, ale nie wiem, jak to zrobić bez Google'a i uzyskiwania fragmentarycznych wskazówek.

Czy ktoś jest świadomy dobrego zasobu online lub książki do robienia lub wyjaśniania tego rodzaju rzeczy?


5
Jeśli robisz to tylko na iOS, możesz użyć środowiska kompilacji iOS PM Baty ...
Cole Johnson

Odpowiedzi:


146

Rozwijając dwie poprzednie odpowiedzi, jeśli chcesz tylko Objective-C, ale nie żadnej z frameworków Cocoa, gcc będzie działać na dowolnej platformie. Możesz go użyć przez Cygwin lub uzyskać MinGW. Jeśli jednak potrzebujesz szkieletów Cocoa lub przynajmniej rozsądnego ich podzbioru, GNUStep i Cocotron są najlepszymi zakładami.

Cocotron implementuje wiele rzeczy, których GNUStep nie robi, takich jak CoreGraphics i CoreData, chociaż nie mogę poręczyć za to, jak kompletna jest ich implementacja w określonych ramach. Ich celem jest dbanie o aktualność Cocotron w najnowszej wersji OS X, aby każdy wykonalny program OS X mógł działać w systemie Windows. Ponieważ GNUStep zwykle używa najnowszej wersji gcc, dodają także obsługę Objective-C ++ i wiele funkcji Objective-C 2.0.

Nie testowałem tych funkcji z GNUStep, ale jeśli użyjesz wystarczająco nowej wersji gcc, możesz być w stanie ich użyć. Kilka lat temu nie mogłem używać Objective-C ++ z GNUStep. Jednak GNUStep kompiluje się z dowolnej platformy. Cocotron to bardzo mac-centryczny projekt. Chociaż prawdopodobnie można go skompilować na innych platformach, zawiera pliki projektu XCode, a nie makefile, więc możesz kompilować jego frameworki po wyjęciu z pudełka na OS X. Zawiera również instrukcje dotyczące kompilowania aplikacji Windows na XCode, ale nie każda inna platforma. Zasadniczo prawdopodobnie możliwe jest skonfigurowanie środowiska programistycznego Windows dla Cocotron, ale nie jest to tak proste jak skonfigurowanie środowiska GNUStep, a Ty będziesz działał na własną rękę, więc GNUStep jest zdecydowanie najlepszym rozwiązaniem, jeśli rozwijasz się na Windows, a nie tylko Windows.

Co do wartości, Cocotron jest licencjonowany na licencji MIT, a GNUStep na licencji LGPL.


1
Zawsze możesz przenosić framworks Cocoa, które są open source. Przykładem jest CoreFoundation.
Cole Johnson

Nie wszystkie z Core Foundation IS są oprogramowaniem typu open source. Ogromna ilość jest zamkniętym źródłem.
uchuugaka

X'D Nie wiem, dlaczego ten facet otrzymał najlepszą odpowiedź, że nawet nie próbował rzeczy, o których mówi. Powinni zrobić nową odznakę dla odpowiedzi bs. Bez obrazy @ Michael. To ciekawa lektura.
Wolfpack'08

Bez obrazy, ale dla przypomnienia, w czasie, gdy pisałem tę odpowiedź, przez kilka tygodni walczyłem o skompilowanie Objective-C dla Windows i próbowałem używać zarówno GNUStep, jak i Cocoatron. W końcu byłem zmuszony przepisać projekt w C ++, z powodu pewnych błędów kompilatora w tym czasie, a ivars nie zostały zainicjowane na 0 w systemie Windows. Nawiązałem do „Nie testowałem tych funkcji”, ale mówiłem o nowych wówczas funkcjach Objective-C 2.0, które były dostępne na platformach Apple dopiero od mniej niż roku, kiedy napisano tę odpowiedź, oraz właśnie wylądował w GNUStep.
Michael Buckley,

89

Państwo może wykorzystać Objective C wewnątrz środowiska Windows. Jeśli wykonasz te kroki, powinno działać dobrze:

  1. Odwiedź stronę GNUstep i pobierz GNUstep MSYS Subsystem(MSYS dla GNUstep), GNUstep Core(Biblioteki dla GNUstep) iGNUstep Devel
  2. Po pobraniu tych plików zainstaluj w tej kolejności, w przeciwnym razie wystąpią problemy z konfiguracją
  3. Przejdź do C:\GNUstep\GNUstep\System\Library\Headers\Foundation1 i upewnij się, że Foundation.histnieje
  4. Otwórz wiersz polecenia i uruchom, gcc -vaby sprawdzić, czy GNUstep MSYSjest poprawnie zainstalowany (jeśli pojawi się błąd, że nie znaleziono pliku, upewnij się, że binfolder GNUstep MSYSznajduje się w twoim PATH)
  5. Użyj tego prostego programu „Hello World”, aby przetestować funkcjonalność GNUstep:

    #include <Foundation/Foundation.h>
    
    int main(void)
    {
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
        NSLog(@"Hello World!.");
        [pool drain];
     return;
    }
  6. Wróć do wiersza polecenia i cddo miejsca, w którym zapisałeś program „Hello World”, a następnie skompiluj go: 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. Na koniec w wierszu polecenia wpisz, helloworldaby go uruchomić

Wszystkiego najlepszego i baw się dobrze z Objective-C!


UWAGI :

  1. Użyłem domyślnej ścieżki instalacji - odpowiednio dostosuj swój wiersz poleceń
  2. Upewnij się, że ścieżka do folderu jest podobna do mojej, w przeciwnym razie pojawi się błąd

1
Ta sugerowana instalacja nie działa na moim komputerze, ponieważ już zainstalowałem gcc, którego użyłem dla nasm. Więc po prostu poprawił gcc -o helloworld...się c:\gnustep\bin\gcc -o helloworld...i to zadziałało. Alternatywą byłoby zmodyfikowanie zmiennych środowiskowych, czego nie zrobiłem, ponieważ właśnie widziałem Cel C. Dzięki dzięki teshguru za odpowiedź na pytanie.
Martin Berger,

Rozważ usunięcie formatowania kodu wokół nazw rzeczy. GNUstep MYSY to nie kod, to tylko nazwa oprogramowania. Jeśli chcesz, aby coś się wyróżniało, może warto go odprężyć? A jeśli coś łączy się z tagiem, rozważ użycie ograniczników tagów, ale nie powinno być żadnego powodu, aby umieszczać nazwy własne w ogranicznikach tagów.
Wolfpack'08

gdy jest używany yhis 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 działa to fir me
Dalvik

13

Również:

Cocotron to projekt typu open source, którego celem jest wdrożenie wieloplatformowego interfejsu API Objective-C podobnego do opisanego w dokumentacji Cocoa firmy Apple Inc. Obejmuje to środowisko wykonawcze AppKit, Foundation, Objective-C oraz interfejsy API obsługujące, takie jak CoreGraphics i CoreFoundation.

http://www.cocotron.org/


4
Projekt Cocotron jest przeznaczony do kompilacji krzyżowej z XCode, a nie do pisania w systemie Windows i tam kompilacji.
Dan Udey,

2
to nie jest dobra odpowiedź, nie jestem nawet pewien, dlaczego OP wybrał to jako „odpowiedź”, ponieważ CoCotron jest dla komputerów Mac, a OP chce rozwiązania opartego na systemie Windows.
cbrulak

Masz rację - trochę podekscytowałem się, gdy przeczytałem: „Ogólnym celem jest zapewnienie pełnego wsparcia na dowolnej opłacalnej platformie, projekt ma być jak najbardziej przenośny. Jednak większość prac w tym czasie to koncentruje się na zapewnieniu wsparcia dla Microsoft Windows. W szczególności wersje oparte na NT, od 2000 do Vista ”.
Luther Baker

13

WinObjC? Windows Bridge na iOS (wcześniej znany jako „Project Islandwood”).

Windows Bridge na iOS (zwany również WinObjC) to projekt Microsoft typu open source, który zapewnia środowisko programistyczne Objective-C dla Visual Studio / Windows. Ponadto WinObjC zapewnia obsługę kompatybilności z iOS API. Chociaż ostateczna wersja pojawi się później tej jesieni (umożliwiając mostowi skorzystanie z nowych możliwości narzędziowych, które zostaną dostarczone wraz z nadchodzącą aktualizacją Visual Studio 2015),

Most jest dostępny dla społeczności Open Source w jego obecnym stanie. Od teraz do upadku. Most iOS jako projekt typu open source na licencji MIT. Biorąc pod uwagę ambicje projektu, ułatwiając programistom iOS tworzenie i uruchamianie aplikacji w systemie Windows.

Salmaan Ahmed ma dogłębny post na temat Windows Bridge dla iOS http://blogs.windows.com/buildingapps/2015/08/06/windows-bridge-for-ios-lets-open-this-up/ omawiający kompilator, środowisko wykonawcze, integracja IDE oraz to, czym jest most, a czym nie. Co najlepsze, kod źródłowy mostu iOS jest teraz dostępny na GitHub.

Most iOS obsługuje zarówno aplikacje Windows 8.1, jak i Windows 10 zbudowane dla architektur procesorów x86 i x64, a wkrótce dodamy optymalizacje kompilatora i obsługę ARM, która dodaje obsługę urządzeń mobilnych.


9

Mam mieszane uczucia na temat projektu Cocotron. Cieszę się, że udostępniają kod źródłowy i udostępniają, ale nie sądzę, że robią to w najprostszy sposób.

Przykłady
Apple wydało kod źródłowy do środowiska wykonawczego celu-c , który obejmuje właściwości i wyrzucanie elementów bezużytecznych. Projekt Cocotron ma jednak własną implementację środowiska uruchomieniowego celu-c. Po co zawracać sobie głowę powielaniem wysiłku? Istnieje nawet plik Visual Studio Project, którego można użyć do zbudowania pliku objc.dll. Lub jeśli jesteś naprawdę leniwy, możesz po prostu skopiować plik DLL z instalacji Safari w systemie Windows.

Nie zadali sobie również trudu, aby wykorzystać CoreFoundation, który jest również otwarty przez Apple. Zadałem pytanie na ten temat, ale nie otrzymałem odpowiedzi.

Myślę, że obecnie najlepszym rozwiązaniem jest pobranie kodu źródłowego z wielu źródeł (Apple, CocoTron, GnuStep) i połączenie go razem z tym, czego potrzebujesz. Będziesz musiał przeczytać wiele źródeł, ale będzie to warte efektu końcowego.


2
Przepraszam, że nie odpowiedziałem na twoje pytanie w grupie, podsumowując: APSL jest do bani, a środowisko wykonawcze i CF są pod nimi.
Christopher Lloyd

1
Co jest do bani w APSL? ( opensource.apple.com/license/apsl ) To nie jest inwazyjne jak GPL. Jeśli zmodyfikujesz objęty kod, musisz go udostępnić. Kod objęty to na przykład wszelkie modyfikacje wprowadzone w CoreFoundation, ale nie uwzględniają rzeczywistego programu. Musisz także wyraźnie zaznaczyć swoje modyfikacje. Jest to uciążliwe, ale warte kompromisu przy użyciu wysoce przetestowanego kodu Apple, prawda?
Matthieu Cormier

8
Nie sądzę, że rozumiesz, jak działa wypowiedzenie, nie jest to coś, co mogą zrobić dla wszystkich naraz, kod jest licencjonowany na warunkach i może być używany na tych warunkach przez czas nieokreślony. Może się zdarzyć, że Apple może wyróżnić osoby / firmy, które ich zdaniem naruszyły licencję. FSF robi to już z naruszeniami GPL, czy naprawdę uważasz, że Apple jest bardziej przyjazny dla programistów niż FSF? Jeśli uważasz, że warunki są nieistotne i bez znaczenia, jestem pewien, że możesz przekonać Apple do legalnego ich usunięcia.
Christopher Lloyd,

8
Należy zauważyć, że Apple współpracował z FSF przy zmianach w APSL i że FSF uważa APSL w wersji 2.0 za licencję wolnego oprogramowania. gnu.org/philosophy/apsl.html
Sean

3
Z mojego punktu widzenia (jako ktoś, kto miał do czynienia z licencjami BSD, LGPL, MIT i innymi licencjami na zastrzeżony produkt), licencja Apple jest MNIEJSZA restrykcyjna niż GPL - co szczerze mówiąc, jest uciążliwe. Jeśli mogę uzyskać BSD, MIT lub APSL, wolę pracować z nimi niż z GPL.
Lloyd Sargent

8

Wiem, że to bardzo stary post, ale znalazłem rozwiązanie, które stało się dostępne dopiero niedawno ORAZ umożliwia prawie wszystkie funkcje Objective-C 2.0 na platformie Windows.

Wraz z pojawieniem się gcc 4.6 do kompilatora Objective-C dodano obsługę funkcji języka Objective-C 2.0 (bloki, składnia kropek, właściwości syntezowane itp.) (Szczegółowe informacje znajdują się w uwagach do wydania ). Ich środowisko wykonawcze zostało również zaktualizowane, aby działało prawie identycznie jak własne środowisko wykonawcze Apple Objective-C 2.0. W skrócie oznacza to, że (prawie) każdy program, który zgodnie z prawem skompiluje się z Clangiem na Macu, również skompiluje się z gcc 4.6 bez modyfikacji.

Na marginesie, jedną z funkcji, która nie jest dostępna, są literały słownik / tablica / etc, ponieważ wszystkie są zapisane na stałe w Clang, aby używać klas Apple NSDictionary, NSArray, NSNumber itp.

Jeśli jednak lubisz żyć bez rozbudowanych platform Apple, możesz to zrobić. Jak zauważono w innych odpowiedziach, GNUStep i Cocotron zapewniają zmodyfikowane wersje bibliotek klas Apple, lub możesz napisać własną (moja preferowana opcja).

MinGW to jeden ze sposobów uzyskania GCC 4.6 na platformę Windows i można go pobrać ze strony internetowej MinGW . Upewnij się, że podczas instalacji dołączasz instalację C, C ++, Objective-C i Objective-C ++. Chociaż opcjonalne, sugerowałbym również instalację środowiska MSYS.

Po zainstalowaniu źródło Objective-C 2.0 można skompilować z:

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

MinGW obejmuje również obsługę kompilacji natywnych aplikacji Windows GUI z -mwindowsflagą. Na przykład:

g++ -mwindows MyFile.cpp

Jeszcze nie próbowałem tego, ale wyobrażam sobie, że jeśli opiszesz swoje klasy Objective-C w Objective-C ++ na najwyższej możliwej warstwie, powinieneś być w stanie skutecznie przeplatać natywny GUI Windows C ++ i Objective-C wszystko w jednej aplikacji Windows.



6

Jeśli chcesz po prostu poeksperymentować, jest tutaj kompilator Objective-C dla platformy .NET (Windows): qckapp


ten program nie mógł się skompilować z osc. # import <Foundation / Foundation.h> int main (int argc, const char * argv []) {NSAutoreleasePool * pool = [[NSAutoreleasePool przydzielenie] init]; NSLog (@ ”Testowanie ... \ n..1 \ n ... 2 \ n .... 3”); [odpływ z basenu]; zwraca 0; }
KIRAN KJ

5

Możesz tutaj znaleźć kompilator z celem c, który będzie działał w systemie Windows i ładnie grał w Visual Studio 2008 \ 2010.

open-c flite

Wystarczy pobrać najnowsze źródło. Nie musisz budować całego CF-Lite, istnieje rozwiązanie o nazwie objc.sln. Będziesz musiał naprawić kilka ścieżek dołączania, ale wtedy wszystko będzie dobrze. Zawiera nawet projekt testowy, dzięki czemu można zobaczyć, jak niektóre pliki-c .m są kompilowane i pracują w Visual Studio. Smutne jest to, że działa tylko z Win32, a nie x64. Jest taki kod asemblera, który musiałby zostać napisany dla x64, aby go obsługiwał.


Pobrałem i uruchomiłem ten projekt za pomocą programu Visual Studio 2013 i otrzymałem 30 wystąpień tego błędu. Błąd 64 błąd C2632: „char”, po którym następuje „bool” jest niedozwolone C: \ opencflite-code-248-trunk \ include \ c99 \ stdbool.h 20 1 objc
Adam Mendoza

4

Ostatnia próba przeniesienia celu C 2.0 do systemu Windows to projekt subiektywny .

Z pliku Readme:

Subiektywna to próba wprowadzenia Objective C 2.0 z obsługą ARC do Windows.

Ten projekt jest rozwidleniem objc4-532.2, środowiska wykonawczego Objective C, które jest dostarczane z systemem OS X 10.8.5. Port można skompilować krzyżowo w systemie OS X za pomocą llvm-clang w połączeniu z łącznikiem MinGW.

Istnieją pewne ograniczenia, z których wiele jest kwestią dodatkowej pracy, podczas gdy inne, takie jak wyjątki i bloki, zależą od poważniejszej pracy w projektach stron trzecich. Ograniczenia są następujące:

• Tylko wersja 32-bitowa - trwa proces 64-bitowy

• Tylko łączenie statyczne - trwa łączenie dynamiczne

• Brak zamknięć / bloków - dopóki libdispatch nie obsługuje ich w systemie Windows

• Bez wyjątków - dopóki clang nie obsługuje ich w systemie Windows

• Brak GC w starym stylu - dopóki ktoś się nie przejmuje ...

• Wewnętrzne: brak vtables, brak wsparcia dla gdb, po prostu zwykły malloc, brak wstępnej optymalizacji - niektóre z tych rzeczy będą dostępne w 64-bitowej wersji.

• Obecnie wymagany jest poprawiony kompilator clang; łatka dodaje flagę -fobjc-runtime = subj

Projekt jest dostępny na Github , a grupa Cocotron zawiera także wątek opisujący niektóre postępy i napotkane problemy.



0

Jeśli nie masz doświadczenia ze środowiskiem Visual Studio,

Mały projekt: jGRASP z gcc Duży projekt: Cocotron

Słyszałem, że są emulatory, ale mogłem znaleźć tylko emulator Apple II http://virtualapple.org/ . Wygląda na ograniczony do gier.


0

Przede wszystkim zapomnij o narzędziach GNUStep . Ani ProjectManager, ani ProjectCenter nie można nazwać IDE. Z całym szacunkiem, wygląda na to, że faceci z projektu GNUStep utknęli pod koniec lat 80-tych (kiedy to pojawił się NeXTSTEP ).

Wigor

ctagsobsługuje Objective-C od r771 (pamiętaj, aby wybrać wersję wstępną 5.9 i dodać --langmap=ObjectiveC:.m.hdo wiersza poleceń, patrz tutaj ), więc będziesz mieć przyzwoite uzupełnianie kodu / nawigację po tagach.

Oto krótkie poradniki na temat dodawania obsługi Objective-C do wtyczki paska tagów Vima.

Emacs

To samo dotyczy etags dostarczany z nowoczesnym Emacsen, więc można zacząć Emacs Objective C Tryb . YASnippet zapewni przydatne szablony:

Tryb YASnippet objc

a jeśli chcesz czegoś inteligentniejszego niż podstawowe uzupełnianie kodu oparte na tagach , spójrz na to pytanie .

Zaćmienie

CDT obsługuje Makefileprojekty oparte na:

wprowadź opis zdjęcia tutaj

- więc technicznie możesz zbudować swoje projekty Objective-C po wyjęciu z pudełka (w systemie Windows potrzebny będzie łańcuch narzędzi Cygwin lub MinGW ). Jedynym problemem jest edytor kodu, który zgłosi wiele błędów w porównaniu z tym, co uważa za czysty kod C (sprawdzanie kodu w locie można wyłączyć, ale nadal ...). Jeśli chcesz poprawnego podświetlania składni, możesz dodać Eclim do swojego Eclipse i cieszyć się wszystkimi dobrymi cechami Eclipse i Vima (patrz wyżej).

Kolejna obiecująca wtyczką Eclipse jest Colorer , ale jak dotąd nie obsługuje Objective-C. Możesz jednak poprosić o dodanie funkcji.

SlickEdit

SlickEdit , oprócz innych funkcji świetnego IDE, robi wsparcie Objective-C. Chociaż nauka jest dość skomplikowana (choć nie tak skomplikowana jak Emacs), uważam, że jest to najlepsza opcja, pod warunkiem, że nie masz nic przeciwko zakupowi (cena jest dość przystępna).

Dodatkowo ma wtyczkę Eclipse, która może być używana jako alternatywa dla samodzielnego edytora.

KDevelop

Plotka głosi, że istnieje łatka KDevelop (15 lat, ale kogo to obchodzi?). Osobiście nie sądzę, aby KDevelop był lepszy od Emacsena , więc nie zawracałbym sobie głowy wypróbowaniem go.


Powyższe dotyczy również programowania Objective-C w systemie Linux, ponieważ wszystkie wymienione narzędzia są mniej lub bardziej przenośne.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.