Objective-C для Windows


230

Який найкращий спосіб написати Objective-C на платформі Windows?

Cygwin та gcc? Чи є спосіб я якось інтегрувати це у Visual Studio?

З цього приводу - чи є якісь пропозиції щодо того, як зв’язати і використовувати пакет SDK для Windows для чогось подібного. Це інший звір, але я знаю, що я можу написати збірку та зв’язатись у DLL-файлах Windows, що дасть мені доступ до цих дзвінків, але я не знаю, як це зробити, не гугляючи та отримуючи вказівки до деталей.

Хтось знає про хороший інтернет-або книжковий ресурс, щоб зробити чи пояснити подібні речі?


5
Якщо ви просто робите це для iOS, ви можете використовувати середовище збирання iOS від PM Baty ...
Cole Johnson

Відповіді:


146

Розширюючись на два попередні відповіді, якщо ви просто хочете Objective-C, але не будь-яку з какао-каркасів, gcc буде працювати на будь-якій платформі. Ви можете використовувати його через Cygwin або отримати MinGW. Однак якщо ви хочете, щоб какаові рамки або хоча б розумний їхній підмножина, то GNUStep та Cocotron - найкращі ставки.

Cocotron реалізує багато матеріалів, яких немає у GNUStep, таких як CoreGraphics та CoreData, хоча я не можу порушити, наскільки повною є їх реалізація на певних рамках. Їх мета - оновити Cocotron в курсі останньої версії OS X, щоб будь-яка життєздатна програма X X могла працювати в Windows. Оскільки GNUStep зазвичай використовує останню версію gcc, вони також додають у підтримку Objective-C ++ та безліч функцій Objective-C 2.0.

Я не перевіряв ці функції з GNUStep, але якщо ви використовуєте досить нову версію gcc, можливо, ви зможете їх використовувати. Мені не вдалося використати Objective-C ++ з GNUStep кілька років тому. Однак GNUStep компілює практично з будь-якої платформи. Cocotron - дуже мак-орієнтований проект. Хоча, мабуть, можливо компілювати його на інших платформах, це файли проекту XCode, а не файли, тому ви можете компілювати лише його рамки з вікна в OS X. Також він постачається з інструкціями щодо компіляції програм Windows на XCode, але не будь-яка інша платформа. В основному, можливо, можна налаштувати середовище розробки Windows для Cocotron, але це не так просто, як налаштувати GNUStep, і ви будете самостійно, тому GNUStep - це безперечно шлях, якщо ви розвиваєтеся на Windows, на відміну від Windows.

Для чого це варто, Cocotron має ліцензію MIT, а GNUStep - ліцензію LGPL.


1
Ви завжди можете перенести какао-кадри, які є відкритим кодом. Приклад - CoreFoundation.
Коул Джонсон

Не всі програми Core Foundation IS з відкритим кодом. Величезна кількість є закритим джерелом.
uchuugaka

Я не знаю, чому цей хлопець отримав найкращу відповідь, що навіть не спробував речі, про які він говорив. Вони повинні скласти новий знак для відповідей на біс. Без образи @michael. Це цікаве прочитання.
Wolfpack'08

Жодного правопорушення не брали, але для запису, під час написання цієї відповіді я кілька тижнів намагався скласти Objective-C для Windows, і намагався перейти як до GNUStep, так і до Cocoatron. Зрештою, я був змушений переписати проект на C ++, через деякі помилки компілятора в той час, і ivars не ініціалізований на 0 в Windows. Я посилався на "Я не перевіряв ці функції", але говорив про нові функції Objective-C 2.0, які були доступні лише на платформах Apple менше року, коли ця відповідь була написана, і щойно приземлився в GNUStep.
Майкл Баклі

89

Ви можете використовувати Objective C всередині Windows. Якщо ви дотримуєтесь цих кроків, це повинно працювати добре:

  1. Відвідайте веб-сайт GNUstep та завантажте GNUstep MSYS Subsystem(MSYS для GNUstep), GNUstep Core(Бібліотеки для GNUstep) таGNUstep Devel
  2. Після завантаження цих файлів встановіть у такому порядку, інакше у вас виникнуть проблеми з конфігурацією
  3. Перейдіть до пункту C:\GNUstep\GNUstep\System\Library\Headers\Foundation1 та переконайтесь, що Foundation.hіснує
  4. Відкрийте командний рядок і запустіть, gcc -vщоб перевірити, GNUstep MSYSчи правильно встановлено (якщо у вас файл не знайдено помилки, переконайтеся, що binпапка GNUstep MSYSу вашій PATH)
  5. Використовуйте цю просту програму "Hello World" для перевірки функціональності GNUstep:

    #include <Foundation/Foundation.h>
    
    int main(void)
    {
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
        NSLog(@"Hello World!.");
        [pool drain];
     return;
    }
  6. Поверніться до командного рядка та cdтуди, де ви зберегли програму "Hello World", а потім компілюйте її: 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. Нарешті, у командному рядку введіть його helloworldдля запуску

Все найкраще та весело провести час з Objective-C!


ПРИМІТКИ :

  1. Я використовував шлях установки за замовчуванням - відповідно налаштуйте ваш командний рядок
  2. Переконайтеся, що шлях вашого папки аналогічний моєму, інакше ви отримаєте помилку

1
Ця запропонована установка не працювала на моєму ПК, тому що я вже встановив gcc, який використовував для nasm. Тому я просто виправив gcc -o helloworld...до c:\gnustep\bin\gcc -o helloworld...і вона працювала. Альтернативою було б змінити змінні середовища, що я не робив, оскільки я просто бачив ціль C. Завдяки teshguru за точку відповіді.
Мартін Бергер

Подумайте про видалення форматування коду навколо назв речей. GNUstep MYSY - не код, це лише назва програмного забезпечення. Якщо ви хочете, щоб щось виділялося, можливо, подумайте про його зміцнення? І якщо щось підключається до тегу, подумайте про використання роздільників тегів, але не повинно бути ніяких причин для введення власних імен у розділи тегів.
Wolfpack'08

при використанні yhis c: \ gnustep \ bin \ gcc -o helloworld.exe helloworld.m -I / GNUstep / GNUstep / Система / Бібліотека / заголовки -L / GNUstep / GNUstep / Система / Бібліотека / Бібліотеки -std = c99 -lobjc - lgnustep-base -fconstant-string-class = NSConstantString це працює на мене
Далвік

13

Також:

Cocotron - це проект з відкритим кодом, який має на меті впровадження міжплатформенного API Objective-C, аналогічного описаному в документації Apple Inc. Сюди входять програми API AppKit, Foundation, Objective-C та API підтримки, такі як CoreGraphics та CoreFoundation.

http://www.cocotron.org/


4
Проект Cocotron призначений для крос-компіляції з XCode, а не записаний у Windows та складений там.
Ден Удей

2
це не є гарною відповіддю, я навіть не впевнений, чому ОП обрала це як "відповідь", тому що CoCotron призначений для Mac, а ОП хоче рішення на базі Windows.
cbrulak

Ви маєте рацію - я трохи надто схвильований, прочитавши це: "Загальна мета - надати повну підтримку на будь-якій життєздатній платформі. Проект повинен бути максимально портативним. Однак, більшість робіт у цей час є зосереджена на підтримці Microsoft Windows. Зокрема, на базі NT версій, від 2000 до Vista ".
Лютер Бейкер

13

WinObjC? Windows Bridge для iOS (раніше відомий як «Project Islandwood»).

Windows Bridge для iOS (також званий WinObjC) - це проект із відкритим кодом Microsoft, який забезпечує середовище розробки Objective-C для Visual Studio / Windows. Крім того, WinObjC забезпечує підтримку сумісності API iOS. Хоча остаточний реліз відбудеться пізніше цієї осені (що дозволить мосту скористатися новими можливостями інструментарію, які поставляться з майбутнім оновленням Visual Studio 2015)

Міст доступний для спільноти з відкритим кодом у теперішньому стані. Між тепер і падінням. Міст iOS як проект з відкритим кодом за ліцензією MIT. Враховуючи амбіції проекту, полегшує розробникам iOS створення та запуск програм у Windows.

У Salmaan Ahmed є поглиблена публікація на мосту Windows для iOS http://blogs.windows.com/buildingapps/2015/08/06/windows-bridge-for-ios-lets-open-this-up/, де обговорюється компілятор, час виконання, інтеграція IDE, а що таке міст, а що ні. Найкраще, що вихідний код для моста iOS зараз на GitHub.

Міст iOS підтримує як програми Windows 8.1, так і Windows 10, побудовані для архітектур процесорів x86 та x64, і незабаром ми додамо оптимізацію компілятора та підтримку ARM, що додасть мобільну підтримку.


9

У мене неоднозначні почуття щодо проекту Cocotron. Я радий, що вони випускають вихідний код та діляться спільним доступом, але я не відчуваю, що вони роблять речі найпростішим способом.

Приклади.
Apple випустила вихідний код до програми c-time , що включає властивості та збирання сміття. Однак проект Cocotron має власну реалізацію цілі виконання. Навіщо турбуватися дублювати зусилля? Існує навіть файл Visual Studio Project, який можна використовувати для створення файлу objc.dll. Або якщо ви дійсно ліниві, ви можете просто скопіювати файл DLL з інсталяції Safari на Windows.

Вони також не покладалися на використання CoreFoundation, який також є відкритим джерелом Apple. Я розмістив питання з цього приводу, але не отримав відповіді.

Я думаю, що найкращим рішенням на даний момент є взяття вихідного коду з декількох джерел (Apple, CocoTron, GnuStep) і об'єднати його разом з тим, що вам потрібно. Вам доведеться прочитати багато джерела, але це буде варте кінцевого результату.


2
Вибачте за те, що не відповіли на ваше запитання в групі, підводячи підсумок: APSL смокче, і час виконання і CF під ними.
Крістофер Ллойд

1
Що смокче про APSL? ( opensource.apple.com/license/apsl ) Це не інвазивно, як GPL. Якщо ви змінюєте код, що охоплюється, ви повинні зробити його доступним. Захований код буде будь-якими модифікаціями, які ви вносите, наприклад, в CoreFoundation, але не включатимете фактичну програму. Вам також потрібно чітко позначити свої зміни. Це неприємність, але варто використовувати компроміс із використанням високо перевіреного коду Apple, чи не так?
Матьє Корм'є

8
Я не думаю, що ви розумієте, як працює припинення, це не те, що вони можуть зробити всім одночасно, код ліцензується згідно з умовами та може бути використаний на цих умовах безстроково. Що може статися, що Apple може виділити осіб / компаній, які, на їхню думку, порушили ліцензію. FSF вже робить це з порушеннями GPL, ви дійсно вважаєте, що Apple більш сприятлива для розробників, ніж FSF? Якщо ви вважаєте, що умови є несуттєвими та безглуздими, я впевнений, що ви можете переконати Apple, що він легально вийняв їх.
Крістофер Ллойд

8
Слід зазначити, що Apple працювала з FSF над змінами в APSL і що FSF розглядає версію APSL версії 2.0 як ліцензію на вільне програмне забезпечення. gnu.org/philosophy/apsl.html
Шон

3
З моєї точки зору (як хтось, хто мав справу з BSD, LGPL, MIT та іншими ліцензіями на власний продукт) Ліцензія Apple менша обмежувальна, ніж GPL - що, відверто кажучи, болить зад. Якщо я можу отримати BSD, MIT або APSL, я б скоріше працював з тими, ніж GPL.
Ллойд Сарджент

8

Я знаю, що це дуже стара публікація, але я знайшов рішення, яке стало доступним лише нещодавно І дозволяє майже всі функції Objective-C 2.0 на платформі Windows.

З появою gcc 4.6 до компілятора Objective-C була додана підтримка мовних функцій Objective-C 2.0 (блоки, крапковий синтаксис, синтезовані властивості тощо) (див . Примітки до випуску для отримання детальної інформації). Їх час роботи також було оновлено, щоб вони майже однаково працювали з власною програмою Apple Objective-C 2.0. Якщо коротко, це означає, що (майже) будь-яка програма, яка буде законно компілюватися з Clang на Mac, також буде компілювати з gcc 4.6 без змін.

Як бічна примітка, однією з особливостей, яка недоступна, є словник / масив / тощо літерали, оскільки всі вони жорстко закодовані в Clang для використання класів NSDictionary, NSArray, NSNumber Apple тощо.

Однак якщо ви раді жити без обширних рамків Apple, ви можете. Як зазначається в інших відповідях, GNUStep та Cocotron надають модифіковані версії бібліотек класів Apple, або ви можете написати власну (мій бажаний варіант).

MinGW - це один із способів отримати GCC 4.6 на платформі Windows, і його можна завантажити з веб-сайту The MinGW . Переконайтеся, що при його встановленні ви включаєте встановлення C, C ++, Objective-C і Objective-C ++. Хоча я є необов’язковим, я також пропоную встановити середовище MSYS.

Після встановлення джерело Objective-C 2.0 можна компілювати з:

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

MinGW також включає підтримку компіляції власних програм GUI для Windows із -mwindowsпрапором. Наприклад:

g++ -mwindows MyFile.cpp

Я ще не намагався цього зробити, але думаю, якщо ви обмотаєте свої класи Objective-C в Objective-C ++ на найвищому можливому шарі, ви повинні мати змогу успішно переплести рідний інтерфейс Windows GUI C ++ і Objective-C в одному додатку Windows.



6

Якщо ви просто хочете експериментувати, тут є компілятор Objective-C для .NET (Windows): qckapp


ця програма не змогла компілювати з osc. # import <Foundation / Foundation.h> int main (int argc, const char * argv []) {NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog (@ "Тестування ... \ n..1 \ n ... 2 \ n .... 3"); [злив у басейн]; повернути 0; }
KIRAN KJ

5

Ви можете отримати об'єктивний компілятор c, який буде працювати з Windows і чудово грати з Visual Studio 2008 \ 2010 тут.

відкритий-ф фліт

Просто завантажте останнє джерело. Вам не потрібно будувати всі CF-Lite, є рішення, яке називається objc.sln. Вам потрібно буде виправити декілька шляхів включення, але тоді це буде просто добре. Включений навіть тестовий проект, щоб ви могли бачити, як збираються і працюють у візуальній студії деякі об'єктивні файли .m. Сумно, що це працює лише з Win32, а не з x64. Існує якийсь код складання, який потрібно було б написати для x64, щоб це підтримати.


Я завантажив і запустив цей проект за допомогою Visual Studio 2013 і отримав 30 примірників цієї помилки. Помилка 64 помилка C2632: 'char' з подальшим 'bool' є незаконним C: \ opencflite-code-248-trunk \ include \ c99 \ stdbool.h 20 1 objc
Адам Мендоса

4

Нещодавня спроба перенести Objective C 2.0 в Windows - це Суб'єктивний проект.

З Readme:

Subjective - це спроба залучити Objective C 2.0 з підтримкою ARC до Windows.

Цей проект є роздрібною формою objc4-532.2, об'єктивним часом виконання C, що постачається з ОС X 10.8.5. Порт може бути перекладений на OS X за допомогою llvm-clang у поєднанні з лінкером MinGW.

Існують певні обмеження, багато з яких є справою додаткової роботи, а інші, такі як винятки та блоки, залежать від більш серйозної роботи в сторонніх проектах. Обмеженнями є:

• Тільки 32-розрядні - 64-розрядні

• Лише статичне з'єднання - відбувається динамічне з'єднання

• Ніяких закриттів / блоків - поки libdispatch не підтримує їх у Windows

• Немає винятків - доки clang не підтримує їх у Windows

• Немає старовинного стилю GC - поки хтось не піклується ...

• Внутрішнє середовище: відсутність vtables, відсутність підтримки gdb, просто звичайний malloc, відсутність попередніх оптимізацій - деякі з цих речей будуть доступні під 64-бітною збіркою.

• Наразі потрібен виправлений компілятор кланг; патч додає прапор -fobjc-runtime = subj

Проект доступний на Github , а також у Cocotron Group є нитка, яка окреслює деякий прогрес та проблеми, що виникають.



0

Якщо вам подобається середовище Visual Studio,

Невеликий проект: jGRASP з gcc Великий проект: Cocotron

Я чув, що є емулятори, але я міг знайти лише Емулятор Apple II http://virtualapple.org/ . Це схоже на обмеженість ігор.


0

Перш за все, забудьте про інструменти GNUStep . Ні ProjectManager, ні ProjectCenter не можна назвати IDE. З усією повагою, схоже, що хлопці з проекту GNUStep застрягли в кінці 80-х (саме тоді вперше з'явився NeXTSTEP ).

Вим

ctagsпідтримує Objective-C з r771 (не забудьте вибрати попередню версію 5.9 версії та додати --langmap=ObjectiveC:.m.hдо командного рядка, дивіться тут ), тож ви матимете гідне завершення коду / навігацію по тегах.

Ось короткий посібник щодо додавання підтримки Objective-C у плагін тему Vim.

Emacs

Те ж саме відноситься і до etagsпоставляється із сучасною Emacsen, так що ви можете почати з Emacs Objective Mode C . YASnippet надасть корисні шаблони:

YASnippet objc-режим

і якщо ви хочете чогось розумнішого, ніж базовий код на основі тегів , погляньте на це питання .

Затемнення

CDT підтримує Makefileпроекти на базі:

введіть тут опис зображення

- настільки технічно ви можете будувати ваші проекти Objective-C нестандартно (у Windows вам знадобиться інструментальна мережа Cygwin або MinGW ). Єдина проблема - це редактор коду, який повідомить про чимало помилок проти того, що, на його думку, є чистим кодом C (перевірку коду на ходу можна вимкнути, але все ж ...). Якщо ви хочете правильно виділити синтаксис, ви можете додати Eclim до свого Eclipse і насолоджуватися всіма хорошими характеристиками Eclipse та Vim (див. Вище).

Інший перспективний плагін Eclipse - це Colorer , але він ще не підтримує Objective-C. Хоча ви можете подати запит на функцію.

SlickEdit

SlickEdit , серед інших особливостей великого IDE, робить підтримку Objective-C. Хоча вчитися досить складно (не так складно, як Emacs), але я вважаю, що це найкращий варіант, якщо ви не заперечуєте проти його придбання (ціна є цілком доступною).

Крім того, він має плагін Eclipse, який можна використовувати як альтернативу автономному редактору.

KDevelop

Подейкують, що існує патч KDevelop (15 років, але кого це хвилює?) Я особисто не думаю, що KDevelop є кращим для функцій порівняно з Emacsen , тому я б не намагався це намагатися.


Сказане також стосується розробки Objective-C в Linux, оскільки всі згадані інструменти є більш-менш портативними.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.