Objective-C для Windows

230

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

Cygwin и GCC? Есть ли способ, которым я могу как-то интегрировать это в Visual Studio?

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

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

Лютер Бейкер
источник
5
Если вы просто делаете это для iOS, вы можете использовать iOS Build Environment от PM Baty ...
Коул Джонсон

Ответы:

146

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

Майкл Бакли
источник
1
Вы всегда можете перенести фреймворки Какао с открытым исходным кодом. Примером является CoreFoundation.
Коул Джонсон
Не все Core Foundation IS с открытым исходным кодом. Огромное количество закрытого источника.
Учуугака
X'D Я не знаю, почему этот парень получил лучший ответ, он даже не попробовал то, о чем он говорит. Они должны сделать новый значок для ответов BS. Без обид @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. Убедитесь, что ваш путь к папке похож на мой, иначе вы получите ошибку
teshguru
источник
1
Эта предложенная установка не работала на моем ПК, потому что я уже установил gcc, который я использовал для nasm. Поэтому я просто исправил gcc -o helloworld...до c:\gnustep\bin\gcc -o helloworld...и она работала. В качестве альтернативы можно было бы изменить переменные окружения, чего я не делал, так как я просто осматривал цель C. Спасибо тешгуру за точный ответ.
Мартин Бергер
Попробуйте удалить форматирование кода вокруг имен вещей. GNUstep MYSY - это не код, а просто название программного обеспечения. Если вы хотите, чтобы что-то выделялось, возможно, стоит ободрить это? И если что-то подключается к тегу, рассмотрите возможность использования разделителей тегов, но не должно быть никаких оснований для добавления имен в разделители тегов.
Wolfpack'08
когда это используется lgnustep-base -fconstant-string-class = NSConstantString это работает для меня
Dalvik
13

Также:

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

http://www.cocotron.org/

amrox
источник
4
Проект Cocotron разработан для кросс-компиляции из XCode, а не написан для Windows и скомпилирован там.
Дэн Удей
2
это не хороший ответ, я даже не уверен, почему OP выбрал это как «ответ», потому что CoCotron для Mac, а OP хочет решение на базе 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 обеспечивает поддержку совместимости iOS API. Хотя окончательный выпуск будет выпущен этой осенью (что позволит мосту воспользоваться новыми возможностями инструментов, которые будут поставляться с предстоящим обновлением Visual Studio 2015),

Мост доступен для сообщества с открытым исходным кодом в его текущем состоянии. Между сейчас и осенью. Мост 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, которая добавляет мобильную поддержку.

Ли Стотт
источник
9

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

Примеры.
Apple выпустила исходный код для времени выполнения target-c , который включает свойства и сборку мусора. Однако проект Cocotron имеет собственную реализацию времени выполнения target-c. Зачем дублировать усилия? Существует даже файл проекта Visual Studio, который можно использовать для создания файла 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 для использования классов 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 GUI C ++ и Objective-C в одном приложении Windows.

однодневка
источник
7

Проверьте WinObjC :

https://github.com/Microsoft/WinObjC

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

Джеймс Ко
источник
6

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

user397362
источник
эта программа не может быть скомпилирована с помощью 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-c компилируются и работают в visual studio. Одна печальная вещь - это работает только с 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 - это проект Subjective .

Из файла Readme:

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

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

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

• Только 32-разрядная версия

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

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

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

• Нет GC старого стиля - пока кто-то не заботится ...

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

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

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

INSYS
источник
2

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

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

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

ракша анг
источник
0

Если вам комфортно в среде Visual Studio,

Маленький проект: jGRASP с gcc Большой проект: Cocotron

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

Облако Чо
источник
0

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

напор

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

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

Emacs

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

YASnippet objc-mode

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

Затмение

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, поскольку все упомянутые инструменты более или менее переносимы.

бас
источник