Windows için Objective-C


230

Windows platformunda Objective-C yazmanın en iyi yolu ne olabilir?

Cygwin ve gcc? Bunu bir şekilde Visual Studio'ya entegre edebilmemin bir yolu var mı?

Bu çizgiler boyunca - böyle bir şey için Windows SDK'yı nasıl bağlayacağınız ve kullanacağınız konusunda herhangi bir öneri var mı? Bu farklı bir canavar ama ben bu aramalar için erişilebilirlik veren Windows DLL'lerde montaj ve bağlantı yazabilirsiniz biliyorum ama googling ve parça parça yön almadan bunu nasıl yapacağımı bilmiyorum.

Herkes bu tür şeyler yapmak veya açıklamak için iyi bir çevrimiçi veya kitap kaynağı farkında mı?


5
Sadece iOS için yapıyorsanız, PM Baty tarafından iOS Build Environment'ı kullanabilirsiniz ...
Cole Johnson

Yanıtlar:


146

Önceki iki yanıta genişleyerek, sadece Objective-C'yi istiyorsanız, ancak Kakao çerçevelerinden herhangi birini istemiyorsanız, gcc herhangi bir platformda çalışacaktır. Cygwin üzerinden kullanabilir veya MinGW alabilirsiniz. Ancak, Kakao çerçevelerini veya en azından makul bir alt kümesini istiyorsanız, GNUStep ve Cocotron en iyi bahislerinizdir.

Cocotron, GNUStep'in CoreGraphics ve CoreData gibi pek çok şeyi uygularken, uygulamalarının belirli bir çerçevede ne kadar tamamlandığını kefil edemiyorum. Amaçları, herhangi bir geçerli OS X programının Windows üzerinde çalışabilmesi için Cocotron'u en son OS X sürümü ile güncel tutmaktır. GNUStep tipik olarak gcc'nin en son sürümünü kullandığından, Objective-C ++ ve bir çok Objective-C 2.0 özelliği için destek eklerler.

Bu özellikleri GNUStep ile test etmedim, ancak yeterince yeni bir gcc sürümü kullanıyorsanız, bunları kullanabilirsiniz. Birkaç yıl önce GNUStep ile Objective-C ++ kullanamadım. Ancak, GNUStep hemen hemen her platformdan derlenir. Cocotron çok mak merkezli bir projedir. Muhtemelen diğer platformlarda derlemek mümkün olsa da, makefiles değil XCode proje dosyaları gelir, böylece çerçevelerini sadece OS X'te kutudan derleyebilirsiniz. Ayrıca XCode'da Windows uygulamalarını derleme talimatları da gelir, başka herhangi bir platform. Temel olarak, Cocotron için bir Windows geliştirme ortamı kurmak muhtemelen mümkündür, ancak GNUStep için bir tane kurmak kadar kolay değildir ve kendi başınıza olacaksınız, bu yüzden GNUStep kesinlikle gelişiyorsanız Sadece Windows yerine Windows.

Değeri ne olursa olsun, Cocotron MIT lisansı altında ve GNUStep LGPL lisansı altında lisanslanmıştır.


1
Açık kaynak olan Kakao çerçevelerini her zaman taşıyabilirsiniz. Örneğin CoreFoundation.
Cole Johnson

Tüm Core Foundation IS açık kaynak kodlu değildir. Büyük miktarda kapalı kaynak.
uchuugaka

Bu adamın neden bahsettiği şeyleri bile denemediği en iyi cevabı aldığını bilmiyorum. BS cevapları için yeni bir rozet yapmalılar. Saldırı yok @michael. İlginç bir okuma.
Wolfpack'08

Suçlanmadı, ancak kayıt için, bu cevabı yazdığım sırada, birkaç hafta boyunca Windows için Objective-C derlemek için mücadele ediyordum ve hem GNUStep hem de Cocoatron'a gitmeyi denemiştim. Sonunda bazı derleyici hataları nedeniyle C ++ projeyi yeniden yazmak zorunda kaldı ve ivars Windows 0 0 başlatılmadı. "Bu özellikleri test etmedim" den bahsettim, ancak bu cevabın yazıldığı bir yıldan az bir süredir yalnızca Apple platformlarında bulunan yeni Objective-C 2.0 özellikleri hakkında konuşuyordum ve GNUStep'e yeni gelmişti.
Michael Buckley

89

Sen olabilir Windows ortamında içeride Amaç C kullanın. Bu adımları izlerseniz, gayet iyi çalışıyor olmalıdır:

  1. GNUstep web sitesini ziyaret edin ve GNUstep MSYS Subsystem(GNUstep için MSYS), GNUstep Core(GNUstep için Kütüphaneler) veGNUstep Devel
  2. Bu dosyaları indirdikten sonra, bu sırayla yükleyin, yoksa yapılandırma ile ilgili sorunlarınız olacaktır.
  3. Gidin C:\GNUstep\GNUstep\System\Library\Headers\Foundation1 ve emin Foundation.hvar
  4. İstemi bir komut açın ve çalıştırmak gcc -vkontrol etmek GNUstep MSYSdoğru takıldığından (bir dosya bulunamadı hatası alırsanız, emin binklasör GNUstep MSYSGözlerinde farklı olduğunu PATH)
  5. GNUstep'in işlevselliğini test etmek için bu basit "Merhaba Dünya" programını kullanın:

    #include <Foundation/Foundation.h>
    
    int main(void)
    {
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
        NSLog(@"Hello World!.");
        [pool drain];
     return;
    }
  6. Komut istemine ve cd"Hello World" programını kaydettiğiniz yere geri dönün ve derleyin: 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. Son olarak, komut isteminden helloworldçalıştırmak için yazın

En iyisi ve Objective-C ile eğlenin!


NOTLAR :

  1. Varsayılan yükleme yolunu kullandım - komut satırınızı buna göre ayarlayın
  2. Klasör yolunuzun benimkine benzer olduğundan emin olun, aksi takdirde bir hata alırsınız

1
Nasm için kullandığım gcc'yi zaten kurduğum için bu önerilen kurulum bilgisayarımda çalışmadı. Bu yüzden sadece düzeltilmiş gcc -o helloworld...için c:\gnustep\bin\gcc -o helloworld...ve işe yaradı. Bunun alternatifi sadece Amaç C'yi görebildiğimden beri yapmadığım Ortam Değişkenlerini değiştirmek olacaktır.
Martin Berger

Şeylerin adlarının çevresindeki kod biçimlendirmesini kaldırmayı düşünün. GNUstep MYSY kod değil, sadece bir yazılımın adı. Bir şeyin göze çarpmasını istiyorsanız, belki de zorlamayı düşünebilirsiniz? Bir şey bir etikete bağlanırsa, etiket sınırlayıcıları kullanmayı düşünün, ancak etiket tanımlarına uygun adlar koymak için herhangi bir neden olmamalıdır.
Wolfpack'08

c: \ gnustep \ bin \ gcc -o helloworld.exe kullanıldığında helloworld.m -I / GNUstep / GNUstep / Sistem / Kütüphane / Başlıklar -L / GNUstep / GNUstep / Sistem / Kütüphane / Kütüphaneler -std = c99 -lobjc - lgnustep-base -fconstant-string-class = NSConstantString işe yaradı
Dalvik

13

Ayrıca:

Cocotron, Apple Inc.'in Cocoa belgelerinde tarif edilene benzer bir platformlar arası Objective-C API uygulamayı amaçlayan açık kaynaklı bir projedir. Buna AppKit, Foundation, Objective-C çalışma zamanı ve CoreGraphics ve CoreFoundation gibi destek API'leri dahildir.

http://www.cocotron.org/


4
Cocotron projesi, Windows'ta yazılmayan ve orada derlenmeyen XCode'dan çapraz derlenecek şekilde tasarlanmıştır.
Dan Udey

2
Bu iyi bir cevap değil, hatta OP neden bu 'cevap' seçti emin değilim çünkü CoCotron Mac için ve OP Windows tabanlı bir çözüm istiyor.
cbrulak

Haklısınız - Bunu okuduğumda biraz fazla heyecanlandım: "Genel amaç, herhangi bir uygulanabilir platformda tam destek sağlamaktır, proje mümkün olduğunca taşınabilir olacak şekilde tasarlanmıştır. Ancak, şu anda işin çoğu Microsoft Windows için destek sağlamaya odaklandı. Özellikle NT tabanlı sürümler, 2000'e kadar Vista. "
Luther Baker

13

WinObjC? İOS için Windows Bridge (önceden 'Project Islandwood' olarak biliniyordu).

İOS için Windows Bridge (WinObjC olarak da bilinir), Visual Studio / Windows için Objective-C geliştirme ortamı sağlayan Microsoft açık kaynaklı bir projedir. Ayrıca, WinObjC, iOS API uyumluluğu için destek sağlar. Son sürüm bu sonbaharda gerçekleşecek olsa da (köprünün yaklaşan Visual Studio 2015 Güncellemesi ile birlikte gelen yeni takım yeteneklerinden faydalanmasına izin verirken),

Köprü, şu anki durumunda açık kaynak topluluğu tarafından kullanılabilir. Şimdi ve sonbahar arasında. MIT lisansı altında açık kaynaklı bir proje olarak iOS köprüsü. Projenin tutkusu göz önüne alındığında, iOS geliştiricilerinin Windows üzerinde uygulama oluşturmasını ve çalıştırmasını kolaylaştırıyor.

Salmaan Ahmed iOS Windows Köprüsü üzerinde derinlemesine bir yazı vardır http://blogs.windows.com/buildingapps/2015/08/06/windows-bridge-for-ios-lets-open-this-up/ tartışırken derleyici, çalışma zamanı, IDE entegrasyonu ve köprünün ne olup olmadığı. Hepsinden iyisi, iOS köprüsünün kaynak kodu şu anda GitHub'da yayınlanıyor .

İOS köprüsü, x86 ve x64 işlemci mimarileri için tasarlanmış Windows 8.1 ve Windows 10 uygulamalarını destekliyor ve yakında mobil destek ekleyen ARM için derleyici optimizasyonları ve desteği ekleyeceğiz.


9

Cocotron projesi hakkında karışık hislerim var. Kaynak kodu yayınlama ve paylaşma sevindim ama işleri en kolay şekilde yaptıklarını hissetmiyorum.

Örnekler.
Apple, kaynak kodunu özellikleri ve çöp toplamayı içeren objektif-c çalışma zamanına yayınladı. Ancak Cocotron projesinin objektif-c çalışma zamanını kendi uygulaması vardır. Neden çabayı yinelemek için uğraşasınız ki? Hatta bir objc.dll dosyası oluşturmak için kullanılabilecek bir Visual Studio Project dosyası bile vardır. Ya da gerçekten tembelseniz, DLL dosyasını Windows'ta Safari yüklemesinden kopyalayabilirsiniz.

Ayrıca Apple tarafından da açık kaynaklı olan CoreFoundation'dan yararlanmaya zahmet etmediler. Bu konuda bir soru gönderdim ancak cevap alamadım.

Şu anki en iyi çözümün kaynak kodunu birden fazla kaynaktan (Apple, CocoTron, GnuStep) alıp ihtiyacınız olan şeyle birleştirmek olduğunu düşünüyorum. Çok fazla kaynak okumak zorunda kalacaksınız ama sonuçta değecek.


2
Özetle özetlemek gerekirse, grupta sorunuzu cevaplamadığınız için üzgünüm: APSL berbat ve hem çalışma zamanı hem de CF bunların altında.
Christopher Lloyd

1
APSL hakkında ne berbat? ( opensource.apple.com/license/apsl ) GPL gibi invaziv değil. Kapsanan kodu değiştirirseniz, bu kodu kullanılabilir hale getirmelisiniz. Kapsanan kod, örneğin CoreFoundation'da yaptığınız değişiklikler olabilir, ancak gerçek programınızı içermez. Ayrıca değişikliklerinizi açıkça işaretlemeniz gerekir. Bu bir sıkıntı ama Apple'ın son derece test edilmiş kodunu kullanarak değiş tokuş etmeye değer değil mi?
Matthieu Cormier

8
Sonlandırmanın nasıl çalıştığını anladığınızı sanmıyorum, bu herkes için aynı anda yapabilecekleri bir şey değil, kod şartlar altında lisanslanmıştır ve bu şartlar altında süresiz olarak kullanılabilir. Olabilecek şey, Apple'ın lisansı ihlal ettiğini düşündüğü bireyleri / şirketleri seçebilmesidir. FSF bunu zaten GPL ihlalleriyle yapıyor, gerçekten Apple'ın geliştiricilere FSF'den daha dost olduğunu mu düşünüyorsunuz? Terimlerin sonuçsuz ve anlamsız olduğunu düşünüyorsanız, Apple'ı yasal olarak onları çıkarmaya ikna edebileceğinizden eminim.
Christopher Lloyd

8
Apple'ın APSL'deki değişiklikler için FSF ile çalıştığı ve FSF'nin APSL Sürüm 2.0'ı bir özgür yazılım lisansı olarak gördüğü unutulmamalıdır. gnu.org/philosophy/apsl.html
Sean

3
Benim bakış açımdan (BSD, LGPL, MIT ve tescilli bir üründeki diğer lisanslarla uğraşan biri olarak) Apple'ın lisansı GPL'den daha kısıtlayıcı - ki bu açıkçası popoda bir acı. BSD, MIT veya APSL alabilirsem, GPL dışındakilerle çalışmayı tercih ederim.
Lloyd Sargent

8

Bu çok eski bir yazı olduğunun farkındayım, ancak yalnızca daha yeni kullanıma sunulan ve Windows platformunda neredeyse tüm Objective-C 2.0 özelliklerini etkinleştiren bir çözüm buldum.

Gcc 4.6'nın gelişiyle, Objective-C derleyicisine Objective-C 2.0 dil özellikleri (bloklar, nokta sözdizimi, sentezlenmiş özellikler, vb.) Desteği eklendi ( tüm ayrıntılar için sürüm notlarına bakın). Çalışma zamanları, Apple'ın kendi Objective-C 2.0 çalışma zamanıyla neredeyse aynı şekilde çalışacak şekilde güncellendi. Kısacası bu, Mac'te Clang ile meşru bir şekilde derleyecek (neredeyse) herhangi bir programın değişiklik yapılmadan gcc 4.6 ile derleneceği anlamına gelir.

Bir yan not olarak, kullanılamayan bir özellik, Apple'ın NSDictionary, NSArray, NSNumber, vb sınıflarını kullanmak için Clang'a sabit olarak kodlandığı için sözlük / dizi / vb değişmezleridir.

Bununla birlikte, Apple'ın geniş çerçeveleri olmadan yaşamaktan memnunsanız, bunu yapabilirsiniz. Diğer yanıtlarda belirtildiği gibi, GNUStep ve Cocotron, Apple'ın sınıf kütüphanelerinin değiştirilmiş sürümlerini sağlar veya kendiniz yazabilirsiniz (tercih ettiğim seçenek).

MinGW, Windows platformunda GCC 4.6 almanın bir yoludur ve MinGW web sitesinden indirilebilir . Yüklediğinizde C, C ++, Objective-C ve Objective-C ++ kurulumunu eklediğinizden emin olun. İsteğe bağlı olsa da, MSYS ortamını yüklemenizi de öneririm.

Kurulduktan sonra Objective-C 2.0 kaynağı aşağıdakilerle derlenebilir:

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

MinGW ayrıca yerel GUI Windows uygulamalarını -mwindowsbayrakla derleme desteği de içerir . Örneğin:

g++ -mwindows MyFile.cpp

Henüz denemedim, ancak Objective-C sınıflarınızı mümkün olan en yüksek katmana Objective-C ++ 'da sararsanız, yerel Windows GUI C ++ ve Objective-C'yi bir Windows uygulamasında başarıyla iç içe geçirebilmelisiniz.



6

Sadece denemek istiyorsanız, burada .NET (Windows) için bir Objective-C derleyicisi var: qckapp


bu program osc. NSLog (@ ”Test ediliyor ... \ n..1 \ n ... 2 \ n .... 3”); [havuz tahliyesi]; dönüş 0; }
KIRAN KJ

5

Burada Windows ile çalışacak ve Visual Studio 2008 \ 2010 ile iyi oynayacak objektif bir c derleyicisi alabilirsiniz.

open-c flite

Sadece en son kaynağı indirin. Tüm CF-Lite'ları oluşturmanıza gerek yok objc.sln adlı bir çözüm var. Dahil etme yollarından birkaçını düzeltmeniz gerekecek, ancak daha sonra iyi bir şekilde oluşturulacak. Hatta bir test projesi dahil edilmiştir, böylece görsel objede derlenmiş ve çalışmakta olan bazı objektif-c. M dosyalarını görebilirsiniz. Üzücü bir şey sadece x64 ile değil Win32 ile çalışır olmasıdır. Bunu desteklemesi için x64 için yazılması gereken bazı montaj kodları vardır.


Bu projeyi Visual Studio 2013 kullanarak indirip çalıştırdım ve bu hatanın 30 örneğini aldım. Hata 64 hatası C2632: 'char' ve ardından 'bool' geçersiz. C: \ opencflite-code-248-trunk \ include \ c99 \ stdbool.h 20 1 objc
Adam Mendoza

4

Objective C 2.0'ı Windows'a taşımak için yapılan son girişim Subjective projesidir.

Benioku Dosyasından:

Subjective, ARC desteği ile Objective C 2.0'ı Windows'a getirme girişimidir.

Bu proje, OS X 10.8.5 ile birlikte gönderilen Objective C çalışma zamanı objc4-532.2'nin bir çataldır. Bağlantı noktası, MinGW bağlayıcısı ile birlikte llvm-clang kullanılarak OS X'te çapraz derlenebilir.

Birçoğu ekstra bir iş meselesi olan bazı sınırlamalar vardır, ancak istisnalar ve bloklar gibi diğerleri 3. taraf projelerinde daha ciddi çalışmalara bağlıdır. Sınırlamalar:

• Yalnızca 32 bit - 64 bit devam ediyor

• Yalnızca statik bağlantı - dinamik bağlantı devam ediyor

• Kapatma / blok yok - libdispatch bunları Windows'ta destekleyene kadar

• İstisna yok - clang bunları Windows'da destekleyene kadar

• Eski stil GC yok - birisi umursana kadar ...

• Dahili: hiçbir vtable, gdb desteği yok, sadece düz malloc, preoptimizasyon yok - bunlardan bazıları 64 bitlik yapı altında mevcut olacak.

• Şu anda yamalı bir clang derleyicisi gereklidir; yama -fobjc-runtime = subj flag ekler

Proje mevcuttur Github ve orada da iplik karşılaşılan ilerleme ve bazı sorunları özetleyen Cocotron Grubu.



0

Visual Studio ortamından memnunsanız,

Küçük proje: gcc ile jGRASP Büyük proje: Cocotron

Emülatörler olduğunu duydum, ancak sadece Apple II Emulator'u http://virtualapple.org/ bulabildim . Oyunlarla sınırlı gibi görünüyor.


0

Her şeyden önce, GNUStep araçlarını unutun . Ne ProjectManager ne de ProjectCenter IDE olarak adlandırılamaz. Tüm saygıyla, GNUStep projesindeki adamlar 80'lerin sonunda ( NeXTSTEP ilk ortaya çıktığında) sıkışmış gibi görünüyor .

gayret

ctagsObjective-C'yi r771'den beri destekleyin (yayın öncesi 5.9 sürümünü seçtiğinizden --langmap=ObjectiveC:.m.hve komut satırına eklediğinizden emin olun , buraya bakın ), böylece iyi kod tamamlama / etiket gezinme sahip olursunuz.

İşte kısa var howto Vim Tagbar eklenti için Objective-C desteği ekleyerek üzerinde.

Emacs

Aynı şey etagsmodern Emacsen ile gönderilenler için de geçerlidir , böylece Emacs Objective C Modu ile başlayabilirsiniz . YASnippet yararlı şablonlar sağlayacaktır:

YASnippet objc-mode

ve temel etiket tabanlı kod tamamlamadan daha akıllı bir şey istiyorsanız , bu soruya bir göz atın .

Eclipse

CDTMakefile tabanlı projeleri destekler :

resim açıklamasını buraya girin

- böylece teknik olarak Objective-C projelerinizi kutudan çıkarabilirsiniz (Windows'da Cygwin veya MinGW araç zincirine ihtiyacınız olacak ). Tek sorun, saf bir C kodu olduğunu düşündüğüne karşı birçok hata bildirecek kod editörüdür (anında kod kontrolü kapatılabilir, ancak yine de ...). Doğru sözdizimi vurgulama istiyorsanız, ekleyebilir eclim sizin için Eclipse ve her ikisinin tüm iyi özelliklerinin keyfini Eclipse ve Vim (yukarıya bakınız).

Gelecek vaat eden başka bir Eclipse eklentisi Colorer , ancak henüz Objective-C'yi desteklemiyor. Yine de bir özellik isteği göndermekten çekinmeyin.

SlickEdit

SlickEdit , büyük bir IDE'nin diğer özelliklerinin yanı sıra Objective-C'yi de destekliyor . Öğrenmek oldukça karmaşık olsa da (Emacs kadar karmaşık değil), satın almanın sakıncası yoksa (fiyat oldukça uygun) bu en iyi seçeneğiniz olduğuna inanıyorum.

Ek olarak, bağımsız editöre alternatif olarak kullanılabilen bir Eclipse eklentisine sahiptir.

KDevelop

Söylentiye göre bir KDevelop yaması var (15 yaşında, ama kimin umurunda?). Şahsen KDevelop'un Emacsen'e göre özellik üstün olduğunu düşünmüyorum , bu yüzden denemekten rahatsız olmazdım.


Yukarıdaki araçlar Linux'taki Objective-C gelişimi için de geçerlidir, çünkü bahsedilen tüm araçlar az çok taşınabilirdir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.