Руководство по игре в песочнице узла аудиоустройства
Это техническое примечание обеспечивает обзор изменений, которые Хост-приложение Аудиоустройства должно внести для принятия Тестовой среды приложения.
Эти изменения включают следующее:
Добавление надлежащих прав
Миграция на аудио компонент API
Проверка, чтобы видеть, являются ли Аудиоустройства Безопасной Песочницей
Компонентное использование Аудио Preflighting
AudioComponentCopyConfigurationInfoЗапись и разрешение Ограниченных по объему безопасностью закладок в Файлах AUPreset и Документах приложения
Предпосылки
Прежде, чем считать этот документ, необходимо ознакомить себя со следующими документами, объясняющими понятия Песочницы общего приложения и предоставляющими определенную информацию об Аудиоустройствах в поигравшей в песочнице среде:
Права и доступ системного ресурса
Узлу Аудиоустройства нужен доступ к определенным системным ресурсам для открытия Audio Units, используйте MIDI и читайте и файлы записи. Поигравший в песочнице узел должен объявить свои намерения выполнить эти действия через право.
Право является парой ключ/значение, идентифицирующей определенную возможность, такую как возможность использовать встроенный микрофон, и указанной в .entitlements файле списка свойств в XCode.
Общие права, которые можно хотеть добавить к поигравшему в песочнице хост-приложению AU:
Право | Цель |
|---|---|
com.apple.security.temporary exception.audio узел модуля | Позволяет открываться Аудиоустройств, которые не безопасны от песочницы |
com.apple.security.files.user-selected.read-write | Позволяет читать и записать выбранных файлов пользователя |
com.apple.security.files.bookmarks.document-объем | Позволяет читать и записать закладок безопасности объема документа |
com.apple.security.files.bookmarks.app-объем | Позволяет читать и записать закладок безопасности области действия приложения |
com.apple.security.temporary exception.mach lookup.global имя | Включает MIDI (Тип является массивом двух строковых значений). Посмотрите Таблицу 2. |
Строковые значения | Примечания |
|---|---|
com.apple.midiserver | Требуемый |
com.apple.midiserver.io | Дополнительный |
Когда Вы добавляете com.apple.security.temporary-exception.audio-unit-host entitlement, Вы получаете возможность загрузить Аудиоустройства, которые не безопасны от песочницы (больше на этом позже). То, когда не играют в песочнице безопасное Аудиоустройство, загружается, система покажет пользователю диалоговое окно, указывающее, что процесс пытается открыть Audio Component, который не является Безопасной Песочницей.
Для получения дополнительной информации о правах см.: Права и Доступ Системного ресурса
Используя аудио компонент API
Хост-приложения Аудиоустройства, работающие в Тестовой среде приложения, должны мигрировать на AudioComponent API и больше не могут полагаться на Менеджер компонентов, чтобы запросить, загрузить, или управлять компонентами. Только Аудио Плагины Компонента могут объявить себя безопасный открыться в поигравшем в песочнице процессе. Все компоненты Component Manager, как предполагается, небезопасны.
Проверка, чтобы видеть, безопасно ли Аудиоустройство От песочницы
Узлы Аудиоустройства, возможно, должны проверить, безопасно ли Аудиоустройство От песочницы прежде, чем попытаться открыть его. Безопасный Аудио Компонент “Песочницы” определяется, чтобы быть Аудио Компонентом, который может функционировать правильно в процессе, имеющем наиболее сильно ограничивающую Песочницу - предотвращение доступа к файловой системе, сети и драйверам в ядре.
Песочница Безопасный Аудио Компонент будет иметь kAudioComponentFlag_SandboxSafe флаг установлен в componentFlags поле его AudioComponentDescription. Если этот флаг не присутствует, Аудиоустройство может не быть безопасным от песочницы.
Посмотрите Техническое примечание TN2247 для фрагмента кода при Перечислении Песочницы Безопасные Аудио Компоненты.
Компоненты аудио Preflighting
Много приложений накапливают список различных Аудио Компонентов и их возможностей. Начиная с запросов Аудио Компонента для обнаружения то, что это делает, требует открытия Audio Component, это может заставить песочницу приложения отбрасывать, даже если приложение никогда не использует ни одного из запрошенных Аудио Компонентов.
Избегать отбрасывать песочницу приложения при запросах компонентов, нового AudioComponentCopyConfigurationInfo API может использоваться.
Проверка перечисления 1, чтобы видеть, имеет ли AudioComponent пользовательское представление, не открывая его.
AudioComponentDescription delayDescription; |
delayDescription.componentType = kAudioUnitType_Effect; |
delayDescription.componentSubType = kAudioUnitSubType_Delay; |
delayDescription.componentManufacturer = kAudioUnitManufacturer_Apple; |
AudioComponent delayReference = AudioComponentFindNext(NULL, &delayDescription); |
NSDictionary *configDictionary; |
OSStatus result = AudioComponentCopyConfigurationInfo(delayReference, &((CFDictionaryRef)configDictionary)); |
if (result != noErr && configDictionary) { |
BOOL hasCustomView = [[configDictionary objectForKey:@kAudioUnitConfigurationInfo_HasCustomView] boolValue]; |
NSLog(@“The delay effect %@ have a custom view”, hasCustomView ? @“does” : @“does not”); |
} |
Для получения дополнительной информации об этом API, посмотрите Техническое примечание TN2247.
Персистентный доступ к файлу
Узлы Аудиоустройства управляют загрузкой, сохранением и восстановлением предварительных установок Аудиоустройства, а также состояния Аудиоустройства, сохраненного в их файлах документов. Поскольку поигравшие в песочнице узлы имеют ограничения на доступ к файлу, заботу нужно соблюдать, чтобы гарантировать, что файлы могут быть сохранены и вновь открыты с минимумом взаимодействия с пользователем через запуски и даже другими Поигравшими в песочнице Узлами Аудиоустройства.
Это далее осложнено фактом, что Аудиоустройствам, возможно, понадобится доступ к внешним файлам, например, основанному на выборке Инструменту или эффекту реверберации, использующему файлы импульсной характеристики для моделирования ее сред. Следующие разделы обсуждают подробно изменения, которые должен внести узел, чтобы загрузить и сохранить предварительно установленные файлы Аудиоустройства и документы, гарантировав, что любые внешние ссылки являются загружаемыми Аудиоустройством.
Загрузка предварительно установленных файлов аудиоустройства
Аудиоустройства, что ссылочные внешние файлы и потребность узел для управления их доступом к файлу будут иметь раздел в своем предварительно установленном файле в следующем формате:
<key>file-references</key> |
<dict> |
<key>File 1</key> |
<string>/Users/Apple/Music/Samples/Boink.aiff</string> |
</dict> |
Словарь ссылок на файл содержит одну или более пар ключ/значение, где значение является путем к файлу, к которому нужно получить доступ. Если Предварительно установленный Файл Аудиоустройства не содержит этот ключ, узел не должен выполнять дополнительную работу.
Если узел имеет право для доступа к папке Music пользователя, в вышеупомянутом примере файл доступен. Узел может загрузить файл AUPreset, так как это имеет доступ к ссылке на файл, используемой в предварительной установке и расширением, Аудиоустройство - также.
Если, однако, местоположение файловой системы за пределами контейнера узлов или в расположении, которое не доступно через право (такой как на рабочем столе или внешнем объеме), узел должен был бы спросить разрешение от пользователя получить доступ к файлу путем прохождения через Блока питания. См. Руководство по проектированию Тестовой среды приложения для получения дополнительной информации.
Как этот дополнительный уровень взаимодействия с пользователем каждый раз, когда предварительная установка загружается, может быть нежелательным пользователю, предварительно установленный файл имеет стандартный механизм для персистентного безопасного доступа к файлу. Дополнительный ключ, безопасные ссылки файла, содержит словарь, который подобен словарю ссылок на файл за исключением того, что значение содержит объект NSData, который является ограниченной по объему документом закладкой безопасности для файла, указанного ключом.
<key>file-secure-references</key> |
<dict> |
<key>File 1</key> |
<data> |
Ym9va9AC1THISISNOTVALIDDATAiVEKsUkH83gyyVB11mwqxk2XWd7RiOVDs |
... |
DAgBAAAAAAAAEcAAABQAAAAAAAAAEsAAABgBAAAAAAAAENAAAKgBAAAAAAAA |
</data> |
</dict> |
Если этот ключ присутствует в предварительно установленном словаре, узел может разрешить использование URL


Узел должен проверить, что URL, разрешенный в данных закладки, относится к тому же файлу, содержащемуся в словаре ссылок на файл с соответствующим ключом. Если они отличаются, то узел должен предположить, что закладка является устаревшей, и попросите у пользователя разрешения получить доступ к файлу (через стандартное диалоговое окно файла). Если пользователь дает разрешение получать доступ к файлу, узел должен обновить раздел безопасных ссылок на файл с недавно создаваемой ограниченной по объему документом закладкой на основе файла, который пользователь выбрал для обеспечения персистентного доступа к файлу. Если пользователь выбирает различный файл, узел должен также обновить запись пути ссылок на файл.
Ограниченные по объему документом закладки могут только сослаться на единственный файл, не каталог. Пользователь должен будет индивидуально предоставить доступ к каждому файлу, используемому предварительной установкой. Именно поэтому очень важно сохранить ограниченные по объему документом закладки для каждого файла, таким образом, пользователь только должен предоставить доступ в первый раз, когда предварительно установленный файл используется.
Запись предварительных установок аудиоустройства
Хост-приложение должно гарантировать, что любой недавно создал файлы AUPreset, имеют соответствующий раздел безопасных ссылок файла для любых записей ссылок на файл с допустимыми ограниченными по объему документом закладками. Ограниченная по объему документом закладка может быть создана или при помощи
Сохранение и восстановление документов приложения
Документы приложения содержат сохраненное состояние каждого Аудиоустройства в его графике, и они могут также содержать ссылки на аудиофайлы. Как с Предварительными установками Аудиоустройства, хост-приложение ответственно за создание ограниченных по объему безопасностью закладок для каждого из этих элементов, которые являются за пределами его доступной файловой системы так, чтобы документы могли быть вновь открыты без взаимодействия с пользователем. Закладки должны быть ограничены по объему приложением, поскольку эти файлы не должны быть открыты другими узлами.
История версии документа
| Дата | Примечания |
|---|---|
| 06.03.2014 | Фиксированный плохой URLs. |
| 16.05.2013 | Новый документ, что это руководство обеспечивает обзор изменений, которые Хост-приложение Аудиоустройства должно внести для принятия Тестовой среды приложения. |