Понятия служб запуска

Эта глава представляет и разработчиков и пользователей к основной информации о Launch Services и ее API.

Идентификация элемента

В целом элементы, которыми будут управлять на (такие как приложения, документы или папки), могут быть идентифицированы для Launch Services любым из двух способов:

Операции Many Launch Services реализованы парами связанных функций, одно принятие ссылки файловой системы в качестве параметра и другого ссылка URL: например, предпочтительное приложение для открытия элемента может быть найдено с любым LSGetApplicationForItem или LSGetApplicationForURL функция.

Кроме того, некоторые функции Launch Services применяются не к определенным отдельным элементам, но семьям элементов, определенных определенными характеристиками идентификации. Эти характеристики могут включать:

Например, функция Launch Services LSGetApplicationForInfo считает предпочтительное приложение для семейства документов определенным их типом файла, подписью создателя, расширением файла или любой комбинацией этих характеристик; LSCopyApplicationForMIMEType функция находит предпочтительное приложение для элементов с указанным типом MIME.

Информация об элементе

Some Launch Services функционирует возврат запрошенная информация об элементе или семье элементов. Это может включать:

База данных служб запуска

Launch Services поддерживает центральную структуру данных, базу данных Launch Services, в которой она записывает всю уместную информацию о приложениях и видах файлов документов и URLs, они способны к открытию. Каждый раз, когда новое приложение становится известным системе (такой как тогда, когда пользователь перетаскивает его от установочного диска в папку Applications), приложение регистрируется в Launch Services, копирующей необходимую информацию о приложении в его базу данных. Launch Services может тогда использовать эту информацию для определения предпочтительного приложения для открытия данного файла документа или URL.

Ключи списка свойств для запускают услуги

Launch Services получает информацию, в которой она нуждается о приложении от списка свойств информации о пакете приложения (Info.plist) или, в случае однофайлового приложения, от a 'plst' ресурс в ветви ресурсов приложения. Таблица 1-1 показывает соответствующие ключи. (См. Инструкции по Конфигурации Во время выполнения для более подробной информации об этих и других ключах списка свойств.)

Табличные 1-1  ключи Списка свойств имели отношение к Launch Services

Ключ

Ввести

Описание

CFBundleDisplayName

String

Имя дисплея приложения

CFBundleIconFile

String

Имя файла, содержащего значок приложения

CFBundleIdentifier

String

Идентификатор пакета приложения

CFBundleSignature

String

Подпись создателя приложения

CFBundleDocumentTypes

Array

Массив словарей, описывающих типы документов приложение, может открыться; посмотрите Типы документов

CFBundleURLTypes

Array

Массив словарей, описывающих типы URL приложение, может открыться; посмотрите Типы URL

LSRequiresCarbon

String

Должен выполнение приложения исходно в OS X?

LSPrefersCarbon

String

Приложение предпочитает работать исходно в OS X?

LSRequiresClassic

String

Должен выполнение приложения в Классической среде эмуляции?

LSPrefersClassic

String

Приложение предпочитает работать в Классической среде эмуляции?

LSBackgroundOnly

String

Выполнение приложения только в фоновом режиме?

LSUIElement

String

Действительно ли приложение является элементом пользовательского интерфейса (т.е. не имеет никакой строки меню и не должен появляться в Прикреплении или окне Force Quit)?

CFBundleDisplayName ключ указывает имя дисплея приложения; этот ключ может быть локализован включением его в InfoPlist.strings файл надлежащего .lproj подкаталог. CFBundleIconFile идентифицирует файл, содержащий изображение значка, которое будет использоваться для отображения приложения на экране. CFBundleIdentifier определяет идентификатор пакета приложения, уникальная строка идентификации раньше определяла местоположение ее пакета во время выполнения. CFBundleSignature подпись создателя приложения, четыре кода символа, идентифицирующие файлы документов, принадлежащие этому приложению.

Ключи LSRequiresCarbon, LSPrefersCarbon, LSRequiresClassic, LSPrefersClassic, LSBackgroundOnly, и LSUIElement укажите различные аспекты среды, в которой должно быть запущено приложение. Строковое значение “1” поскольку любой из этих ключей объявляет, что соответствующий атрибут истина. (В версии 10.2 OS X или позже, эти ключи могут также принять значения типа Boolean или Number вместо String, но такие значения не поддерживаются в более ранних версиях системы.)

LSRequiresCarbon, LSPrefersCarbon, LSRequiresClassic, и LSPrefersClassic ключи являются взаимоисключающими: самое большее один из них может быть установлен в "1". Можно получить информацию о значениях этих четырех ключей через flags поле информационной записи элемента, возвращенной функциями Launch Services LSCopyItemInfoForRef и LSCopyItemInfoForURL. LSRequiresCarbon указывает, что приложение должно быть запущено исходно в OS X и не может быть выполнено в Классической среде эмуляции; LSRequiresClassic означает реверс. LSPrefersCarbon и LSPrefersClassic укажите, что приложение может выполнить или в среде, но имеет предпочтение одного или в другого; Средство поиска предлагает пользователю, выбор которого среда использовать путем отображения флажка в окне Get Info приложения, маркированном “Открытый в Классической среде”, первоначально выбрал или невыбранный, в зависимости от которого включают само приложение, указывает.

Если ни один из этих четырех ключей не устанавливается к "1", Launch Services выводит требуемую или предпочтительную среду приложения другими средними значениями:

  • Если приложение связывается, оно, как предполагается, собственное приложение Mac и выполняется исходно (эквивалентный LSRequiresCarbon).

  • Если приложение не связывается, и его ветвь ресурсов содержит a 'plst' или 'carb' ресурс, это, как предполагается, совместимо с любой средой, но предпочитает работать исходно (эквивалентный LSPrefersCarbon).

  • Если приложение не связывается и имеет нет 'plst' или 'carb' ресурс, это, как предполагается, Классическое приложение, неспособное к выполнению исходно (эквивалентный LSRequiresClassic).

Самые важные ключи списка свойств, в целях Launch Services, CFBundleDocumentTypes и CFBundleURLTypes. Значение, связанное с каждым из этих ключей, является массивом словарей (определение типа и словари определения схемы, соответственно), каждый из которых объявляет (требует) семьи файлов документов или URLs, который приложение подготовлено обработать. Launch Services использует эту информацию в решении что приложение использовать для открытия данного файла документа или URL.

Типы документов

Словарь определения типа определяет тип документа, семью файлов документов, которые может обработать приложение. Таблица 1-2 показывает соответствующие ключи в этом словаре. (См. Инструкции по Конфигурации Во время выполнения для более подробной информации об этих и других ключах в словаре определения типа.)

Табличные 1-2  Ключи в словаре определения типа

Ключ

Ввести

Описание

CFBundleTypeName

String

Абстрактное имя типа документа (также названный его доброй строкой)

CFBundleTypeIconFile

String

Имя файла значка для отображения документов этого типа

CFBundleTypeOSTypes

Array

Массив типов файлов с четырьмя символами для документов, принадлежащих этому типу документа

CFBundleTypeExtensions

Array

Массив расширений файла для документов, принадлежащих этому типу документа

CFBundleTypeMIMETypes

Array

Массив MIME вводит для документов, принадлежащих этому типу документа

CFBundleTypeRole

String

Роль приложение требует относительно документов этого типа; посмотрите Роли приложения

LSTypeIsPackage

Boolean

Указывает, распределяется ли документ как пакет.

CFBundleTypeName ключ указывает добрую строку типа документа, видимое пользователем описание раньше характеризовало документы этого типа на экране (такой как в окне Finder's Get Info или в столбце Kind представления списка Средства поиска). Этот ключ может быть локализован включением его в InfoPlist.strings файл надлежащего .lproj подкаталог. CFBundleTypeIconFile идентифицирует файл, содержащий изображение значка, которое будет использоваться для отображения документов этого типа на экране. LSTypeIsPackage указывает, является ли документ упакованным пакетом (true) или единственный файл (false).

Файлы, принадлежащие данному типу документа, могут быть охарактеризованы их типами файлов, расширениями файла или типами MIME. CFBundleTypeOSTypes введите словарь определения типа, указывает массив кодов типа файла с четырьмя символами, характеризующих документы этого типа; точно так же CFBundleTypeExtensions указывает массив расширений файла и CFBundleTypeMIMETypes массив типов MIME. Любой из этих отдельных ключей может быть опущен, если соответствующая характеристика файла не релевантна, но по крайней мере один из них должен присутствовать для типа файла, чтобы быть непустым. Чтобы позволить приложению принимать файлы неограниченного типа файла или расширения во время операций перетаскивания, можно использовать специальные подстановочные значения '****' или '*' для CFBundleOSTypes или CFBundleTypeExtensions, соответственно. (Их соблюдают только в операциях перетаскивания и не, когда пользователь открывает документ путем двойного щелчка.) Наконец, CFBundleTypeRole ключ указывает роль, которой приложение требует относительно документов данного типа, как описано под Ролями приложения.

Типы URL

Словарь определения схемы подобен словарю определения типа, но определяет тип URL — семья URLs, который приложение может обработать — а не тип документа. Таблица 1-3 показывает ключи в этом типе словаря. (См. Инструкции по Конфигурации Во время выполнения для более подробной информации об этих ключах.)

Табличные 1-3  Ключи в словаре определения схемы

Ключ

Ввести

Описание

CFBundleURLName

String

Абстрактное имя типа URL (также названный его доброй строкой)

CFBundleURLIconFile

String

Имя файла значка для отображения URLs этого типа

CFBundleURLSchemes

Array

Массив схем URL URLs, принадлежащего этому типу URL

CFBundleURLName ключ указывает строку вида типа URL, видимое пользователем описание раньше характеризовало URLs этого типа на экране (такой как в окне Finder's Get Info или в столбце Kind представления списка Средства поиска). Этот ключ может быть локализован включением его в InfoPlist.strings файл надлежащего .lproj подкаталог. CFBundleURLIconFile идентифицирует файл, содержащий изображение значка, которое будет использоваться для отображения URLs этого типа на экране.

URLs, принадлежащий данному типу URL, характеризуется их компонентами схемы, такой как http, ftp, mailto, или file. CFBundleURLSchemes введите словарь определения схемы, указывает массив схем, характеризующих URLs этого типа.

Роли приложения

В объявлении типа документа приложение может требовать определенной роли относительно документов того типа, определяя виды операций, приложение способно к выполнению на таких документах. Роль объявляется через CFBundleTypeRole введите словарь определения типа приложения для данного типа документа. Launch Services распознает три таких роли:

  • Editor. Приложение может считать, представить, управлять и сохранить документы данного типа.

  • Viewer. Приложение может считать и представить документы данного типа, но не может управлять или сохранить их.

  • None. Приложение не может воздействовать на документы данного типа. Эта роль полезна для объявления информации о типах документов, что приложение неспособно к открытию, таково как их абстрактные имена и файлы значков.

Launch Services определяет ряд констант битовой маски типа LSRolesMask обозначение различных возможных ролей. Функции Launch Services, находящие предпочтительное приложение для документа или семейства документов (LSGetApplicationForItem, LSGetApplicationForURL, и LSGetApplicationForInfo), или которые определяют, может ли данное приложение открыть определяемый документ (LSCanRefAcceptItem и LSCanURLAcceptURL), возьмите параметр этого типа для указания желаемой роли приложения относительно документа.

Регистрация приложений

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

Несмотря на эти автоматические регистрационные утилиты, может иногда быть необходимо зарегистрировать приложение явно в Launch Services. Например, несмотря на то, что разработчики призваны упаковать свои приложения так, чтобы они могли быть установлены путем простого перетаскивания их на диск пользователя, некоторые приложения могут потребовать более тщательно продуманного пользовательского программного обеспечения установщика. В таких случаях установщик должен вызвать одну из регистрационных функций Launch Services LSRegisterFSRef или LSRegisterURL зарегистрировать приложение явно.

Регистрационные функции берут булев параметр, inUpdate, когда приложение, зарегистрированное уже, существует в базе данных Launch Services, который управляет поведением функции. Если этот параметр true, Launch Services безусловно повторно регистрирует приложение, заменяя любую предыдущую информацию, которая может уже существовать для него в базе данных; если параметр false, приложение повторно регистрируется, только если его текущее время изменения более свежо, чем зарегистрированный в базе данных.

После внесения любого существенного изменения в Запуске приложения Связанная со службами информация необходимо или повторно зарегистрировать приложение явно путем вызова LSRegisterFSRef или LSRegisterURL с inUpdate набор к true, или обновите время изменения приложения, чтобы гарантировать, что это будет обновлено автоматическими регистрационными утилитами, описанными выше.

Операции открытия

Основная цель Launch Services к открытым приложениям, документам и URLs. Точно то, как это сделано, зависит от вида элемента, который будет открыт, как описано в следующих разделах.

Открытие приложений

Когда элемент, который будет открыт, является приложением (или URL со схемой file определяя приложение), проверки Launch Services, работает ли приложение уже и продолжается соответственно:

  • Если приложение уже не работает, Launch Services запускает его (запускает его), и отправляет его 'oapp' («открытое приложение») событие Apple. Приложение должно реагировать на это событие путем выполнения его нормальной обработки запуска.

  • Если приложение уже работает, Launch Services активируется, это (выявляет его экрана), и отправляет его 'rapp' (“вновь открывают приложение”), событие Apple. Это дает приложению команду принимать некоторые дополнительные меры, при необходимости, предоставлять визуальную обратную связь пользователю, что это стало активным: например, это могло бы открыть пустое окно документа или диалоговое окно создания документа, если это не имеет никаких других окон, уже открываются.

В любом случае Launch Services добавляет приложение на подменю Recent Items в Меню Apple.

Вводные документы

Если элемент, который будет открыт, является документом (или URL со схемой file определяя файл документа), Launch Services должна сначала определить что приложение использовать для открытия элемента. Это известно как предпочтительное приложение элемента. Как описано под Указанными пользователями Обязательными Предпочтениями, пользовательский интерфейс OS X позволяет пользователю указывать явную привязку между документом и его предпочтительным приложением. Если такая явная привязка была указана, она имеет приоритет по любым другим соображениям; в противном случае Launch Services использует ряд неявных обязательных критериев для определения предпочтительного приложения, как описано под Предпочтительными приложениями.

Как только предпочтительное приложение было определено, Launch Services запускает или активирует его (в зависимости от того, работает ли оно уже), и отправляет его 'odoc' (“открывают документ”), событие Apple, дающее ему команду открыть указанный документ. (Если документ должен быть распечатан, а не просто открыт, a 'pdoc' (“документ печати”), событие Apple отправляется вместо 'odoc'; в случае a file URL, если приложение утверждает, что обработало URLs с той схемой, оно отправляется a ‘GURL' (“получают URL”), событие Apple вместо этого.)

Наконец, Launch Services добавляет и приложение и документ (или URL) к подменю Recent Items в Меню Apple.

Открытие URLs

Если элементом URL со схемой кроме, который будет открыт является file, это открыто по существу тем же способом как документ, но за следующими исключениями:

  • Как описано под Предпочтительными приложениями, неявные обязательные критерии выбора предпочтительного приложения основываются на компоненте схемы URL’s, а не на подписи создателя, типе файла или расширении файла.

  • Событие Apple отправило к приложению после запуска, или активация его 'GURL' (“получают URL”), а не 'odoc' (“открывают документ”).

После того, как предпочтительное приложение запускается или активируется, Launch Services добавляет приложение на подменю Recent Items в Меню Apple.

Опции запуска

При открытии приложения (или отдельно или открыть один или несколько документов или URLs), можно указать различные опции запуска управлять способом, которым оно запускается или активируется. Они могут включать:

  • Открыть ли документы или URLs (если таковые имеются) в в частности определяемом приложении или в их собственных предпочтительных приложениях

  • Распечатать ли документы или URLs (если таковые имеются) или просто открыть их

  • Добавить ли приложение и документы (если таковые имеются) к меню Finder's Recent Items или подавить это действие

  • Разрешить ли приложению открыться в фоновом режиме или перестать работать, если это - приложение только для фона

  • Открыть ли приложение, не принося его к переднему плану

  • Разрешить ли приложению открыться в Классической среде эмуляции или перестать работать, если это - приложение Только для классики

  • Даже если другой экземпляр уже работает, запустить ли новый экземпляр приложения

  • Скрыть ли приложение после запуска его

  • Скрыть ли все другие приложения после запуска этого

  • Запустить ли приложение синхронно или асинхронно (см. следующий раздел),

Синхронный и асинхронный запуск

Одна из опций, которые можно указать при запуске приложения, - запустить ли его синхронно или асинхронно:

  • В синхронном запуске управление не возвращает из функции Launch Services запуск приложения, пока приложение не завершило свою последовательность запуска (обозначенный визуально пользователю, когда значок приложения прекращает «возвращаться» в Прикреплении).

  • В то время как значок в Прикреплении все еще «возвращается», в асинхронном запуске управление сразу возвращается. Когда последовательность запуска была завершена, Ваше приложение уведомляется с событием Carbon типа kEventAppLaunchNotification. Можно установить подпрограмму обратного вызова обработчика событий для ответа на это событие любым способом, является надлежащим. В Вашем вызове к функции Launch Services, запускающей приложение, можно предоставить произвольную 4-байтовую ссылочную константу, которая будет пасоваться назад к подпрограмме обработчика как часть события уведомления.

Указанные пользователями обязательные предпочтения

Первоочередная задача Launch Services в определении предпочтительного приложения для файла или нефайла, который - URL, указал ли пользователь явное обязательное предпочтение того элемента.

Выбор обязательного предпочтения файла

Пользователь может указать предпочтительное приложение для файла путем выбора элемента в Средстве поиска и выбора Команды для получения информации (см. рисунок 1-1).

  Выбор рисунка 1-1 получает информацию

Область Open With окна Get Info содержит всплывающее меню, перечисляющее все известные приложения в базе данных Launch Services, утверждающие, что приняли выбранный пункт (см. рисунок 1-2). Пользователь может тогда выбрать приложение из меню для становления предпочтительным приложением элемента (рисунок 1-3).

  
Get Info window
Рисунок 1-3 окна Get Info рисунка 1-2  , Выбирающий предпочтительное приложение для элемента
Selecting the preferred application for an item

Щелчок по кнопке Change All (рисунок 1-4) подает выбранную заявку предпочтительное приложение на все элементы того же документа или типа URL, а не только для единственного выбранного элемента.

Рисунок 1-4  , Выбирающий предпочтительное приложение для типа изделия
Selecting the preferred application for an item type

Иногда, пользователь может хотеть определять предпочтительное приложение, не утверждающее, что приняло данный документ или URL. (Это могло бы быть полезно, например, для вводных документов в закодированном текстом формате, таково как HTML как незакодированный текст в текстовом редакторе.) Другой элемент в открытом всплывающем меню области With открывает диалоговое окно, показанное на рисунке 1-5, в котором пользователь может перейти к требуемому приложению. Весь элемент Приложений в маркированном всплывающем меню Показывает наверху диалогового окна, позволяет любому требуемому приложению быть выбранным; Рекомендуемые приложения вызывают тех, которые не требуют принять, что недоступен элемент.

Рисунок 1-5  Выбирает диалоговое окно Other Application
Choose Other Application dialog

Выбор обязательного предпочтения URL

Нет никакого пользовательского интерфейса системного уровня для установки обработчиков схемы URL нефайла. Однако отдельные приложения могут позволить пользователям выбирать предпочтительное приложение для определенной схемы URL. Например:

  • Приложение Safari позволяет пользователям устанавливать http: обработчик путем выбора веб-браузера по умолчанию.

  • Почтовое приложение позволяет пользователям устанавливать mailto: обработчик путем выбора почтового читателя по умолчанию.

Предпочтительные приложения

Launch Services выполняет операцию привязки документа, когда она должна:

Launch Services использует серию приоритезированных обязательных критериев для определения предпочтительного приложения для открытия данного документа или URL. Они используются функциями Launch Services, открывающими файл документа (LSOpenFSRef, LSOpenFromRefSpec) или URL (LSOpenCFURLRef, LSOpenFromURLSpec), а также теми, которые просто определяют местоположение предпочтительного приложения для такого элемента, фактически не открывая его (LSGetApplicationForItem, LSGetApplicationForURL). Они также используются LSGetApplicationForInfo функция, определяющая местоположение предпочтительного приложения для открытия семьи элементов, определенных указанными характеристиками идентификации.

Предпочтительное приложение для документа

Для отдельных файлов документов (ли указанный ссылкой файловой системы или URL со схемой file), критерии следующие:

  1. Если пользователь указал явную привязку для документа (или для всего типа документа, которому он принадлежит), предпочтительное приложение является тем, которое указал пользователь.

  2. Если документ имеет расширение файла (или если Вы были указаны в качестве параметра к LSGetApplicationForInfo), найдите все приложения в базе данных Launch Services, утверждающие, что приняли документы с тем расширением.

  3. Если документ переносит тип файла с четырьмя символами (или если Вы были указаны в качестве параметра), найдите все приложения, утверждающие, что приняли файлы того типа.

  4. Если больше чем одно приложение было найдено в результате шагов 2-3, примените следующие критерии в показанном порядке:

    1. Если документ переносит подпись создателя с четырьмя символами (или если Вы были указаны в качестве параметра), дайте предпочтение любому приложению, утверждающему, что приняло документы с той подписью (обычно приложение, которому подпись принадлежит).

    2. Дайте предпочтение собственным приложениям OS X по тем, которые работают в Классической среде эмуляции.

    3. Дайте предпочтение приложениям, находящимся на загрузочном томе по тем, которые находятся на других томах файловой системы.

    4. Дайте предпочтение приложениям, находящимся на локальном томе по тем, которые находятся на удаленном объеме.

    5. Если две или больше версии того же приложения были найдены, дайте предпочтение тому с числом последней версии, как идентифицировано CFBundleVersion.

Если два или больше приложения кандидата остаются после того, как все предшествующие критерии были применены, Launch Services выбирает одно из остающихся приложений неуказанным способом.

Предпочтительное приложение для URL

Критерии URLs со схемами кроме file подобны тем для файлов документов, за исключением того, что поиск основывается на схеме URL’s, а не на характеристиках файла, таких как подпись создателя, расширение файла и тип файла:

  1. Если пользователь указал явную привязку для URL (или для всего типа URL, которому она принадлежит), предпочтительное приложение является тем, которое указал пользователь.

  2. Если никакая явная привязка не была указана, найдите все приложения в базе данных Launch Services, утверждающие, что приняли URLs с данной схемой.

  3. Если больше чем одно приложение было найдено на шаге 2, примените следующие критерии в показанном порядке:

    1. Дайте предпочтение собственным приложениям OS X по тем, которые работают в Классической среде эмуляции.

    2. Дайте предпочтение приложениям, находящимся на загрузочном томе по тем, которые находятся на других томах файловой системы.

    3. Дайте предпочтение приложениям, находящимся на локальном томе по тем, которые находятся на удаленном объеме.

    4. Если две или больше версии того же приложения были найдены, дайте предпочтение тому с числом последней версии.

Если два или больше приложения кандидата остаются после того, как все предшествующие критерии были применены, Launch Services выбирает одно из остающихся приложений неуказанным способом.