Проблемы игры в песочнице распространенного приложения
Q: Каковы некоторые вещи, которые я должен проверить прежде, чем распределить мое поигравшее в песочнице приложение?
A: Прежде, чем распределить поигравшее в песочнице приложение через App Store Mac, или непосредственно к конечным пользователям, необходимо удостовериться, что его конфигурация игры в песочнице следует за методами наиболее успешной практики, описанными в этом списке.
Удостоверьтесь, что Ваше приложение использует каждое право в своем дающем право файле. Если для Вашего приложения не нужно право, оно не должно присутствовать в дающем право файле.
Удостоверьтесь, что Вы позволили играть в песочнице на всех Мужественных исполнимых программах, включенных в пакет Вашего приложения. Каждая Мужественная исполнимая программа должна иметь дающий право файл и запросить
com.apple.security.app-sandboxправо. Это включает службы XPC и пользовательские инструменты помощника, запрашивающиеcom.apple.security.inheritправо. Они должны также запроситьcom.apple.security.app-sandboxправо.Можно проверить, является ли двоичный файл Мужественной исполнимой программой с помощью
fileкоманда. Если какая-либо часть двоичного файла идентифицирует себя какMach-O executableилиMach-O 64-bit executable, двоичный файл должен поиграться в песочнице.Перечисление 1 , Выполняющее команду файла на Мужественном двоичном файле, который является исполнимой программой.
$ file /Applications/Safari.app/Contents/MacOS/Safari
/Applications/Safari.app/Contents/MacOS/Safari: Mach-O universal binary with 2 architectures
/Applications/Safari.app/Contents/MacOS/Safari (for architecture i386): Mach-O executable i386
/Applications/Safari.app/Contents/MacOS/Safari (for architecture x86_64): Mach-O 64-bit executable x86_64
Перечисление 2 , Выполняющее команду файла на Мужественном двоичном файле, который НЕ является исполнимой программой.
$ file /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation: Mach-O universal binary with 2 architectures
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (for architecture i386): Mach-O dynamically linked shared library i386
Можно использовать следующую команду для нахождения всех Мужественных исполнимых программ в скомпилированном комплекте приложений.
find -H YourAppBundle -print0 | xargs -0 file | grep "Mach-O .*executable"Удостоверьтесь, что каждый путь файловой системы, указанный в Ваших правах, начинается '/'. Это включает и абсолютные пути и пути относительно корневого каталога текущего пользователя. Кроме того, удостоверьтесь, что '~' символ не появляется нигде по пути, который является относительно корневого каталога пользователя.
Удостоверьтесь, что Ваше приложение не запрашивает исключение доступа к файлу в целях разрешения его пропустить представление открытого или сохранить диалоговое окно, чтобы считать или записать файлы от имени пользователя. Например, доступ к папкам Desktop или Documents должен всегда инициироваться пользователем. Вы не должны запрашивать исключение на эти расположения.
Удостоверьтесь, что Ваше приложение не запрашивает исключение доступа к файлу в целях предоставления его доступ к данным другого приложения или данным системы. Поигравшие в песочнице приложения не должны полагаться на доступ для чтения или доступ для записи к файлам, которые они не создавали или не были предоставлены явный доступ к для их работы.
Удостоверьтесь, что Ваше приложение не запрашивает исключение доступа к файлу на расположение, к которому оно уже имеет доступ. Каждое поигравшее в песочнице приложение является неявно предоставленным доступом к различным каталогам в системе вне их собственного контейнера. Эти каталоги содержат файлы, характерные для работы всех приложений, например, / стеллаж и/System/Library/Frameworks. Запрос исключений к этим расположениям избыточен. Прежде, чем запросить исключение, необходимо быть в состоянии продемонстрировать вариант использования, который встретится с нарушением песочницы, если не будет присутствовать исключение.
Если Ваши запросы приложения
com.apple.security.temporary-exception.apple-eventsилиcom.apple.security.temporary-exception.mach-lookup.global-nameправа, удостоверьтесь, что Вы обеспечили массив строк для значения права, как детализировано в Дающей право Ключевой Ссылке для того права. Необходимо быть определенными при указании значений для этих прав. Нет никакого значения, которое предоставит Ваш доступ к приложениям каждому приложению, установленному в системе пользователя.При редактировании дающего право файла вручную в противоположность использованию редактора списка свойств в XCode удостоверьтесь, что Вы не представили синтаксических ошибок. Дающий право файл должен содержать допустимую структуру списка свойств. Можно использовать plutil команду для проверки дающего право файла на синтаксические ошибки. Частая ошибка входит
YES/NOвместо синтаксически корректногоtrue/falseпри указании значения булевской переменной.Перечисление 3 , Выполняющее plutil команду на дающем право файле с синтаксической ошибкой.
$ plutil Invalid-Entitlements.plist
Invalid-Entitlements.plist: Encountered unknown tag YES on line 6
Перечисление 4 , Выполняющее plutil команду на синтаксически корректном дающем право файле.
$ plutil Valid-Entitlements.plist
Valid-Entitlements.plist: OK
История версии документа
| Дата | Примечания |
|---|---|
| 02.04.2013 | Новый документ, выделяющий проблемы реализации песочницы распространенного приложения. |