Меню Рубрики

Delphi для mac os

Delphi XE3: работа с Mac OS X.

С некоторых пор стал всё чаще приглядываться к работе в Mac OS X. В принципе, мне, как и раньше, разработка под эту ОС особенно не требуется, т.к. всё, чем я занимаюсь по работе в Delphi, относится исключительно к Windows. Но все же интересно узнать “как оно там всё устроено”, да и, как стало известно, скоро нас ждет знакомство с Mobile Studio. А значит, небольшой навык работы с другой ОС пригодиться.

Началось мое знакомство с Mac OS X, как обычно, с “Hello, World” и там, собственно, никаких проблем и вопросов не возникло – PAServer установил, профиль настроил, приложение прекрасно собралось и запустилось. В этот раз я решил познакомиться с Mac OS X по-подробнее, посмотреть, как устроена сама ОС, какие возможности для работы есть для разработчиков вообще и, что нам дает сделать Delphi XE3. В общем эта статья представляет собой краткое описание того, как устроена относительно новая для нас ОС и, одновременно, эдакая “попсовая интерпретация возможностей Delphi” (с) по работе с Mac OS X.

Содержание статьи:

Некоторые сведения о Mac OS X.

Текущее приложение и строка меню

Текущее приложение – это то приложение, окно которого активно в данный момент времени. Имя текущего приложения всегда можно узнать, посмотрев на строку меню вверху экрана. Имя текущего приложения располагается слева, сразу после логотипа Apple и выделяется жирным шрифтом. Например, на рисунке ниже показан вид меню, когда пользователь работает с адресной книгой:

Строка меню: текущее приложение

Как видно на рисунке, после названия располагаются все пункты меню текущего приложения. Вся верхняя строка и называется строкой меню. Строка меню изменяется при переключении между приложениями. В Mac OS X меню каждого приложения всегда располагается вверху экрана, его не требуется искать – достаточно переключиться на необходимое приложение и его меню отобразится вверху. Строка меню одна и располагается на рабочем пространстве главного монитора.

После пунктов меню с правой стороны строки меню располагаются иконки приложений и часы. Иконки приложений обычно служат для доступа к некоторым наиболее важным функциям запущенных приложений. Иконки делятся на два типа:

  • иконки пользовательских приложений
  • иконки приложений системы.

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

Иконка яблока слева в строке меню предоставляет доступ к наиболее важным функциям системы: информация по системе, обновление операционной системы, доступ к Web-репозиторию программ (App Store), управление Доком (Dock), менеджер запущенных приложений, настройки системы, выход из системы, засыпание, перезагрузка и выключение компьютера.

Доступ к функциям системы

Службы (сервисы). Вызов служб.

В любой программе в меню совпадающем с именем приложения, располагаются ключевые пункты – такие как настройки программы, выход и службы или, говоря более привычными словами – сервисы . Службы позволяют произвести некоторую склейку функциональности некоторых приложений между собой, при этом знать о взаимных функциональных возможностях приложениям не требуется. Службы предоставляются установленными в системе приложениями и, как правило, действуют над некоторыми выделенными объектами в документах – такими как текст, картинки … Они позволяют быстро найти перевод слова, быстро переслать выделенный текст на почту или заставить внутренний синтезатор речи произнести его, добавить выделенный фрагмент текста или картинку в список дел… В списке “Службы” регистрируются функции всех установленных программ пользователя, предоставляющих сервисные функции. Если соответствующий пункт меню “Службы” активен – сервис может принять текущие входные данные, так для работы многих служб необходимо выделить объект над которым предполагается работа. На рисунке ниже я выделил текст в Терминале и вызывал список служб для работы с текстом:

Читайте также:  Mysql mac os uninstall

Если Вы забыли где находится тот или иной пункт меню, то достаточно воспользоваться пунктом меню “Справка” – наберите часть пункта меню или функции, которую Вы помните и система сама покажет Вам подменю где он находится:

Finder

Если проводить аналогию между Windows и Mac OS X, то Finder – это рабочий стол. Собственно, об этом же говорит и сама Mac OS X:

О программе “Finder”

Finder предоставляет доступ к домашней директории, приложениям, подключению к серверам (протоколы), предоставляет быстрый доступ к часто посещаемым местам, полностью поддерживает Drag & Drop, быстрое сохранение фрагментов текста, перетаскивание файлов и папок, создание ярлыков и т.д. В общем, если Вы никогда не работали плотно с Терминалом, то Finder поможет очень быстро освоиться в новой операционной системе.

Dock

Dock в Mac OS X – это тоже самое, что и панель задач в Windows:

Выглядит Dock, конечно, по-солиднее, чем панель задач Windows, но суть та же – размещение иконок часто используемых приложений, вызов приложений, хранение ссылок (ярлыков) на документы и т.д. Запущенные приложения помечаются специальным значком под иконкой (см. на рисунке выше иконку системных настроек).

Приложения делятся на постоянно “живущие” в Dock, и временные. Иконки временных приложений (редко используемые приложения) располагаются правее всех постоянных, и исчезают (схлопываются) после выхода из приложений. Чтобы перевести приложение из категории временных – перетащите (удерживая левую кнопку мыши) его иконку левее (прочие иконки будут раздвигаться, уступая место), либо выберите в контекстном меню (по правой кнопке) – “Оставить в Dock”. Чтобы удалить приложение из Dock – перетащите иконку приложения за пределы Dock (покажется серое облачко) и отпустите там, либо в контекстном меню выберите – “Удалить из Dock”.

Правее иконок приложений, через разделительную полосу, находится специальная зона для ссылок, папок, стеков; замыкает этот список Корзина.

В общем и целом, к работе с Mac OS X привыкаешь довольно быстро – буквально часик работы как-то уже свыкаешься с окружением, не “паришься” с расположением меню и т.д. Другое дело, когда касаешься разработки приложения под Mac OS X – вот тут есть над чем задуматься, после долгих лет работы с Windows и его WinAPI.

Кратко об архитектуре OS X

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

Рассмотрим назначение каждого из уровней архитектуры.

Cocoa Layer

Уровень Cocoa, в основном, отвечает за внешний вид приложений и их способности реагировать на действия пользователя. Кроме того, этот же слой отвечает за многие функции, которые определяют пользователи OS X, такие как полноэкранный режим, AutoSave и т.д.

Cocoa Layer содержит фреймворк AppKit. AppKit является ключевой основой для разработки приложений. Классы и интерфейсы AppKit реализуют пользовательский интерфейс (UI) приложений, в том числе окон, диалоговых окон, элементы управления, меню и обработку событий. Они также управляют окнами, документами, диалогами типа Открыть и Сохранить, Копировать в буфер обмена и т.д. В дополнение к классам окон, меню и обработки событий в AppKit, также содержатся классы для работы со шрифтами, цветами, изображениями и т.д.

Читайте также:  Kerio vpn client mac os служба не работает

Также в Cocoa Layer “живут” такие фреймворки как:

  • GameKit
  • Preferences Panes
  • Screen Saver Framework
  • SecurityInterface

Что касается Cocoa Layer, то здесь большинство (если не все) интерфейсов так или иначе задействованы в работе FireMonkey 2.0., поэтому врядли нам потребуется напрямую использовать Appkit в своих приложениях, но, тем не менее, стоит сказать, что для работы с Cocoa Layer в Delphi сейчас имеются такие модули как Macapi.CocoaTypes и Macapi.AppKit.

Media Layer

С Media Layer разработчики получают возможность разрабатывать красивые приложения с различными эффектами, воспроизведением видео/аудио и т.д. В общем, если AppKit в Cocoa дает нам возможность разрабатывать приложение вообще, то в Media Layer содержатся фреймворки, используя которые можно сделать красивое и функциональное приложение. Например, в Media Layer мы можем найти такие фреймворки:

  • AudioToolbox
  • AudioUnit
  • AVFoundation
  • CoreAudio
  • CoreAudioKit
  • CoreMIDI
  • CoreMIDIServer
  • DiscRecording
  • DiscRecordingUI
  • DVDPlayback
  • GLKit
  • IMServicePlugIn
  • InstantMessage
  • OpenAL
  • OpenGL
  • QTKit
  • Quartz
  • QuartzCore
  • QuickTime
  • SceneKit

Так, если большая часть названий в списке выше разработчикам под Windows может быть не известна, то уж с QuickTime и OpenGL мы могли сталкиваться и без разработки приложений и представляем что это и для чего это. Что на данный момент реализовано в Delphi из представленного выше перечня? В Delphi мы можем найти следующие модули для работы:

  • Macapi.AVFoundation
  • Macapi.CoreMedia
  • Macapi.OpenGL
  • Macapi.QuartzCore
  • Macapi.Quicktime

Core Services Layer

На уровне Core Services располагаются фреймворки, позволяющие взаимодействовать с ОС на более низком уровне – получать доступ к различным типам данных, к соккетам для работы с сетью и т.д. Т.е. на этом слое мы начинаем углубляться в детали OS X. Так, например, используя фреймворк Foundation, мы можем работать с XML или получать доступ к рабочему пространству пользователя, например, чтобы запустить какое-либо приложение, получать информацию о запущенных приложениях и взаимодействовать с ними и т.д. Но обо всем этом чуть-чуть по-ниже. Итак, какие фреймворки содержатся в Core Services:

  • Accounts
  • AddressBook
  • ApplicationServices
  • Automator
  • Carbon
  • Collaboration
  • CoreData
  • CoreFoundation
  • CoreLocation
  • CoreMedia
  • CoreServices
  • EventKit
  • Foundation
  • InputMethodKit
  • JavaScriptCore
  • LatentSemanticMapping
  • PublicationSubscription
  • QuickLook
  • ScriptingBridge
  • Security
  • SecurityFoundation
  • ServiceManagement
  • Social
  • StoreKit
  • WebKit
  • Macapi.CoreFoundation
  • Macapi.CoreLocation
  • Macapi.CoreMedia
  • Macapi.CoreServices
  • Macapi.Foundation
  • Macapi.Security

Core OS Layer

На уровне Core OS мы получаем в свое распоряжение классы интерфейсы для низкоуровневой работы с OS X, которых нам могло не хватить при работе с Core Services. Так, например, Core OS Layer содержит фреймворк SystemConfiguration с помощью которого мы можем получить доступ к настройкам самой операционной системы, управлять сетевыми соединениями и т.д.

На этом уровне работают следующие фреймворки:

  • CoreBluetooth
  • IOSurface
  • Accelerate
  • AGL
  • DirectoryService
  • DiskArbitration
  • ExceptionHandling
  • OpenCL
  • SystemConfiguration
  • XgridFoundation

Что имеется в Delphi XE3 по части работы на уровне Core OS:

Kernel & Driver Layer

На этом уровне реализуются классы и интерфейсы для доступа к ядру OS X и “железу” компьютера. Т.е. здесь “только хардкор” 🙂 Причем на столько суровый, что даже как-то пока нет желания глубоко копать в этом направлении. На уровне Kernel & Driver используются следующие фреймворки:

  • CoreWLAN
  • ForceFeedback
  • FWAUserLib
  • ImageCaptureCore
  • IOBluetooth
  • IOBluetoothUI
  • IOKit
  • Kernel
  • System

Что имеется в Delphi XE3 по части работы на этом уровне я пока не обнаружил…может быть даже и ничего. Если ошибаюсь, то подскажите – буду знать 🙂

Читайте также:  Wot на mac os системные требования

Как видите, в Mac OS X все не так уж и запутано и непонятно, как могло бы показаться при первом знакомстве. В зависимости от наших потребностей, выбираем необходимый уровень архитектуры – Cocoa, Media, Core Services и т.д., выбираем необходимый фреймворк и начинаем разработку. Конечно, чтобы разобраться с возможностями всех фреймворков уйдет не один месяц кропотливой работы, но кое-что можно реализовать уже сейчас.

Приложение Mac OS X. Структура бандла (bundle)

Прежде, чем мы начнем рассмотрение примеров работы с различными фреймворками Mac OS X, давайте немного отвлечемся и посмотрим, что из себя представляет обычное приложение Mac OS X. Для примера, создадим простейшее приложение для Mac OS или воспользуемся тем же “Hello, Mac OS!”. Помню ещё когда работал на старой работе и активно использовал там Lazarus, то для меня тогда стало неожиданность то, что файл OpenOffice на поверку оказался обычным архивом с определенной структурой файлов :). Теперь же, когда дело дошло до Mac OS, то удивления от того, что с позиций Windows приложения Mac OS X является обычно директорией с файлами как-то не возникло. Проверить это довольно просто:

1. Собираем проект и “скармливаем” его PAServer’у на машине с Mac OS.

Вот запущенное приложение и оно же в директории Applications Mac-машины:

Приложение Mac OS X

2. Копируем приложение на Flash и смотрим, что у нас получается в Windows:

Как видите в ОС Windows наше приложение Mac OS стало обычной директорией. И это полностью соответствует идеологии Mac OS. Дело в том, что в Mac OS X все приложения, библиотеки, компоненты и составные документы оформляются в виде бандлов (bundle). И

Bundle содержит в себе код и ресурсы приложения или составного документа. Документы и приложения представленные бандлами часто, по аналогии с ОС Linux, также могут именоваться как package – пакет. Для работы с бандлами в Mac OS X существуют специальные классы Cocoa, такие как: NSBundle, NSFileWrapper и др.

Кстати, мы могли бы и не переносить наше приложение для просмотра содержимого в Windows. Для просмотра содержимого бандла достаточно вызвать контекстное меню и выбрать пункт “Показать содержимое пакета”:

(На время последнего изменения файлов не обращайте внимание 🙂 Просто виртуалка не настроена)

Итак, что содержит бандл? В бандле приложения могут находится следующие компоненты файлы (не полный список):

  • Contents/Info.plist – файл метаописания приложения
  • Contents/MacOS/исполняемыйФайл – бинарный исполняемый файл, который запускается при старте приложения. В директории MacOS также могут содержатся и другие бинарные файлы, например, динамические библиотеки, необходимые для работы приложения.
  • Contents/Resources/ – здесь располагаются различные ресурсы необходимые приложению – картинки, строки, локализации, наборы иконок и т.д.
  • Contents/Resource Disabled/ – Finder перемещает временно отключенные языковые ресурсы в эту директорию
  • Contents/Frameworks/ – приватные библиотеки необходимые для работы приложения
  • Contents/SharedFrameworks/ – аналогично Frameworks – библиотеки необходимые для работы приложения, а также доступные для использования за его пределами
  • Contents/SharedSupport/ – некритические ресурсы (не оказывающие влияния на способность текущего приложения выполняться) – вспомогательные цели (приложения, документы, шаблоны, руководства, …)
  • Contents/PlugIns/ – вспомогательные модули (plugins)

С тем, что такое бандл и что из себя представляет бандл немного разобрались. Теперь попробуем поработать с фреймворками Mac OS X.

Источник

Популярные записи

Adblock
detector