Objective-C для Windows

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

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

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

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

Если вы просто делаете это для iOS, вы можете использовать Среда сборки iOS, П. М. Баты ...

Cole Johnson 05.01.2013 00:32
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
229
1
207 195
13
Перейти к ответу Данный вопрос помечен как решенный

Ответы 13

Также:

The Cocotron is an open source project which aims to implement a cross-platform Objective-C API similar to that described by Apple Inc.'s Cocoa documentation. This includes the AppKit, Foundation, Objective-C runtime and support APIs such as CoreGraphics and CoreFoundation.

http://www.cocotron.org/

Проект Cocotron предназначен для кросс-компиляции из XCode, а не написан в Windows и компилируется там.

Dan Udey 26.09.2008 22:58

это не хороший ответ, я даже не уверен, почему OP выбрал это как «ответ», потому что CoCotron предназначен для Mac, а OP хочет решение на основе Windows.

cbrulak 03.04.2009 22:28

Вы правы - я был слишком взволнован, когда прочитал это: «Общая цель - обеспечить полную поддержку на любой жизнеспособной платформе, проект должен быть максимально переносимым. Однако большая часть работы в настоящее время сосредоточена на обеспечении поддержки Microsoft Windows. В частности, версий на базе NT, от 2000 до Vista ».

Luther Baker 20.06.2009 02:53
Ответ принят как подходящий

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

Вы всегда можете перенести фреймворки Cocoa с открытым исходным кодом. Примером является CoreFoundation.

Cole Johnson 26.11.2012 02:39

Не все Core Foundation имеют открытый исходный код. Огромная сумма с закрытым исходным кодом.

uchuugaka 28.12.2013 12:37

X'D Я не знаю, почему у этого парня был лучший ответ, он даже не пробовал то, о чем говорит. Им следует сделать новый значок для ответов на вопросы BS. Без обид, @michael. Это интересное чтение.

Wolfpack'08 13.05.2015 18:15

Без обид, но для записи, в то время, когда я писал этот ответ, я в течение нескольких недель пытался скомпилировать Objective-C для Windows и пытался использовать как GNUStep, так и Cocoatron. В конце концов я был вынужден переписать проект на C++ из-за некоторых ошибок компилятора в то время, а ivars не был инициализирован равным 0 в Windows. Я действительно сослался на «Я не тестировал эти функции», но я говорил о новых на тот момент функциях Objective-C 2.0, которые были доступны на платформах Apple менее года, когда был написан этот ответ, и только что приземлился в GNUStep.

Michael Buckley 13.05.2015 22:16

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

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

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

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

Извините, что не ответил на ваш вопрос о группе, резюмирую: APSL - отстой, и среда выполнения и CF находятся под ними.

Christopher Lloyd 11.11.2009 19:33

Что отстой в APSL? (opensource.apple.com/license/apsl) Это не агрессивно, как GPL. Если вы изменяете покрываемый код, вы должны сделать этот код доступным. Защищенный код - это любые изменения, которые вы вносите, например, в CoreFoundation, но не будет включать вашу фактическую программу. Вам также необходимо четко обозначить свои модификации. Это неприятно, но стоит того, чтобы использовать тщательно проверенный код Apple, не так ли?

Matthieu Cormier 12.11.2009 16:03

В долгосрочной перспективе хлопоты, связанные с соблюдением лицензии, и риск ее прекращения не стоят кода.

Christopher Lloyd 15.11.2009 07:40

Для удобства других читателей здесь кратко изложено то, о чем говорит Крис (gnu.org/philosophy/historical-apsl.html). Я думаю, что риск того, что Apple прекратит действие лицензии, стоит использования кода. Негативная реакция на то, что они когда-либо делали подобное, помешает им сделать это, за исключением крайне маловероятных случаев. I.E. Apple покупает Oracle, и лицензия аннулируется.

Matthieu Cormier 17.11.2009 23:39

Я не думаю, что вы понимаете, как работает прекращение действия, это не то, что они могут сделать со всеми сразу, код лицензирован в соответствии с условиями и может использоваться в соответствии с этими условиями на неопределенный срок. Что может случиться, так это то, что Apple может выделить лиц / компании, которые, по их мнению, нарушили лицензию. FSF уже делает это с нарушениями GPL. Вы действительно думаете, что Apple более дружелюбна к разработчикам, чем FSF? Если вы считаете, что эти условия несущественны и бессмысленны, я уверен, что вы сможете убедить Apple, чтобы законные силы просто отменили их.

Christopher Lloyd 02.12.2009 21:39

Следует отметить, что Apple работала с FSF над изменениями в APSL и что FSF считает APSL Version 2.0 лицензией на свободное программное обеспечение. gnu.org/philosophy/apsl.html

Sean 18.04.2011 17:36

С моей точки зрения (как человека, который имел дело с BSD, LGPL, MIT и другими лицензиями в проприетарном продукте) лицензия Apple МЕНЬШЕ ограничений, чем GPL, что, честно говоря, является головной болью. Если я могу получить BSD, MIT или APSL, я лучше буду работать с ними, чем с GPL.

Lloyd Sargent 15.11.2012 19:20

Что касается прекращения действия, нарушения GPL, о которых я читал, были вопиющими (люди удаляют заголовки и т. д.). Единственное, что, как я вижу, может вам не понравиться, это то, что он требует, чтобы вы задокументировали в коде вносимые вами изменения. Мне кажется, это хорошая практика программирования. Кроме этого, я недоумеваю, что насчет APSL, которое вы считаете обременительным? У нее меньше ошибок, чем у GPL!

Lloyd Sargent 15.11.2012 19:28

Если вы просто хотите поэкспериментировать, здесь есть компилятор 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 K J 29.06.2011 12:33

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

open-c flite

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

Я загрузил и запустил этот проект с помощью Visual Studio 2013 и получил 30 экземпляров этой ошибки. Ошибка 64 ошибка C2632: недопустимый символ 'char', за которым следует 'bool' C: \ opencflite-code-248-trunk \ include \ c99 \ stdbool.h 2‌ 0 1 objc

Adam Mendoza 14.09.2014 08:19

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

Эта предлагаемая установка не сработала на моем ПК, потому что я уже установил gcc, который я использовал для nasm. Поэтому я просто исправил gcc -o helloworld... на c:\gnustep\bin\gcc -o helloworld..., и это сработало. Альтернативой было бы изменение переменных среды, чего я не делал, так как я просто видел цель C. Спасибо teshguru за точный ответ.

Martin Berger 04.09.2012 01:04

Попробуйте удалить форматирование кода вокруг названий вещей. GNUstep MYSY - это не код, это просто название программы. Если вы хотите что-то выделяться, возможно, подумайте о том, чтобы придать этому смелости? И если что-то подключается к тегу, подумайте об использовании разделителей тегов, но не должно быть никаких причин для добавления собственных имен в разделители тегов.

Wolfpack'08 13.05.2015 03:13

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

Dalvik 20.08.2015 21:04

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

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

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

Subjective is an attempt to bring Objective C 2.0 with ARC support to Windows.

This project is a fork of objc4-532.2, the Objective C runtime that ships with OS X 10.8.5. The port can be cross-compiled on OS X using llvm-clang combined with the MinGW linker.

There are certain limitations many of which are a matter of extra work, while others, such as exceptions and blocks, depend on more serious work in 3rd party projects. The limitations are:

• 32-bit only - 64-bit is underway

• Static linking only - dynamic linking is underway

• No closures/blocks - until libdispatch supports them on Windows

• No exceptions - until clang supports them on Windows

• No old style GC - until someone cares...

• Internals: no vtables, no gdb support, just plain malloc, no preoptimizations - some of these things will be available under the 64-bit build.

• Currently a patched clang compiler is required; the patch adds -fobjc-runtime=subj flag

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

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

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

Установить MINGW Установите GNUStep Тогда тест

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

Проверьте WinObjC:

https://github.com/Microsoft/WinObjC

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

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

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

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

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

Vim

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

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

Emacs

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

YASnippet objc-mode

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

Затмение

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

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

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

SlickEdit

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

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

KDevelop

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


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

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