Цель C для Windows

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

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

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

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

14 ответов

Решение

Расширяя два предыдущих ответа, если вы просто хотите 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.

Вы можете использовать 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. Убедитесь, что путь к вашей папке похож на мой, иначе вы получите ошибку

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

Также:

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

http://www.cocotron.org/

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

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

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

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

Я знаю, что это очень старая статья, но я нашел решение, которое стало доступно только недавно и включает почти все функции 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.

Проверьте WinObjC:

https://github.com/Microsoft/WinObjC

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

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

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

открытый флайт

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

Недавняя попытка перенести 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 старого стиля - пока кто-то не заботится...

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

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

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

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

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

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

С 2021 года набор инструментов GNUstep Windows MSVC позволяет интегрировать код Objective-C в любое приложение Windows, включая проекты Visual Studio с использованием LLVM/Clang. Сюда входит поддержка автоматического подсчета ссылок (ARC) и функций Objective-C 2.0, таких как блоки.

В проект входят библиотеки Foundation, CoreFoundation и libdispatch от GNUstep. В настоящее время он не включает в себя какую-либо структуру пользовательского интерфейса, такую ​​как AppKit или UIKit, но его можно использовать, например, для написания пользовательского интерфейса для Windows с кросс-платформенной бизнес-логикой, написанной на Objective-C.

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

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

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

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

Другие вопросы по тегам