Как лучше всего написать Objective-C на платформе Windows?
Cygwin и gcc? Есть ли способ как-то интегрировать это в Visual Studio?
В связи с этим - есть ли какие-либо предложения относительно того, как связать и использовать Windows SDK для чего-то вроде этого. Это другой зверь, но я знаю, что могу писать сборку и ссылаться на библиотеки DLL Windows, что дает мне доступ к этим вызовам, но я не знаю, как это сделать, не гуглил и не получая разрозненных указаний.
Кто-нибудь знает о хороших онлайн-ресурсах или книжных ресурсах, где можно делать или объяснять подобные вещи?
Также:
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.
Проект Cocotron предназначен для кросс-компиляции из XCode, а не написан в Windows и компилируется там.
это не хороший ответ, я даже не уверен, почему OP выбрал это как «ответ», потому что CoCotron предназначен для Mac, а OP хочет решение на основе Windows.
Вы правы - я был слишком взволнован, когда прочитал это: «Общая цель - обеспечить полную поддержку на любой жизнеспособной платформе, проект должен быть максимально переносимым. Однако большая часть работы в настоящее время сосредоточена на обеспечении поддержки Microsoft Windows. В частности, версий на базе NT, от 2000 до Vista ».
Расширяя два предыдущих ответа, если вам просто нужен 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.
Не все Core Foundation имеют открытый исходный код. Огромная сумма с закрытым исходным кодом.
X'D Я не знаю, почему у этого парня был лучший ответ, он даже не пробовал то, о чем говорит. Им следует сделать новый значок для ответов на вопросы BS. Без обид, @michael. Это интересное чтение.
Без обид, но для записи, в то время, когда я писал этот ответ, я в течение нескольких недель пытался скомпилировать Objective-C для Windows и пытался использовать как GNUStep, так и Cocoatron. В конце концов я был вынужден переписать проект на C++ из-за некоторых ошибок компилятора в то время, а ivars не был инициализирован равным 0 в Windows. Я действительно сослался на «Я не тестировал эти функции», но я говорил о новых на тот момент функциях Objective-C 2.0, которые были доступны на платформах Apple менее года, когда был написан этот ответ, и только что приземлился в GNUStep.
У меня смешанные чувства по поводу проекта Cocotron. Я рад, что они выпускают исходный код и делятся друг с другом, но я не думаю, что они делают что-то самым простым способом.
Примеры. Apple выпустила исходный код для цель-c время выполнения, который включает свойства и сборку мусора. Однако в проекте Cocotron есть собственная реализация среды выполнения objective-c. Зачем дублировать усилия? Существует даже файл проекта Visual Studio, который можно использовать для создания файла objc.dll. Или, если вы очень ленивы, вы можете просто скопировать файл DLL из установки Safari в Windows.
Они также не удосужились использовать CoreFoundation, исходный код которого также открыт Apple. Я написал об этом вопрос, но не получил ответа.
Я думаю, что на данный момент лучшее решение - взять исходный код из нескольких источников (Apple, CocoTron, GnuStep) и объединить его вместе с тем, что вам нужно. Вам придется прочитать много источников, но конечный результат того стоит.
Извините, что не ответил на ваш вопрос о группе, резюмирую: APSL - отстой, и среда выполнения и CF находятся под ними.
Что отстой в APSL? (opensource.apple.com/license/apsl) Это не агрессивно, как GPL. Если вы изменяете покрываемый код, вы должны сделать этот код доступным. Защищенный код - это любые изменения, которые вы вносите, например, в CoreFoundation, но не будет включать вашу фактическую программу. Вам также необходимо четко обозначить свои модификации. Это неприятно, но стоит того, чтобы использовать тщательно проверенный код Apple, не так ли?
В долгосрочной перспективе хлопоты, связанные с соблюдением лицензии, и риск ее прекращения не стоят кода.
Для удобства других читателей здесь кратко изложено то, о чем говорит Крис (gnu.org/philosophy/historical-apsl.html). Я думаю, что риск того, что Apple прекратит действие лицензии, стоит использования кода. Негативная реакция на то, что они когда-либо делали подобное, помешает им сделать это, за исключением крайне маловероятных случаев. I.E. Apple покупает Oracle, и лицензия аннулируется.
Я не думаю, что вы понимаете, как работает прекращение действия, это не то, что они могут сделать со всеми сразу, код лицензирован в соответствии с условиями и может использоваться в соответствии с этими условиями на неопределенный срок. Что может случиться, так это то, что Apple может выделить лиц / компании, которые, по их мнению, нарушили лицензию. FSF уже делает это с нарушениями GPL. Вы действительно думаете, что Apple более дружелюбна к разработчикам, чем FSF? Если вы считаете, что эти условия несущественны и бессмысленны, я уверен, что вы сможете убедить Apple, чтобы законные силы просто отменили их.
Следует отметить, что Apple работала с FSF над изменениями в APSL и что FSF считает APSL Version 2.0 лицензией на свободное программное обеспечение. gnu.org/philosophy/apsl.html
С моей точки зрения (как человека, который имел дело с BSD, LGPL, MIT и другими лицензиями в проприетарном продукте) лицензия Apple МЕНЬШЕ ограничений, чем GPL, что, честно говоря, является головной болью. Если я могу получить BSD, MIT или APSL, я лучше буду работать с ними, чем с GPL.
Что касается прекращения действия, нарушения GPL, о которых я читал, были вопиющими (люди удаляют заголовки и т. д.). Единственное, что, как я вижу, может вам не понравиться, это то, что он требует, чтобы вы задокументировали в коде вносимые вами изменения. Мне кажется, это хорошая практика программирования. Кроме этого, я недоумеваю, что насчет APSL, которое вы считаете обременительным? У нее меньше ошибок, чем у GPL!
Если вы просто хотите поэкспериментировать, здесь есть компилятор 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; }
Вы можете получить объективный компилятор c, который будет работать с Windows и хорошо работать с Visual Studio 2008 \ 2010 здесь.
Просто скачайте последний исходный код. Вам не нужно собирать 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
Вы может используете Objective C внутри среды Windows. Если вы выполните следующие действия, все должно работать нормально:
GNUstep MSYS Subsystem
(MSYS для GNUstep), GNUstep Core
(библиотеки для GNUstep) и GNUstep Devel
C:\GNUstep\GNUstep\System\Library\Headers\Foundation
1 и убедитесь, что Foundation.h
существует.gcc -v
, чтобы проверить правильность установки GNUstep MSYS
(если вы получаете сообщение об ошибке «файл не найден», убедитесь, что папка bin
для GNUstep MSYS
находится в вашем PATH
).Используйте эту простую программу «Hello World» для проверки функциональности GNUstep:
#include <Foundation/Foundation.h>
int main(void)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog(@"Hello World!.");
[pool drain];
return;
}
Вернитесь в командную строку и 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
Наконец, в командной строке введите helloworld
, чтобы запустить его.
Всего наилучшего и получайте удовольствие от Objective-C!
ПРИМЕЧАНИЯ:
Эта предлагаемая установка не сработала на моем ПК, потому что я уже установил gcc, который я использовал для nasm. Поэтому я просто исправил gcc -o helloworld...
на c:\gnustep\bin\gcc -o helloworld...
, и это сработало. Альтернативой было бы изменение переменных среды, чего я не делал, так как я просто видел цель C. Спасибо teshguru за точный ответ.
Попробуйте удалить форматирование кода вокруг названий вещей. GNUstep MYSY - это не код, это просто название программы. Если вы хотите что-то выделяться, возможно, подумайте о том, чтобы придать этому смелости? И если что-то подключается к тегу, подумайте об использовании разделителей тегов, но не должно быть никаких причин для добавления собственных имен в разделители тегов.
при использовании его 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 он работает для меня
Я знаю, что это очень старый пост, но я нашел решение, которое стало доступным только недавно, И включает почти все функции 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, в котором описываются некоторые достигнутые успехи и проблемы.
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-х (когда впервые появился Следующий шаг).
ctags
поддерживает Objective-C с r771 (обязательно выберите предварительную версию 5.9 и добавьте --langmap=ObjectiveC:.m.h
в командную строку, см. здесь), так что у вас будет достойное завершение кода / навигация по тегам.
Вот короткий как о добавлении поддержки Objective-C в плагин панели тегов Vim.
То же самое относится к etags
, поставляемому с современным Emacsen, поэтому вы можете начать с Emacs Объективный режим C. YASnippet предоставит полезные шаблоны:
и если вы хотите что-то более умное, чем базовое завершение кода на основе тегов, взгляните на этот вопрос.
CDT поддерживает проекты на основе Makefile
:
- так что технически вы можете создавать свои проекты Objective-C из коробки (в Windows вам понадобится набор инструментов Cygwin или MinGW). Единственная проблема - это редактор кода, который сообщит о множестве ошибок по сравнению с тем, что, по его мнению, является чистым кодом C (проверку кода на лету можно отключить, но все же ...). Если вам нужна правильная подсветка синтаксиса, вы можете добавить Эклим в свой Затмение и пользоваться всеми хорошими функциями как Затмение, так и Vim (см. Выше).
Еще один многообещающий плагин Затмение - Колорер, но он пока не поддерживает Objective-C. Не стесняйтесь подавать запрос на добавление функции.
SlickEdit, среди Другие свойства отличной IDE, делаетподдерживать Objective-C. Хотя это довольно сложно изучить (хотя и не так сложно, как Emacs), я считаю, что это ваш лучший вариант, если вы не против его покупки (цена вполне доступная).
Кроме того, у него есть Плагин Eclipse, который можно использовать как альтернативу автономному редактору.
Ходят слухи, что существует KDevelopпластырь (15 лет, но кого это волнует?). Я лично не думаю, что KDevelop превосходит Emacsen по функциям, поэтому я бы не стал его пробовать.
Вышесказанное также относится к разработке Objective-C в Linux, поскольку все упомянутые инструменты более или менее переносимы.
Если вы просто делаете это для iOS, вы можете использовать Среда сборки iOS, П. М. Баты ...