Буквально на днях Мигель де Икаса объявил о выпуске нового направления в развитии платформы Mono под MacOS X - MonoMac, что позволяет создавать приложения на основе Cocoa с использованием Mono. MonoMac - это результат многолетних экспериментов со смешиванием .NET и Objective-C, а также некоторых принципов разработки, которые использовались в MonoTouch.
Несколько лет назад Джефф Нортон (Geoff Norton) создал CocoaSharp - первый набор языковых привязок .NET для Cocoa API. Первое время CocoaSharp отлично подходил для изучения принципов создания привязок для Objective-C на .NET. Со временем были созданы другие инструменты разработки для интеграции Objective-C с C# и другими языками .NET. У всех были свои достоинства и недостатки, и теперь сделана попытка объединить преимущества всех существующих решений в MonoMac.
Проектом выдвинуты следующие технические требования:
- использование Cocoa API в виде C# API;
- наследование от классов Objective-C;
- механизм для вызова библиотек Objective-C;
- сделать повседневные задачи Objective-C лёгкими, а сложные - возможными;
- представление свойств Objective-C в виде свойств C#;
- представление строго типизированных API, например вместо представления обычного контейнера NSArray или индивидуальных объектов NSObjects;
- использование перечислений int и uint как параметров в виде перечислений C# или перечислений C# с атрибутами [Flags];
- представление основных типов в виде «родных» типов C#;
- события и уведомления, которые предоставляют пользователю возможность выбора между подходом Objective-C и системой событий C#;
- лицензировать библиотеки классов под MIT X11, как и остальные библиотеки классов Mono;
- представление делегатов C# (лямбды, анонимные методы и System.Delegate) для Objective-C API в виде «блоков»;
- не создавать привязок для тех API, которые почти не используются на практике.
Cocoa состоит из двух API: одна часть - объектно-ориентированные C-callable API, а другая часть - API на базе Objective-C. API на основе C обрабатываются с использованием традиционного подхода P/Invoke, где эти API «оборачиваются» в классы C#. Это включает в себя такие API, как: AudioToolbx, CoreGraphics, CoreFoundation и CoreText. API на основе Objective-C, где используются такие ресурсоёмкие вещи, как пользовательский интерфейс и высокоуровневая логика (Foundation и AppKit), обрабатываются новым «движком» привязок MonoMac.ObjCRuntime и генератором привязок btouch.
В отличие от MonoTouch, MonoMac на данный момент не предоставляет привязок для всех Cocoa API. Основным направлением разработки была возможность создавать приложения вообще и подготовить кодовую базу к изменениям сторонних разработчиков.
На данный момент MonoMac предоставляет привязки для следующих API:
- CoreFoundation (некоторые части ещё не реализованы полностью);
- CoreText;
- CoreGraphics;
- Foundation (некоторые части ещё не реализованы, как и вспомогательные инструменты);
- AppKit (осталось реализовать порядка 30%).
Разработчики MonoMac заинтересованы в улучшении проекта и его дальнейшем развитии, поэтому приглашают всех желающих принять активное участие в разработке.
А теперь ещё немного о приятном. MonoMac является всего лишь библиотекой, которая предоставляет разработчикам C# доступ к нижележащему слою API в OSX, и не включает в себя средства для создания установочных пакетов (application bundle). Но есть планы по включению нового инструмента «Mono bundler» в версию Mono 2.8. Этот инструмент исследует .NET приложение и генерирует установочный пакет, который содержит как код самого приложения, так и код тех зависимостей из Mono, которые необходимы для запуска. Такую же технологию сейчас использует Banshee на OSX. Это позволит распространять приложения, написанные на Mono под OSX без установки Mono на компьютере конечного пользователя.
Внимание! Для установки MonoMac вам потребуются два модуля: сам MonoMac и MacCore. Также нужна последняя версия Mono.
Сейчас самое время для тестирования уже написанной части проекта и, если есть желание - подключения к команде разработчиков. Со списком того, где требуется помощь, можно ознакомиться по ссылке ниже. Поэтому, если у вас есть время - то можете помочь в развитии платформы Mono на MacOS X и упростить другим написание новых приложений.