Objective-C для Windows

Как лучше всего написать Objective-C на платформе Windows?

Cygwin и gcc? Есть ли способ как-то интегрировать это в Visual Studio?

В связи с этим - есть ли какие-либо предложения относительно того, как связать и использовать Windows SDK для чего-то вроде этого. Это другой зверь, но я знаю, что могу писать сборку и ссылаться на библиотеки DLL Windows, что дает мне доступ к этим вызовам, но я не знаю, как это сделать без поиска в Google и получения разрозненных указаний.

Кто-нибудь знает о хороших онлайн-ресурсах или книжных ресурсах, где можно делать или объяснять подобные вещи?


person Luther Baker    schedule 11.09.2008    source источник
comment
Если вы просто делаете это для iOS, вы можете использовать среду сборки iOS от П. М. Бати ...   -  person Cole Johnson    schedule 05.01.2013


Ответы (13)


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

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

Я не тестировал эти функции с GNUStep, но если вы используете достаточно новую версию gcc, вы, возможно, сможете их использовать. Несколько лет назад мне не удавалось использовать Objective-C ++ с GNUStep. Однако GNUStep компилируется практически с любой платформы. Cocotron - очень ориентированный на Mac проект. Хотя, вероятно, его можно скомпилировать на других платформах, он поставляется с файлами проекта XCode, а не с make-файлами, поэтому вы можете скомпилировать его фреймворки из коробки только на OS X. Он также поставляется с инструкциями по компиляции приложений Windows в XCode, но не с любая другая платформа. В принципе, вероятно, можно настроить среду разработки Windows для Cocotron, но это не так просто, как настроить ее для GNUStep, и вы будете сами по себе, поэтому GNUStep определенно подходит, если вы разрабатываете Windows, а не только для Windows.

Как бы то ни было, Cocotron имеет лицензию MIT, а GNUStep - лицензию LGPL.

person Michael Buckley    schedule 26.09.2008
comment
Вы всегда можете перенести фреймворки Cocoa с открытым исходным кодом. Примером является CoreFoundation. - person Cole Johnson; 26.11.2012
comment
Не все Core Foundation имеют открытый исходный код. Огромная сумма с закрытым исходным кодом. - person uchuugaka; 28.12.2013
comment
X'D Я не знаю, почему этот парень получил лучший ответ, он даже не пробовал то, о чем говорит. Им следует сделать новый значок для ответов на вопросы BS. Без обид, @michael. Это интересное чтение. - person Wolfpack'08; 13.05.2015
comment
Без обид, но для записи, в то время, когда я писал этот ответ, я в течение нескольких недель пытался скомпилировать Objective-C для Windows и пытался использовать как GNUStep, так и Cocoatron. В конце концов я был вынужден переписать проект на C ++ из-за некоторых ошибок компилятора в то время, а ivars не был инициализирован 0 в Windows. Я сослался на то, что я не тестировал эти функции, но я говорил о новых на тот момент функциях Objective-C 2.0, которые были доступны на платформах Apple менее года, когда был написан этот ответ, и только что приземлился в GNUStep. - person Michael Buckley; 13.05.2015

Вы можете использовать Objective C в среде Windows. Если вы выполните следующие действия, все должно работать нормально:

  1. Посетите веб-сайт GNUstep и загрузите GNUstep MSYS Subsystem (MSYS для GNUstep), GNUstep Core (библиотеки для GNUstep) , и GNUstep Devel
  2. После загрузки этих файлов устанавливайте в указанном порядке, иначе у вас возникнут проблемы с настройкой.
  3. Перейдите к C:\GNUstep\GNUstep\System\Library\Headers\Foundation 1 и убедитесь, что 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. Убедитесь, что ваш путь к папке похож на мой, иначе вы получите сообщение об ошибке.
person teshguru    schedule 24.03.2012
comment
Эта предлагаемая установка не сработала на моем ПК, потому что я уже установил gcc, который я использовал для nasm. Я просто исправил gcc -o helloworld... на c:\gnustep\bin\gcc -o helloworld..., и это сработало. Альтернативой было бы изменение переменных среды, чего я не делал, так как я просто видел цель C. Спасибо teshguru за точный ответ. - person Martin Berger; 04.09.2012
comment
Попробуйте удалить форматирование кода вокруг названий вещей. GNUstep MYSY - это не код, это просто название программы. Если вы хотите что-то выделяться, возможно, подумайте о том, чтобы придать этому смелости? И если что-то подключается к тегу, рассмотрите возможность использования разделителей тегов, но не должно быть никаких причин для добавления собственных имен в разделители тегов. - person Wolfpack'08; 13.05.2015
comment
при использовании его 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 он работает для меня - person Dalvik; 20.08.2015

Также:

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

http://www.cocotron.org/

person amrox    schedule 11.09.2008
comment
Проект Cocotron предназначен для кросс-компиляции из XCode, а не написан в Windows и скомпилирован там. - person Dan Udey; 26.09.2008
comment
это не лучший ответ, я даже не уверен, почему OP выбрал это как «ответ», потому что CoCotron предназначен для Mac, а OP хочет решение на основе Windows. - person cbrulak; 03.04.2009
comment
Вы правы - я был слишком взволнован, когда прочитал это: общая цель - обеспечить полную поддержку на любой жизнеспособной платформе, проект должен быть максимально переносимым. Однако большая часть работы в настоящее время сосредоточена на обеспечении поддержки Microsoft Windows. В частности, версии на базе NT, от 2000 до Vista. - person Luther Baker; 20.06.2009

WinObjC? Windows Bridge для iOS (ранее известный как «Project Islandwood»).

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

Мост доступен сообществу разработчиков ПО с открытым исходным кодом в его текущем состоянии. Между настоящим моментом и падением. Мост iOS как проект с открытым исходным кодом под лицензией MIT. Учитывая амбиции проекта, облегчить разработчикам iOS создание и запуск приложений в Windows.

Салмаан Ахмед опубликовал подробный пост о Windows Bridge для 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, которая добавит поддержку мобильных устройств.

person Lee Stott    schedule 10.08.2015

У меня смешанные чувства по поводу проекта Cocotron. Я рад, что они выпускают исходный код и делятся друг с другом, но я не думаю, что они делают что-то самым простым способом.

Примеры.
Apple выпустила исходный код для среды выполнения objective-c runtime, который включает свойства и сборку мусора. Однако в проекте Cocotron есть собственная реализация среды выполнения objective-c. Зачем дублировать усилия? Существует даже файл проекта Visual Studio, который можно использовать для создания файла objc.dll. Или, если вы очень ленивы, вы можете просто скопировать файл DLL из установки Safari в Windows.

Они также не удосужились использовать CoreFoundation, исходный код которого также открыт Apple. Я разместил об этом но ответа не получил.

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

person Matthieu Cormier    schedule 05.11.2009
comment
Извините, что не ответил на ваш вопрос о группе, резюмирую: APSL - отстой, и среда выполнения, и CF находятся под ними. - person Christopher Lloyd; 11.11.2009
comment
Что отстой в APSL? (opensource.apple.com/license/apsl) Это не агрессивно, как GPL . Если вы изменяете покрываемый код, вы должны сделать этот код доступным. Защищенный код - это любые изменения, которые вы вносите, например, в CoreFoundation, но не будет включать вашу фактическую программу. Также необходимо четко обозначить свои модификации. Это неприятно, но стоит того, чтобы использовать тщательно проверенный код Apple, не так ли? - person Matthieu Cormier; 12.11.2009
comment
В долгосрочной перспективе хлопоты, связанные с соблюдением условий лицензии, и риск прекращения действия лицензии не стоят кода. - person Christopher Lloyd; 15.11.2009
comment
Для удобства других читателей здесь кратко изложено то, о чем говорит Крис (gnu.org/ философия / исторический-apsl.html). Я думаю, что риск того, что Apple прекратит действие лицензии, стоит использования кода. Негативная реакция на такие действия не позволит им сделать это, за исключением крайне маловероятных случаев. I.E. Apple покупает Oracle, и лицензия аннулируется. - person Matthieu Cormier; 17.11.2009
comment
Я не думаю, что вы понимаете, как работает прекращение действия, это не то, что они могут сделать со всеми сразу, код лицензирован в соответствии с условиями и может использоваться в соответствии с этими условиями на неопределенный срок. Что может случиться, так это то, что Apple может выделить лиц / компании, которые, по их мнению, нарушили лицензию. FSF уже делает это с нарушениями GPL. Вы действительно думаете, что Apple более дружелюбна к разработчикам, чем FSF? Если вы думаете, что условия несущественны и бессмысленны, я уверен, что вы сможете убедить юридическую компанию Apple просто отменить их. - person Christopher Lloyd; 02.12.2009
comment
Следует отметить, что Apple работала с FSF над изменениями в APSL и что FSF считает APSL Version 2.0 лицензией на свободное программное обеспечение. gnu.org/philosophy/apsl.html - person Sean; 18.04.2011
comment
С моей точки зрения (как человека, который имел дело с BSD, LGPL, MIT и другими лицензиями в проприетарном продукте) лицензия Apple МЕНЬШЕ ограничительна, чем GPL, что, честно говоря, является головной болью. Если я могу получить BSD, MIT или APSL, я лучше буду работать с ними, чем с GPL. - person Lloyd Sargent; 15.11.2012
comment
Что касается прекращения действия, нарушения GPL, о которых я читал, были вопиющими (люди удаляют заголовки и т. Д.). Единственное, что, как я вижу, может вам не понравиться, это то, что он требует, чтобы вы документировали в коде вносимые вами изменения. Мне кажется, это хорошая практика программирования. Кроме этого, я не понимаю, что насчет APSL, которое вы считаете обременительным? У нее меньше подводных камней, чем у GPL! - person Lloyd Sargent; 15.11.2012

Я знаю, что это очень старый пост, но я нашел решение, которое стало доступным только недавно, И включает почти все функции 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 для использования классов Apple NSDictionary, NSArray, NSNumber и т. Д.

Однако, если вы счастливы жить без обширных фреймворков Apple, вы можете это сделать. Как отмечалось в других ответах, GNUStep и Cocotron предоставляют модифицированные версии библиотек классов Apple, или вы можете написать свои собственные (мой предпочтительный вариант).

MinGW - это один из способов получить GCC 4.6 на платформе Windows, и его можно загрузить с веб-сайта 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 также включает поддержку компиляции приложений Windows с собственным графическим интерфейсом пользователя с флагом -mwindows. Например:

g++ -mwindows MyFile.cpp

Я еще не пробовал это сделать, но полагаю, если вы обернете свои классы Objective-C в Objective-C ++ на максимально возможном уровне, вы сможете успешно объединить собственный графический интерфейс Windows C ++ и Objective-C в одном приложении Windows.

person Ephemera    schedule 12.10.2012

Посмотрите WinObjC:

https://github.com/Microsoft/WinObjC

Это официальный проект Microsoft с открытым исходным кодом, который интегрируется с Visual Studio + Windows.

person James Ko    schedule 03.11.2015

Если вы просто хотите поэкспериментировать, здесь есть компилятор Objective-C для .NET (Windows): qckapp

person user397362    schedule 20.07.2010
comment
эту программу не удалось скомпилировать с помощью 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; } - person KIRAN K J; 29.06.2011

Здесь вы можете получить объективный компилятор c, который будет работать с Windows и хорошо работать с Visual Studio 2008 \ 2010.

open-c flite

Просто скачайте последний исходный код. Вам не нужно собирать CF-Lite полностью, есть решение под названием objc.sln. Вам нужно будет исправить несколько путей включения, но тогда все будет нормально. Включен даже тестовый проект, так что вы можете увидеть некоторые файлы .m .m, компилируемые и работающие в Visual Studio. Печально то, что он работает только с Win32, а не с x64. Есть некоторый ассемблерный код, который необходимо написать для x64, чтобы он поддерживал это.

person Aaron Stainback    schedule 27.08.2011
comment
Я загрузил и запустил этот проект с помощью Visual Studio 2013 и получил 30 экземпляров этой ошибки. Ошибка 64 ошибка C2632: недопустимый символ 'char', за которым следует 'bool' C: \ opencflite-code-248-trunk \ include \ c99 \ stdbool.h 20 1 objc - person Adam Mendoza; 14.09.2014

Недавняя попытка перенести Objective C 2.0 в Windows - это проект Subjective.

Из ознакомительных сведений:

Субъективно - это попытка перенести Objective C 2.0 с поддержкой ARC в Windows.

Этот проект является форком objc4-532.2, среды выполнения Objective C, которая поставляется с OS X 10.8.5. Порт может быть скомпилирован в OS X с помощью llvm-clang в сочетании с компоновщиком MinGW.

Существуют определенные ограничения, многие из которых требуют дополнительной работы, в то время как другие, такие как исключения и блоки, зависят от более серьезной работы в сторонних проектах. Ограничения:

• Только 32-разрядная версия - 64-разрядная версия находится в стадии разработки.

• Только статическое связывание - динамическое связывание выполняется.

• Никаких закрытий / блоков - до тех пор, пока libdispatch не поддержит их в Windows.

• Без исключений - пока clang не поддерживает их в Windows.

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

• Внутреннее: нет vtables, нет поддержки gdb, просто malloc, без предварительной оптимизации - некоторые из этих вещей будут доступны в 64-битной сборке.

• В настоящее время требуется исправленный компилятор clang; патч добавляет флаг -fobjc-runtime = subj

Проект доступен на Github, а также есть группы thread в группе Cocotron с описанием некоторых достигнутых успехов и проблем.

person insys    schedule 01.06.2014

Получите здесь GNUStep

Получите здесь MINGW

Установите MINGW Установите GNUStep, затем проверьте

person raksa    schedule 20.12.2014

Если вам нравится среда Visual Studio,

Небольшой проект: jGRASP с gcc Большой проект: Cocotron

Я слышал, что есть эмуляторы, но смог найти только эмулятор Apple II http://virtualapple.org/. Похоже, ограничено играми.

person Cloud Cho    schedule 28.02.2016

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

Vim

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

Вот краткое как сделать о добавлении поддержки Objective-C в плагин панели тегов Vim.

Emacs

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

YASnippet objc-mode

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

Затмение

CDT поддерживает проекты на основе Makefile:

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

- так что технически вы можете создавать свои проекты Objective-C из коробки (в Windows вам понадобится набор инструментов Cygwin или MinGW). Единственная проблема - это редактор кода, который будет сообщать о множестве ошибок по сравнению с тем, что он считает чистым кодом C (проверку кода на лету можно отключить, но все же ...). Если вам нужна правильная подсветка синтаксиса, вы можете добавить Eclim в свой Eclipse и наслаждаться всем хорошие возможности как Eclipse, так и Vim (см. выше).

Еще один многообещающий плагин Eclipse - Colorer, но он не поддерживает Objective -C пока что. Тем не менее, не стесняйтесь подавать запрос на добавление функции.

SlickEdit

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

Кроме того, у него есть плагин Eclipse, который можно использовать в качестве альтернативы. в автономный редактор.

KDevelop

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


Вышесказанное также относится к разработке Objective-C в Linux, поскольку все упомянутые инструменты более или менее переносимы.

person Bass    schedule 01.03.2016