Objective-C untuk Windows


230

Apa cara terbaik untuk menulis Objective-C pada platform Windows?

Cygwin dan gcc? Apakah ada cara saya bisa mengintegrasikan ini ke dalam Visual Studio?

Sejalan dengan itu - apakah ada saran tentang bagaimana menghubungkan dan menggunakan SDK Windows untuk sesuatu seperti ini. Ini binatang yang berbeda tapi saya tahu saya bisa menulis perakitan dan tautan di Windows DLL memberi saya aksesibilitas ke panggilan itu, tetapi saya tidak tahu bagaimana melakukan ini tanpa googling dan mendapatkan petunjuk sedikit demi sedikit.

Adakah yang mengetahui adanya sumber daring atau buku yang bagus untuk melakukan atau menjelaskan hal-hal semacam ini?


5
Jika Anda melakukannya untuk iOS, Anda dapat menggunakan iOS Build Environment oleh PM Baty ...
Cole Johnson

Jawaban:


146

Memperluas dua jawaban sebelumnya, jika Anda hanya menginginkan Objective-C tetapi tidak ada kerangka kerja Cocoa, maka gcc akan bekerja pada platform apa pun. Anda dapat menggunakannya melalui Cygwin atau mendapatkan MinGW. Namun, jika Anda menginginkan kerangka kerja Kakao, atau setidaknya bagian yang masuk akal, maka GNUStep dan Cocotron adalah taruhan terbaik Anda.

Cocotron mengimplementasikan banyak hal yang tidak dimiliki GNUStep, seperti CoreGraphics dan CoreData, meskipun saya tidak dapat menjamin seberapa lengkap implementasi mereka pada kerangka kerja tertentu. Tujuan mereka adalah untuk membuat Cocotron tetap up to date dengan versi terbaru OS X sehingga setiap program OS X dapat berjalan di Windows. Karena GNUStep biasanya menggunakan versi terbaru gcc, mereka juga menambahkan dukungan untuk Objective-C ++ dan banyak fitur Objective-C 2.0.

Saya belum menguji fitur-fitur itu dengan GNUStep, tetapi jika Anda menggunakan versi gcc yang cukup baru, Anda mungkin dapat menggunakannya. Saya tidak dapat menggunakan Objective-C ++ dengan GNUStep beberapa tahun yang lalu. Namun, GNUStep melakukan kompilasi dari hampir semua platform. Cocotron adalah proyek yang sangat mac-centric. Meskipun mungkin untuk mengkompilasinya di platform lain, ia datang file proyek XCode, bukan makefiles, jadi Anda hanya dapat mengkompilasi kerangka kerjanya di luar kotak pada OS X. Ini juga dilengkapi dengan instruksi tentang kompilasi aplikasi Windows pada XCode, tetapi tidak platform lain. Pada dasarnya, mungkin untuk mengatur lingkungan pengembangan Windows untuk Cocotron, tetapi tidak semudah mengatur satu untuk GNUStep, dan Anda akan melakukannya sendiri, jadi GNUStep jelas merupakan cara untuk pergi jika Anda mengembangkan pada Windows bukan hanya untuk Windows.

Untuk apa nilainya, Cocotron dilisensikan di bawah lisensi MIT, dan GNUStep dilisensikan di bawah LGPL.


1
Anda selalu dapat porting kerangka kakao yang bersifat open source. Contohnya adalah CoreFoundation.
Cole Johnson

Tidak semua sumber terbuka Core Foundation IS. Sejumlah besar adalah sumber tertutup.
uchuugaka

Aku tidak tahu mengapa orang ini mendapatkan jawaban terbaik, dia bahkan tidak mencoba hal-hal yang dia bicarakan. Mereka harus membuat lencana baru untuk jawaban bs. Jangan tersinggung @ Michael. Ini bacaan yang menarik.
Wolfpack'08

Jangan tersinggung, tetapi sebagai catatan, pada saat saya menulis jawaban ini, saya telah berjuang selama beberapa minggu untuk mengkompilasi Objective-C untuk Windows, dan telah mencoba menggunakan GNUStep dan Cocoatron. Saya akhirnya terpaksa menulis ulang proyek dalam C ++, karena beberapa bug kompiler pada saat itu, dan ivars tidak diinisialisasi ke 0 pada Windows. Saya memang membuat referensi ke "Saya belum menguji fitur-fitur itu", tetapi saya berbicara tentang fitur Objective-C 2.0 yang baru, yang hanya tersedia di platform Apple selama kurang dari setahun ketika jawaban ini ditulis, dan baru saja mendarat di GNUStep.
Michael Buckley

89

Anda dapat menggunakan Objective C di dalam lingkungan Windows. Jika Anda mengikuti langkah-langkah ini, itu akan berfungsi dengan baik:

  1. Kunjungi situs web GNUstep dan unduh GNUstep MSYS Subsystem(MSYS untuk GNUstep), GNUstep Core(Libraries for GNUstep), danGNUstep Devel
  2. Setelah mengunduh file-file ini, instal dalam urutan itu, atau Anda akan memiliki masalah dengan konfigurasi
  3. Arahkan ke C:\GNUstep\GNUstep\System\Library\Headers\Foundation1 dan pastikan Foundation.hada
  4. Buka prompt perintah dan jalankan gcc -vuntuk memeriksa apakah GNUstep MSYSsudah diinstal dengan benar (jika Anda mendapatkan file tidak ditemukan kesalahan, pastikan binfolder GNUstep MSYSada di Anda PATH)
  5. Gunakan program "Hello World" sederhana ini untuk menguji fungsionalitas GNUstep:

    #include <Foundation/Foundation.h>
    
    int main(void)
    {
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
        NSLog(@"Hello World!.");
        [pool drain];
     return;
    }
    
  6. Kembali ke command prompt dan cdke tempat Anda menyimpan program "Hello World" dan kemudian kompilasi: 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. Akhirnya, dari command prompt, ketik helloworlduntuk menjalankannya

Semua yang terbaik, dan bersenang-senang dengan Objective-C!


CATATAN :

  1. Saya menggunakan jalur instal default - sesuaikan baris perintah Anda sesuai
  2. Pastikan jalur folder Anda mirip dengan milik saya, jika tidak, Anda akan mendapatkan kesalahan

1
Instalasi yang disarankan ini tidak berfungsi pada PC saya karena saya sudah menginstal gcc yang saya gunakan untuk nasm. Jadi saya hanya dikoreksi gcc -o helloworld...untuk c:\gnustep\bin\gcc -o helloworld...dan bekerja. Alternatifnya adalah memodifikasi Variabel Lingkungan yang tidak saya lakukan karena saya hanya melihat-lihat Objective C. Terima kasih kepada teshguru untuk jawaban yang tepat.
Martin Berger

Pertimbangkan menghapus pemformatan kode di sekitar nama-nama hal. GNUstep MYSY bukan kode, itu hanya nama perangkat lunak. Jika Anda ingin sesuatu yang menonjol, mungkin mempertimbangkan untuk menanamkannya? Dan jika ada sesuatu yang terhubung ke sebuah tag, pertimbangkan untuk menggunakan pembatas tag, tetapi seharusnya tidak ada alasan untuk memasukkan nama yang tepat dalam batasan tag.
Wolfpack'08

ketika digunakan, c: \ gnustep \ bin \ gcc -o helloworld.exe helloworld.m -I / GNUstep / GNUstep / System / Library / Header -L / GNUstep / GNUstep / System / Library / Library -std = c99 -lobjc - lgnustep-base -fconstant-string-class = NSConstantString berfungsi dengan baik
Dalvik

13

Juga:

Cocotron adalah proyek sumber terbuka yang bertujuan untuk mengimplementasikan API Objective-C lintas-platform yang serupa dengan yang dijelaskan oleh dokumentasi Kakao Apple Inc. Ini termasuk AppKit, Foundation, runtime Objective-C dan API dukungan seperti CoreGraphics dan CoreFoundation.

http://www.cocotron.org/


4
Proyek Cocotron dirancang untuk dikompilasi silang dari XCode, tidak ditulis pada Windows dan dikompilasi di sana.
Dan Udey

2
ini bukan jawaban yang baik, saya bahkan tidak yakin mengapa OP memilih ini sebagai 'jawaban' karena CoCotron untuk Mac dan OP menginginkan solusi berbasis Windows.
cbrulak

Anda benar - saya menjadi sedikit terlalu bersemangat ketika saya membaca ini: "Tujuan umum adalah untuk memberikan dukungan lengkap pada platform apa pun yang layak, proyek ini dimaksudkan untuk menjadi se portable mungkin. Namun, sebagian besar pekerjaan saat ini adalah berfokus pada penyediaan dukungan untuk Microsoft Windows. Khususnya versi berbasis NT, 2000 hingga Vista. "
Luther Baker

13

WinObjC? Windows Bridge untuk iOS (sebelumnya dikenal sebagai 'Project Islandwood').

Windows Bridge untuk iOS (juga disebut sebagai WinObjC) adalah proyek open source Microsoft yang menyediakan lingkungan pengembangan Objective-C untuk Visual Studio / Windows. Selain itu, WinObjC menyediakan dukungan untuk kompatibilitas iOS API. Sementara rilis final akan terjadi nanti musim gugur ini (memungkinkan jembatan untuk mengambil keuntungan dari kemampuan tooling baru yang akan dikirimkan dengan Visual Studio 2015 Update mendatang),

Jembatan tersedia untuk komunitas sumber terbuka sekarang dalam kondisi saat ini. Antara sekarang dan musim gugur. Jembatan iOS sebagai proyek sumber terbuka di bawah lisensi MIT. Mengingat ambisi proyek, membuatnya mudah bagi pengembang iOS untuk membangun dan menjalankan aplikasi di Windows.

Salmaan Ahmed memiliki posting mendalam tentang Windows Bridge untuk iOS http://blogs.windows.com/buildingapps/2015/08/06/windows-bridge-for-ios-lets-open-this-up/ membahas kompiler, runtime, integrasi IDE, dan apa jembatan itu dan tidak. Yang terbaik dari semuanya, kode sumber untuk jembatan iOS aktif di GitHub sekarang.

Jembatan iOS mendukung aplikasi Windows 8.1 dan Windows 10 yang dibangun untuk arsitektur prosesor x86 dan x64, dan segera kami akan menambahkan optimisasi kompiler dan dukungan untuk ARM, yang menambahkan dukungan seluler.


9

Saya memiliki perasaan campur aduk tentang proyek Cocotron. Saya senang mereka merilis kode sumber dan berbagi tetapi saya tidak merasa bahwa mereka melakukan hal-hal dengan cara termudah.

Contohnya.
Apple telah merilis kode sumber ke runtime objektif-c , yang mencakup properti dan pengumpulan sampah. Proyek Cocotron memiliki implementasi runtime objektif-c sendiri. Kenapa repot-repot menduplikasi usahanya? Bahkan ada file Proyek Visual Studio yang dapat digunakan untuk membangun file objc.dll. Atau jika Anda benar-benar malas, Anda bisa menyalin file DLL dari instalasi Safari di Windows.

Mereka juga tidak repot-repot memanfaatkan CoreFoundation, yang juga bersumber terbuka oleh Apple. Saya memposting pertanyaan tentang ini tetapi tidak menerima jawaban.

Saya pikir solusi terbaik saat ini adalah mengambil kode sumber dari berbagai sumber (Apple, CocoTron, GnuStep) dan menggabungkannya bersama-sama dengan apa yang Anda butuhkan. Anda harus membaca banyak sumber tetapi hasilnya sepadan dengan hasilnya.


2
Maaf karena tidak menjawab pertanyaan Anda di grup, untuk meringkas: APSL menyebalkan dan runtime dan CF ada di bawah mereka.
Christopher Lloyd

1
Apa yang menyebalkan tentang APSL? ( opensource.apple.com/license/apsl ) Ini tidak invasif seperti GPL. Jika Anda mengubah kode yang tercakup maka Anda harus membuat kode itu tersedia. Kode yang dicakup akan berupa modifikasi apa pun yang Anda buat ke CoreFoundation misalnya, tetapi tidak akan menyertakan program yang sebenarnya. Anda juga perlu menandai modifikasi Anda dengan jelas. Ini adalah gangguan tetapi sebanding dengan penggunaan kode yang telah diuji oleh Apple, bukan?
Matthieu Cormier

8
Saya tidak berpikir Anda mengerti bagaimana terminasi bekerja, itu bukan sesuatu yang bisa mereka lakukan untuk semua orang sekaligus, kode dilisensikan di bawah syarat dan dapat digunakan di bawah ketentuan itu tanpa batas. Apa yang bisa terjadi adalah bahwa Apple dapat memilih individu / perusahaan yang mereka pikir telah melanggar lisensi. FSF sudah melakukan ini dengan pelanggaran GPL, Anda benar-benar berpikir Apple lebih ramah kepada pengembang daripada FSF? Jika menurut Anda persyaratannya tidak penting dan tidak berarti, saya yakin Anda dapat meyakinkan Apple legal untuk mengeluarkannya.
Christopher Lloyd

8
Perlu dicatat bahwa Apple bekerja dengan FSF tentang perubahan pada APSL dan bahwa FSF menganggap APSL Versi 2.0 sebagai lisensi perangkat lunak bebas. gnu.org/philosophy/apsl.html
Sean

3
Dari sudut pandang saya (sebagai seseorang yang telah berurusan dengan BSD, LGPL, MIT dan lisensi lainnya dalam produk berpemilik) Lisensi Apple KURANG membatasi daripada GPL - yang terus terang adalah rasa sakit di pantat. Jika saya bisa mendapatkan BSD, MIT, atau APSL, saya lebih suka bekerja dengan mereka daripada GPL.
Lloyd Sargent

8

Saya sadar ini adalah posting yang sangat lama, tetapi saya telah menemukan solusi yang baru saja tersedia dan memungkinkan hampir semua fitur Objective-C 2.0 pada platform Windows.

Dengan munculnya gcc 4.6, dukungan untuk fitur bahasa Objective-C 2.0 (blok, sintaksis titik, properti yang disintesis, dll) telah ditambahkan ke kompiler Objective-C (lihat catatan rilis untuk detail lengkap). Runtime mereka juga telah diperbarui agar berfungsi hampir identik dengan runtime Objective-C 2.0 milik Apple. Singkatnya ini berarti bahwa (hampir) program apa pun yang akan dikompilasi secara sah dengan Dentang pada Mac juga akan dikompilasi dengan gcc 4.6 tanpa modifikasi.

Sebagai catatan tambahan, satu fitur yang tidak tersedia adalah kamus / array / dll literal karena mereka semua hard-coded ke Dentang untuk menggunakan NSDictionary, NSArray, NSNumber, dll kelas Apple.

Namun, jika Anda senang hidup tanpa kerangka kerja Apple yang luas, Anda bisa. Seperti disebutkan dalam jawaban lain, GNUStep dan Cocotron menyediakan versi pustaka kelas Apple yang dimodifikasi, atau Anda dapat menulis sendiri (opsi pilihan saya).

MinGW adalah salah satu cara untuk mendapatkan GCC 4.6 di platform Windows, dan dapat diunduh dari situs web The MinGW . Pastikan ketika Anda menginstalnya Anda menyertakan instalasi C, C ++, Objective-C dan Objective-C ++. Sementara opsional, saya juga menyarankan menginstal lingkungan MSYS.

Setelah diinstal, sumber Objective-C 2.0 dapat dikompilasi dengan:

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

MinGW juga menyertakan dukungan untuk mengkompilasi aplikasi Windows GUI asli dengan -mwindowsflag. Sebagai contoh:

g++ -mwindows MyFile.cpp

Saya belum mencobanya, tapi saya bayangkan jika Anda membungkus kelas Objective-C Anda di Objective-C ++ pada lapisan tertinggi yang mungkin, Anda harus dapat berhasil menjalin Windows GUI C ++ asli dan Objective-C semua dalam satu Aplikasi Windows.



6

Jika Anda hanya ingin bereksperimen, ada kompiler Objective-C untuk .NET (Windows) di sini: qckapp


program ini tidak dapat dikompilasi dengan osc. # import <Foundation / Foundation.h> int main (int argc, const char * argv []) {NSAutoreleasePool * pool = [[Alokasi NSAutoreleasePool] init]; NSLog (@ "Pengujian ... \ n..1 \ n ... 2 \ n .... 3"); [kolam menguras]; return 0; }
KIRAN KJ

5

Anda bisa mendapatkan kompiler c objektif yang akan bekerja dengan Windows dan bermain bagus dengan Visual Studio 2008 \ 2010 di sini.

buka-c flite

Cukup unduh sumber terbaru. Anda tidak perlu membangun semua CF-Lite ada solusi yang disebut objc.sln. Anda perlu memperbaiki beberapa jalur sertakan tetapi kemudian akan membangunnya dengan baik. Bahkan ada proyek uji yang disertakan sehingga Anda dapat melihat beberapa file obyektif-c. M sedang dikompilasi dan bekerja di visual studio. Satu hal yang menyedihkan adalah ini hanya bekerja dengan Win32 bukan x64. Ada beberapa kode assembly yang perlu ditulis untuk x64 agar dapat mendukungnya.


Saya mengunduh dan menjalankan proyek ini menggunakan Visual Studio 2013 dan saya mendapatkan 30 contoh kesalahan ini. Kesalahan 64 kesalahan C2632: 'char' diikuti oleh 'bool' adalah ilegal C: \ opencflite-code-248-trunk \ include \ c99 \ stdbool.h 20 1 objc
Adam Mendoza

4

Upaya terbaru untuk mem-porting Objective C 2.0 ke Windows adalah proyek Subyektif .

Dari Readme:

Subyektif adalah upaya untuk membawa Objective C 2.0 dengan dukungan ARC ke Windows.

Proyek ini adalah fork dari objc4-532.2, Objective C runtime yang dikirimkan dengan OS X 10.8.5. Port dapat dikompilasi silang pada OS X menggunakan llvm-clang yang dikombinasikan dengan MinGW linker.

Ada batasan-batasan tertentu yang banyak di antaranya adalah masalah pekerjaan tambahan, sementara yang lain, seperti pengecualian dan penghalang, bergantung pada pekerjaan yang lebih serius dalam proyek pihak ketiga. Batasannya adalah:

• Hanya 32-bit - 64-bit sedang berlangsung

• Hanya penghubungan statis - tautan dinamis sedang berlangsung

• Tidak ada penutupan / blok - sampai libdispatch mendukungnya di Windows

• Tanpa pengecualian - hingga dentang mendukungnya di Windows

• Tidak ada GC gaya lama - sampai seseorang peduli ...

• Internal: tidak ada vtable, tidak ada dukungan gdb, hanya malloc biasa, tidak ada pra-optimasi - beberapa hal ini akan tersedia di bawah 64-bit build.

• Saat ini diperlukan kompiler dentang yang ditambal; tambalan menambahkan -fobjc-runtime = subj flag

Proyek ini tersedia di Github , dan ada juga utas di Cocotron Group yang menguraikan beberapa kemajuan dan masalah yang dihadapi.



0

Jika Anda nyaman dengan lingkungan Visual Studio,

Proyek kecil: jGRASP dengan gcc Proyek besar: Cocotron

Saya mendengar ada emulator, tetapi saya hanya dapat menemukan Apple II Emulator http://virtualapple.org/ . Sepertinya terbatas pada game.


0

Pertama-tama, lupakan alat GNUStep . Baik ProjectManager maupun ProjectCenter tidak dapat disebut IDE. Dengan segala hormat, sepertinya orang-orang dari proyek GNUStep terjebak di akhir 80-an (saat itulah NeXTSTEP pertama kali muncul).

Vim

ctagsmendukung Objective-C sejak r771 (pastikan untuk memilih versi pra-rilis 5.9 dan tambahkan --langmap=ObjectiveC:.m.hke baris perintah, lihat di sini ), sehingga Anda akan memiliki navigasi penyelesaian tag / tag yang layak.

Berikut adalah singkat howto pada menambahkan dukungan Objective-C untuk Vim Tagbar Plugin.

Emacs

Hal yang sama berlaku untuk etagsdikirimkan dengan Emacsen modern, sehingga Anda dapat mulai dengan Mode C Tujuan Emacs . YASnippet akan menyediakan templat yang berguna:

YASnippet objc-mode

dan jika Anda menginginkan sesuatu yang lebih cerdas daripada penyelesaian kode berbasis tag dasar , lihat pertanyaan ini .

Gerhana

CDT mendukung Makefileproyek berbasis:

masukkan deskripsi gambar di sini

- jadi secara teknis Anda dapat membangun proyek Objective-C Anda di luar kotak (pada Windows, Anda memerlukan Cygwin atau MinGW toolchain). Satu-satunya masalah adalah editor kode yang akan melaporkan banyak kesalahan terhadap apa yang dianggapnya adalah kode C murni (pengecekan kode on-the-fly dapat dimatikan, tetapi masih ...). Jika Anda ingin penyorotan sintaksis yang tepat, Anda dapat menambahkan Eclim ke Eclipse Anda dan menikmati semua fitur baik Eclipse dan Vim (lihat di atas).

Plugin Eclipse yang menjanjikan lainnya adalah Colorer , tetapi belum mendukung Objective-C. Jangan ragu untuk mengajukan permintaan fitur.

SlickEdit

SlickEdit , antara fitur-fitur lainnya dari IDE besar, apakah dukungan Objective-C. Meskipun cukup rumit untuk dipelajari (tidak serumit Emacs), saya percaya ini adalah pilihan terbaik Anda asalkan Anda tidak keberatan membelinya (harganya cukup terjangkau).

Selain itu, ia memiliki plugin Eclipse yang dapat digunakan sebagai alternatif untuk editor yang berdiri sendiri.

KDevelop

Rumor mengatakan ada patch KDevelop (15 tahun, tapi siapa yang peduli?). Saya pribadi tidak berpikir KDevelop lebih unggul daripada Emacsen , jadi saya tidak akan repot mencobanya.


Hal di atas juga berlaku untuk pengembangan Objective-C di Linux, karena semua alat yang disebutkan lebih portabel.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.