Основы файловой системы
Файловые системы в OS X и iOS обрабатывают персистентное хранение файлов данных, приложений и файлов, связанных с самой операционной системой. Поэтому файловая система является одним из фундаментальных ресурсов, используемых всеми процессами.
Файловые системы в OS X и iOS оба на основе файловой системы UNIX. Все диски, присоединенные к компьютеру — включаются ли они физически в компьютер или соединяются косвенно через сеть — вносят пространство для создания единственного набора файлов. Поскольку число файлов может легко быть многими миллионами, файловая система использует каталоги для создания иерархической организации. Несмотря на то, что основные структуры каталогов подобны для iOS и OS X, существуют различия в способе, которым каждая система организует пользовательские данные и приложения.
Прежде чем Вы начнете писать код, взаимодействующий с файловой системой, необходимо сначала понять немного об организации файловой системы и правил, применяющихся к коду. Кроме основного принципа, что Вы не можете записать файлы в каталоги, для которых у Вас нет надлежащих полномочий безопасности, приложения, как также ожидают, будут добропорядочными гражданами и поместят файлы в надлежащие места. Точно то, куда Вы помещаете файлы, зависит от платформы, но всеобъемлющая цель состоит в том, чтобы удостовериться, что файлы пользователя остаются легко поддающимися обнаружению и что файлы Ваше использование кода внутренне не допущены в путь пользователя.
О Файловой системе iOS
Файловая система iOS приспособлена к приложениям, работающим самостоятельно. Для хранения системы простой у пользователей устройств на iOS нет прямого доступа к файловой системе, и приложения, как ожидают, будут следовать этому соглашению.
Каждым приложением является остров
Взаимодействия приложения для iOS с файловой системой ограничиваются главным образом каталогами в песочнице приложения. Во время установки нового приложения установщик создает много контейнеров для приложения. Каждый контейнер имеет определенную роль. Контейнер пакета содержит пакет приложения, тогда как контейнер данных содержит данные и для приложения и для пользователя. Контейнер данных далее разделен на многие каталоги, которые приложение может использовать, чтобы сортировать и организовать его данные. Приложение может также запросить доступ к дополнительным контейнерам — например, контейнеру iCloud — во время выполнения.
Эти контейнеры составляют основное представление приложения файловой системы. Рисунок 1-1 показывает представление песочницы для приложения.
Поскольку это находится в песочнице, приложению обычно мешают получить доступ или создать файлы вне его контейнеров. Когда приложение использует общедоступные системные интерфейсы для доступа к вещам, таким как контакты или музыка пользователя, одно исключение к этому правилу происходит. В тех случаях системные платформы обрабатывают любые связанные с файлом операции, должен был читать из или изменить надлежащие хранилища данных.
Каталоги Стандарта iOS: Где Находятся Файлы
В целях безопасности приложение для iOS ограничило много мест, где оно может записать свои данные. Когда приложение установлено на устройстве (или от iTunes или от App Store), система создает много контейнеров для приложения. Эти контейнеры представляют вселенную для того приложения и содержат все, к чему приложение может получить доступ непосредственно. Таблица 1-1 перечисляет некоторые важные подкаталоги в этих контейнерах и описывает их намеченное использование. Эта таблица также описывает любые дополнительные ограничения доступа на каждый подкаталог и указывает, копируется ли содержание каталога iTunes.
Каталог | Описание |
---|---|
AppName | Это - пакет приложения. Этот каталог содержит приложение и все его ресурсы. Вы не можете записать в этот каталог. Для предотвращения вмешательства каталог пакета подписывается во время установки. Запись в этот каталог изменяет подпись и препятствует тому, чтобы запустилось Ваше приложение. Можно, однако, получить доступ только для чтения к любым ресурсам, сохраненным в пакете приложений. Для получения дополнительной информации см. Руководство по программированию Ресурса Содержание этого каталога не копируется iTunes. Однако iTunes действительно выполняет начальную синхронизацию любых приложений, купленных от App Store. |
| Используйте этот каталог для хранения сгенерированного пользователями содержания. Содержание этого каталога может быть сделано доступным для пользователя посредством совместного доступа к файлам; поэтому, его каталог должен только содержать файлы, которые можно хотеть представить пользователю. Содержание этого каталога копируется iTunes. |
| Используйте этот каталог для доступа к файлам, которые приложение попросили открыть внешними объектами. В частности Почтовые почтовые присоединения мест программы связались с Вашим приложением в этом каталоге. Контроллеры взаимодействия документа могут также поместить файлы в него. Ваше приложение может считать и удалить файлы в этом каталоге, но не может создать новые файлы или записать в существующие файлы. Если пользователь пытается отредактировать файл в этом каталоге, Ваше приложение должно тихо переместить его из каталога прежде, чем внести любые изменения. Содержание этого каталога копируется iTunes. |
| Это - каталог верхнего уровня для любых файлов, которые не являются пользовательскими файлами данных. Вы обычно помещаете файлы в один из нескольких стандартных подкаталогов. приложения для iOS обычно используют Используйте Содержание Для получения дополнительной информации о каталоге Library и его обычно используемых подкаталогах, посмотрите, что Каталог Библиотеки Хранит Специфичные для приложения Файлы. |
| Используйте этот каталог для записи временных файлов, которые не должны сохраняться между запусками приложения. Ваше приложение должно удалить файлы из этого каталога, когда они больше не необходимы; однако, когда Ваше приложение не работает, система может произвести чистку этого каталога. Содержание этого каталога не копируется iTunes. |
Приложение для iOS может создать дополнительные каталоги в Documents
, Library
, и tmp
каталоги. Вы могли бы сделать это для лучше организации файлов в тех расположениях.
Для получения информации о том, как получить ссылки на предыдущие каталоги из Вашего приложения для iOS, посмотрите Располагающиеся Элементы в Стандартных Каталогах. Для подсказок относительно того, куда поместить файлы, посмотрите, Куда Необходимо Поместить Файлы Приложения.
Куда необходимо поместить файлы приложения
Предотвратить синхронизацию и процессы резервного копирования на устройствах на iOS от занимания много времени, быть выборочным о том, куда Вы помещаете файлы. Приложения, хранящие большие файлы, могут замедлить процесс поддержки до iTunes или iCloud. Эти приложения могут также использовать большую сумму доступного хранения пользователя, которое может призвать пользователя удалять приложение или отключать резервное копирование данных того приложения к iCloud. С этим в памяти, необходимо хранить данные приложения согласно следующим инструкциям:
Вставьте пользовательские данные
Documents/
. Пользовательские данные обычно включают любые файлы, которые Вы могли бы хотеть представить пользователю — что-либо, что Вы могли бы хотеть, чтобы пользователь создал, импортировал, удалил или отредактировал. Для приложения получения пользовательские данные включают любые графические файлы, которые мог бы создать пользователь. Для текстового редактора это включает текстовые файлы. Видео и аудио приложения могут даже включать файлы, которые пользователь загрузил, чтобы смотреть или слушать позже.Вставьте создаваемые из приложения файлы поддержки
Library/Application support/
каталог. В целом этот каталог включает файлы, которые приложение использует для выполненного, но это должно остаться скрытым от пользователя. Этот каталог может также включать файлы данных, конфигурационные файлы, шаблоны и измененные версии ресурсов, загруженных из комплекта приложений.Помните это файлы в
Documents/
иApplication Support/
копируются по умолчанию. Можно исключить файлы из резервного копирования путем вызова-[NSURL setResourceValue:forKey:error:]
использованиеNSURLIsExcludedFromBackupKey
ключ. Любой файл, который может быть воссоздан или загружен, должен быть исключен из резервного копирования. Это особенно важно для больших медиа-файлов. Если Ваши видеофайлы загрузок приложений или аудиофайлы, удостоверьтесь, что они не включены в резервное копирование.Вставьте временные данные
tmp/
каталог. Временные данные включают любые данные, которые Вы не должны сохранять в течение длительного периода времени. Не забудьте удалять те файлы, когда Вы сделаны с ними так, чтобы они не продолжали занимать место на устройстве пользователя. Когда Ваше приложение не будет работать, система будет периодически производить чистку этих файлов; поэтому, Вы не можете полагаться на эти файлы, сохраняющиеся после того, как завершится Ваше приложение.Вставьте файлы кэша данных
Library/Caches/
каталог. Данные кэша могут использоваться для любых данных, которые должны сохраниться дольше, чем временные данные, но не пока файл поддержки. Вообще говоря, приложение не требует, чтобы данные кэша работали должным образом, но это может использовать данные кэша для улучшения производительности. Примеры данных кэша включают (но не ограничиваются), файлы кэша базы данных и переходное, загружаемое содержание. Обратите внимание на то, что система может удалитьCaches/
каталог для высвобождения дискового пространства, таким образом, приложение должно быть в состоянии воссоздать или загрузить эти файлы по мере необходимости.
О файловой системе OS X
Файловая система OS X разработана для компьютеров Macintosh, где у обоих пользователей и программного обеспечения есть доступ к файловой системе. Пользователи получают доступ к файловой системе непосредственно через Средство поиска, представляющее ориентированное пользователями представление файловой системы путем сокрытия или переименования некоторых файлов и каталогов. Приложения получают доступ к файловой системе с помощью системных интерфейсов, показывающих полную файловую систему точно, как это появляется на диске.
Домены определяют размещение файлов
В OS X файловая система разделена на многократные домены, разделяющие файлы и ресурсы на основе их намеченного использования. Это разделение предоставляет простоту пользователю, который только должен волноваться об определенном подмножестве файлов. Расположение файлов доменом также позволяет системе применить общие права доступа к файлам в том домене, препятствуя тому, чтобы неавторизованные пользователи изменили файлы преднамеренно или непреднамеренно.
Пользовательский домен содержит ресурсы, определенные для пользователей, входящих в систему. Несмотря на то, что это технически охватывает всех пользователей, этот домен отражает только корневой каталог текущего пользователя во время выполнения. Пользовательские корневые каталоги могут находиться на загрузочном томе компьютера (в
/Users
каталог) или на сетевом томе. У каждого пользователя (независимо от полномочий) есть доступ к и управление файлами в его или ее собственном корневом каталоге.Локальный домен содержит ресурсы, такие как приложения, которые локальны для данного компьютера и совместно использованные среди всех пользователей того компьютера. Локальный домен не соответствует единственному физическому каталогу, но вместо этого состоит из нескольких каталогов на локальной начальной загрузке (и корень) объем. Этим доменом обычно управляет система, но пользователи с административными привилегиями могут добавить, удалить или изменить элементы в этом домене.
Сетевой домен содержит ресурсы, такие как приложения и документы, совместно использующиеся среди всех пользователей локальной сети. Элементы в этом домене обычно располагаются на сетевых файловых серверах и находятся под контролем администратора сети.
Системный домен содержит системное программное обеспечение, установленное Apple. Ресурсы в системном домене требуются системой работать. Пользователи не могут добавить, удалить или изменить элементы в этом домене.
Рисунок 1-2 показывает, как локальная переменная, система и пользовательские домены отображаются на локальную файловую систему установки OS X. (Сетевой домен не показан, но подобен во многих отношениях локальному домену.) Эти данные показывают видимые каталоги, что мог бы видеть пользователь. В зависимости от системы пользователя другие каталоги могут быть видимы, или некоторые из тех показанных здесь могут быть скрыты.
Для получения информации о содержании каталогов в OS X см. Каталоги Стандарта OS X: Где Находятся Файлы. Для получения информации о каталогах, которые OS X обычно скрывает от пользователя (и почему), посмотрите Скрытые файлы и Каталоги: Упрощение Пользовательского Опыта.
Каталоги стандарта OS X: где находятся файлы
Имеет ли предоставленный системой или создаваемый Вашим приложением, каждый файл свое место в OS X. Таблица 1-2 перечисляет некоторые каталоги верхнего уровня в установке OS X и типах содержания, которое каждый содержит.
Каталог | Использование |
---|---|
| Этот каталог - то, где Вы устанавливаете приложения, предназначенные для использования всеми пользователями компьютера. App Store устанавливает приложения, купленные пользователем в этом каталоге автоматически. Этот каталог является частью локального домена. |
| Там многократны Для получения дальнейшей информации о содержании этого каталога и как Вы используете его для поддержки приложений, посмотрите, что Каталог Библиотеки Хранит Специфичные для приложения Файлы. |
| Этот каталог содержит список компьютеров в локальной сети. Нет никакой гарантии, что файлы, расположенные на сетевых файловых серверах, будут иметь |
| Этот каталог содержит системные ресурсы, требуемые OS X работать. Эти ресурсы предоставлены Apple и не должны быть изменены. Этот каталог включает содержание системного домена. |
| Этот каталог содержит один или несколько пользовательских корневых каталогов. Пользовательский корневой каталог - то, где хранятся связанные с пользователем файлы. Корневой каталог типичного пользователя включает следующие подкаталоги:
Предыдущие каталоги для того, чтобы хранить пользовательские документы и носители только. Приложения не должны писать файлы в предыдущие каталоги, если явно не направлено сделать так пользователем. Единственное исключение к этому правилу Из подкаталогов, только |
Несмотря на то, что каталоги в Таблице 1-2 - те замеченные пользователями OS X, они не единственное настоящее каталогов в файловой системе. OS X скрывает много каталогов, чтобы препятствовать тому, чтобы пользователи получили доступ к файлам, что они не должны.
Поигравшие в песочнице контейнеры файла приложения OS X
Поигравшиеся в песочнице приложения OS X имеют все их Application Support
, Cache
, временные каталоги и другие связанные документы сохранили в каталоге, расположенном в системном определенном тракте, который можно получить путем вызова NSHomeDirectory
функция.
Для получения дополнительной информации см. Руководство по проектированию Тестовой среды приложения.
Скрытые файлы и каталоги: упрощение пользовательского опыта
Для упрощения опыта для пользователей Средство поиска и некоторые определенные бывшие обращенным к пользователю интерфейсы (такие как панели Open и Save), скрывают много файлов и каталогов, которые никогда не придется использовать пользователю. Многие скрытые элементы являются системой - или специфичные для приложения ресурсы, что пользователи не могут (или не должен), доступ непосредственно. Среди файлов и каталогов, которые скрыты, следующее:
Точечные каталоги и файлы. Любой файл или каталог, имя которого запускается с периода (
.
) символ скрыт автоматически. Это соглашение взято от UNIX, использовавшего его для сокрытия системных сценариев и других специальных типов файлов и каталогов. Два специальных каталога в этой категории.
и..
каталоги, которые являются ссылками на текущие и родительские каталоги соответственно.Специфичные для UNIX каталоги. Каталоги в этой категории наследованы от традиционных установок UNIX. Они - важная часть уровня BSD системы, но более полезны для разработчиков программного обеспечения, чем конечные пользователи. Некоторые более важные каталоги, которые скрыты, включают:
/bin
— Содержит существенные двоичные файлы командной строки. Как правило, Вы выполняете эти двоичные файлы из сценариев командной строки./dev
— Содержит существенные файлы устройств, такие как точки монтирования для присоединенных аппаратных средств./etc
— Содержит специфичные для узла конфигурационные файлы./sbin
— Содержит существенные системные двоичные файлы./tmp
— Содержит временные файлы, создаваемые приложениями и системой./usr
— Содержит несущественные двоичные файлы командной строки, библиотеки, заголовочные файлы и другие данные./var
— Содержит файлы журнала и другие файлы, содержание которых является переменным. (Файлы журнала обычно просматриваются с помощью Консольного приложения.)
Явно скрытые файлы и каталоги. Средство поиска может скрыть определенные файлы или каталоги, к которым не должен получать доступ непосредственно пользователь. Самый известный пример этого
/Volumes
каталог, содержащий подкаталог для каждого смонтированного диска в локальной файловой системе из командной строки. (Средство поиска обеспечивает различный пользовательский интерфейс для доступа к локальным дискам.) В OS X 10.7 и позже, Средство поиска также скрывается~/Library
каталог — т.е.Library
каталог расположился в корневом каталоге пользователя.Пакеты и пакеты. Пакеты и пакеты являются каталогами, которые Средство поиска представляет пользователю, как будто они были файлами. Пакеты скрывают внутренние работы исполнимых программ, такие как приложения и просто представляют единственный объект, который может быть перемещен вокруг файловой системы легко. Точно так же пакеты позволяют приложениям реализовывать форматы составного документа, состоящие из многократных отдельных файлов при тихом представлении того, что, кажется, единый документ пользователю.
Несмотря на то, что Средство поиска и другие системные интерфейсы скрывают файлы и каталоги от пользователя, интерфейсы Какао такой как NSFileManager
не отфильтровывайте файлы или каталоги, которые обычно невидимы для пользователей. Таким образом код, использующий эти интерфейсы теоретически, имеет полное представление о файловой системе и ее содержании. (Конечно, процесс действительно имеет доступ к только тем файлам и каталогам, для которых это имеет надлежащие полномочия.)
Файлы и каталоги могут иметь альтернативные названия
В некоторых ситуациях Средство поиска дарит пользователям имена файла или каталога, не соответствующие подлинные имена, поскольку они появляются в файловой системе. Эти имена известны как имена дисплея и используются только Средством поиска и определенными системными компонентами (такими как панели Open и Save) при представлении файла и информации о каталоге пользователю. Имена дисплея улучшают пользовательский опыт путем предоставления пользователю содержание более дружественным способом. Например, OS X использует имена дисплея в следующих ситуациях:
Локализованные имена. Система обеспечивает локализованные имена для многих системных каталогов, такой как
Applications
,Library
,Music
,Movies
. Приложение может так же обеспечить локализованные имена для себя, и для любых каталогов оно создает.Сокрытие расширения файла. Система скрывает расширения файла для всех файлов по умолчанию. Пользователь может изменить опцию, но когда сокрытие расширения файла имеет силу, символы после того, как прошлый период в имени файла (и сам период) не выведены на экран.
Имена дисплея не влияют на подлинное имя файла в файловой системе. Кодируйте это получает доступ к файлу или каталогу, программно должен указать подлинное имя элемента при открытии или управлении элементом с помощью интерфейсов файловой системы. Единственное время Ваше приложение должно когда-либо использовать имена дисплея, при отображении имени файла или каталога пользователю. Можно получить имя дисплея для любого файла или каталога с помощью displayNameAtPath:
метод NSFileManager
.
Для получения информации о том, как локализовать каталоги, которые создает Ваше приложение, посмотрите Файловую систему Усовершенствованные Темы Программирования. Для получения дополнительной информации о локализации содержимого приложения, посмотрите Руководство по Интернационализации и Локализации.
Каталог библиотеки хранит специфичные для приложения файлы
Library
каталог - то, где приложения и другие модули кода хранят свои пользовательские файлы данных. Независимо от того, пишете ли Вы код для iOS или OS X, понимая структуру Library
каталог важен. Вы используете этот каталог для хранения файлов данных, кэшей, ресурсов, предпочтений, и даже пользовательских данных в некоторых особых ситуациях.
Существуют несколько Library
каталоги по всей системе, но только некоторым, к которым Ваш код должен когда-либо должен быть получить доступ:
Library
в текущем корневом каталоге — Это - версия каталога, Вы используете большинство, потому что это - то, содержащее все специфичные для пользователя файлы. В iOS,Library
помещается в пакете данных приложений. В OS X это - каталог песочницы приложения или корневой каталог текущего пользователя (если приложение не находится в песочнице)./Library
(Только OS X) — Приложения, совместно использующие ресурсы между пользователями, хранят те ресурсы в этой версииLibrary
каталог. Поигравшим в песочнице приложениям не разрешают использовать этот каталог./System/Library
(Только OS X) — Этот каталог резервируется для использования Apple.
После выбора, какую версию каталога Library использовать, все еще необходимо знать, где хранить файлы. Сам каталог Library содержит несколько подкаталогов, подразделяющих специфичное для приложения содержание на несколько известных категорий. Таблица 1-3 перечисляет наиболее распространенные подкаталоги, которые Вы могли бы использовать. Несмотря на то, что каталоги Library в OS X содержат еще много подкаталогов, чем те перечисленные, большинство используется только системой. Если Вы хотите больше полного списка подкаталогов, тем не менее, посмотрите Подробные данные Каталога Библиотеки OS X.
Каталог | Использование |
---|---|
| Используйте этот каталог для хранения всех файлов данных приложения кроме связанных с документами пользователя. Например, Вы могли бы использовать этот каталог, чтобы хранить файлы данных приложений, конфигурационные файлы, шаблоны или другие фиксированные или модифицируемые ресурсы, которыми управляет приложение. Приложение могло бы использовать этот каталог для хранения модифицируемой копии ресурсов, содержавшихся первоначально в пакете приложения. Игра могла бы использовать этот каталог для хранения новых уровней, купленных пользователем и загруженных с сервера. Все содержание в этом каталоге должно быть помещено в пользовательский подкаталог, имя которого является именем идентификатора пакета Вашего приложения или Вашей компании. В iOS содержание этого каталога копируется iTunes. |
| Используйте этот каталог для записи любых специфичных для приложения файлов поддержки, которые приложение может воссоздать легко. Ваше приложение обычно ответственно за управление содержанием этого каталога и для добавления и удаления файлов по мере необходимости. В iOS 2.2 и позже, содержание этого каталога не копируется iTunes. Кроме того, iTunes удаляет файлы в этом каталоге во время полного восстановления устройства. На iOS 5.0 и позже, система может удалить |
| В OS X платформы, которые должны быть совместно использованы многократными приложениями, могут быть установлены или в локальном домене или в пользовательском домене. Каталог Frameworks в системном домене хранит платформы, которые Вы используете для создания приложений OS X. В iOS приложения не могут установить пользовательские платформы. |
| Этот каталог содержит специфичные для приложения предпочтительные файлы. Вы не должны создавать файлы в этом каталоге сами. Вместо этого используйте В iOS содержание этого каталога копируется iTunes. |
Контейнер Хранилища файлов iCloud
iCloud обеспечивает структурированную систему для того, чтобы хранить файлы для приложений, использующих iCloud:
Приложения имеют основной каталог контейнера iCloud для того, чтобы хранить их собственные файлы. Они могут также получить доступ к вторичным каталогам контейнера iCloud, перечисленным в их правах приложения.
В каждом контейнерном каталоге файлы являются отдельными в «документы» и данные. Каждый файл или пакет файла расположились в
Documents
подкаталог (или один из его подкаталогов) представлен пользователю (через iCloud UI в OS X и iOS) как отдельный документ, который может быть удален индивидуально. Что-либо не вDocuments
или один из его подкаталогов обработан как данные и показан как единственная запись в iCloud UI.
Документы, которые пользователь создает и видит в пользовательском интерфейсе приложения — например, браузеры документа на Страницах, Числах и Представлении ведущих идей, должны храниться в Documents
каталог. Другой пример файлов, которые могли бы войти Documents
каталог является сохраненными играми, снова потому что они - что-то, что приложение могло потенциально обеспечить своего рода метод для выбора.
Что-либо, что приложение не хочет, чтобы пользователь видел или изменил непосредственно, должно быть помещено за пределами Documents
каталог. Приложения могут создать любые подкаталоги в контейнерном каталоге, таким образом, они могут расположить частные файлы, как желаемый.
Приложения создают файлы и каталоги в каталогах контейнера iCloud точно таким же образом, как они создают локальные файлы и каталоги. И атрибуты всего файла сохраняются, если они добавляют расширенные атрибуты к файлу, те атрибуты копируются в iCloud и в другие устройства пользователя также.
контейнеры iCloud также позволяют хранение пар ключ/значение, к которым можно легко получить доступ, не имея необходимость создавать формат документа.
Как система идентифицирует тип содержания в файле
Существует два основных метода для идентификации типа содержания в файле:
Универсальные идентификаторы типов (UTIs)
Расширения файла
Универсальный идентификатор типа является строкой, однозначно определяющей класс объектов, которые, как полагают, имели «тип». UTIs обеспечивают непротиворечивые идентификаторы для данных, которые все приложения и службы могут распознать и положиться. Они также более гибки, чем большинство других методов, потому что можно использовать их для представления любого типа данных, не только файлов и каталогов. Примеры UTIs включают:
public.text
— Открытый тип, идентифицирующий текстовые данные.public.jpeg
— Открытый тип, идентифицирующий данные изображения JPEG.com.apple.bundle
— Тип Apple, идентифицирующий каталог пакета.com.apple.application-bundle
— Тип Apple, идентифицирующий связанное приложение.
Каждый раз, когда основанный на UTI интерфейс доступен для указания типов файлов, необходимо предпочесть что интерфейс по любым другим. Много интерфейсов OS X позволяют Вам указывать соответствие UTIs файлам или каталогам, с которыми Вы хотите работать. Например, в панели Open, можно использовать UTIs в качестве фильтров файла и ограничить типы файлов, которые пользователь выбирает к, которые может обработать приложение. Несколько классов AppKit, включая NSDocument
, NSPasteboard
, и NSImage
, поддержка UTIs. В iOS UTIs используются, чтобы указать, что область монтажа вводит только.
Одним путем система решает, что UTI для данного файла путем рассмотрения его расширения файла. Расширение файла является строкой символов, добавленных до конца файла и разделенных от основного имени файла с периодом. Каждая уникальная строка символов идентифицирует файл определенного типа. Например, .strings
расширение идентифицирует файл ресурсов с данными локализуемой строки в то время как .png
расширение идентифицирует файл с данными изображения в формате переносимой сетевой графики.
Если Ваше приложение определяет пользовательские форматы файлов, необходимо зарегистрировать те форматы и любые связанные расширения файла в приложении Info.plist
файл. CFBundleDocumentTypes
ключ указывает форматы файлов, которые Ваше приложение распознает и в состоянии открыться. Записи для любых пользовательских форматов файлов должны включать и расширение файла и соответствие UTI содержанию файла. Система использует ту информацию для файлов прямого доступа с надлежащим типом к Вашему приложению.
Для получения дополнительной информации о UTIs и как Вы используете их, см. Универсальный Обзор Идентификаторов типов. Для получения дополнительной информации о CFBundleDocumentTypes
ключ, посмотрите информационную Ключевую Ссылку Списка свойств.
Безопасность: защитите файлы, которые Вы создаете
Поскольку весь пользовательский код данных и системный код сохранены на диске где-нибудь, защищая целостность файлов, и файловая система является важным заданием. По этой причине существует несколько способов защитить содержание и препятствовать тому, чтобы оно было украдено или нанесено ущерб другими процессами.
Для получения общей информации о безопасных методах кодирования при работе с файлами, посмотрите Безопасное Руководство по Кодированию.
Предел песочниц спред ущерба
В iOS и в OS X v10.7 и позже, песочницы препятствуют тому, чтобы приложения писали в части файловой системы, что они не должны писать в. Каждое поигравшее в песочнице приложение получает один или несколько контейнеров, в которые оно может вписать. Приложение не может записать в контейнеры других приложений или в большинство каталогов за пределами песочницы. Эти ограничения ограничивают потенциальный ущерб, который может быть нанесен, если нарушена безопасность приложения.
Разработчики, пишущие приложения для OS X v10.7 и позже, призваны поместить свои приложения в песочницы для улучшения безопасности. Разработчики приложений для iOS не должны явно помещать свое приложение в песочницу, потому что система делает это для них автоматически во время установки.
Для получения дополнительной информации о песочницах и типах ограничений они налагают на доступ к файловой системе, видят Руководство по проектированию Руководства по программированию и Тестовой среды приложения Приложения Mac.
Полномочия и списки управления доступом управляют всем доступом к файлам
Доступом к файлам и каталогам управляет смесь списков управления доступом полномочий BSD и (ACLs). Списки управления доступом являются рядом тонкозернистых средств управления, определяющих точно, что может и не может быть сделано к файлу или каталогу и кого. Со списками управления доступом можно предоставить разные уровни отдельных пользователей доступа к данному файлу или каталогу. В отличие от этого, полномочия BSD только позволяют Вам предоставлять доступ к трем классам пользователей: владелец файла, единственная группа пользователей, которых Вы указываете, и все пользователи. См. Обзор безопасности для получения дополнительной информации.
Поскольку приложения для iOS всегда работают в песочнице, система присваивает определенный ACLs и полномочия к файлам, создаваемым каждым приложением. Однако приложения OS X могут использовать Identity Services для управления списками управления доступом для файлов, к которым у них есть доступ. Для получения информации о том, как использовать Identity Services (и платформа Сотрудничества), см. Руководство по программированию Identity Services.
Файлы могут быть зашифрованы на диске
И OS X и iOS предоставляют поддержку для шифрования файлов на диске:
iOS. Приложение для iOS может определять файлы, что оно хочет быть зашифрованным на диске. Когда пользователь разблокировал устройство, содержащее зашифрованные файлы, система создает ключ расшифровки, позволяющий приложению получать доступ к своим зашифрованным файлам. Когда пользователь блокирует устройство, тем не менее, ключ расшифровки уничтожается для предотвращения несанкционированного доступа к файлам.
OS X. Пользователи могут зашифровать содержание объема с помощью приложения Дисковой утилиты. (Они могут также зашифровать просто загрузочный том от системного предпочтения Безопасности и Конфиденциальности.) Содержание зашифрованного диска доступно приложениям только, в то время как работает компьютер. Когда пользователь помещает компьютер для сна или завершает работу его, ключи расшифровки уничтожаются для предотвращения несанкционированного доступа к содержанию диска.
В iOS приложения, использующие в своих интересах находящееся на диске шифрование, должны быть, прекращают использование зашифрованных файлов, когда пользователь блокирует устройство. Поскольку блокировка устройства уничтожает ключи расшифровки, доступ к зашифрованным файлам ограничивается тем, когда разблокировано устройство. Если Ваше приложение для iOS может работать в фоновом режиме, в то время как устройство заблокировано, это должно сделать так без доступа к любому из его зашифрованных файлов. Поскольку зашифрованные диски в OS X всегда доступны, в то время как компьютер работает, приложения OS X не должны делать ничего специального для обработки шифрования уровня диска.
Для получения дополнительной информации о работе с зашифрованными файлами в iOS, см. Руководство по программированию приложения для iOS.
Синхронизация гарантирует устойчивость в Вашем связанном с файлом коде
Файловая система является ресурсом, совместно использованным сторонними приложениями и системными приложениями. Поскольку многократные приложения в состоянии получить доступ к файлам и каталогам одновременно, потенциал возникает для одного приложения для внесения изменений, представляющих представление второго приложения устаревшей файловой системы. Если второе приложение не подготовлено обработать такие изменения, оно могло бы ввести неизвестное состояние или даже отказать. В случаях, где Ваше приложение полагается на присутствие определенных файлов, можно использовать интерфейсы синхронизации, которые будут уведомлены относительно изменений в тех файлах.
Синхронизация файловой системы является прежде всего проблемой в OS X, где пользователь может управлять файлами непосредственно со Средством поиска или с любым числом других приложений одновременно. К счастью, OS X обеспечивает следующие интерфейсы для помощи с проблемами синхронизации:
Координаторы файла. В OS X v10.7 и позже, координаторы файла являются способом включить тонкозернистую поддержку синхронизации непосредственно в объекты Вашего приложения; посмотрите Роль Координаторов Файла и Предъявителей.
FSEvents. В OS X v10.5 и позже, события файловой системы позволяют Вам наблюдать изменения к каталогу или его содержанию; см. Руководство по программированию Событий Файловой системы.
Файлы, параллелизм и потокобезопасность
Поскольку связанные с файлом операции включают взаимодействие с жестким диском и являются поэтому медленными по сравнению с большинством других операций, большинство связанных с файлом интерфейсов в iOS и OS X разработано с параллелизмом в памяти. Несколько технологий включают асинхронную работу в свой проект, и большинство других может выполниться безопасно от очереди отгрузки или вторичного потока. Таблица 1-4 перечисляет некоторые ключевые технологии, обсужденные в этом документе и безопасно ли их использовать от определенных потоков или какого-либо потока. Дополнительные сведения о возможностях любого интерфейса см. в справочной документации для того интерфейса.
Класс/Технология | Примечания |
---|---|
Для большинства задач безопасно использовать значение по умолчанию | |
Центральная отгрузка | GCD самостоятельно безопасно использовать от любого потока. Однако Вы все еще ответственны за запись Ваших блоков в пути, который ориентирован на многопотоковое исполнение. |
| Большая часть Основы возражает, что Вы используете в чтение, и данные файла записи могут использоваться от любого единственного потока, но не должны использоваться от многократных потоков одновременно. |
Открытый и панели Save | Поскольку они - часть Вашего пользовательского интерфейса, необходимо всегда представлять и управлять панелями Open и Save от основного потока приложения. |
Подпрограммы POSIX | Подпрограммы POSIX для управления файлами обычно разрабатываются для работы безопасно от любого потока. Для получения дополнительной информации см. соответствующие страницы справочника. |
Неизменные объекты, которые Вы используете для указания путей, безопасно использовать от любого потока. Поскольку они являются неизменными, можно также обратиться к ним от многократных потоков одновременно. Конечно, непостоянные версии этих объектов должны использоваться только от одного потока за один раз. | |
| Объекты перечислителя безопасно использовать от любого единственного потока, но не должны использоваться от многократных потоков одновременно. |
Когда многократные потоки или многократные процессы пытаются действовать на тот же файл, даже при использовании ориентированного на многопотоковое исполнение интерфейса для управления файлом могут все еще возникнуть проблемы. Несмотря на то, что существуют гарантии, чтобы препятствовать тому, чтобы многократные клиенты изменили файл одновременно, те гарантии не всегда гарантируют эксклюзивный доступ к файлу в любом случае. (И при этом Вы не должны пытаться препятствовать тому, чтобы другие процессы получили доступ к совместно используемым файлам.) Для проверки код знает об изменениях, внесенных в совместно используемые файлы, используйте координаторов файла для управления доступом к тем файлам. Для получения дополнительной информации о координаторах файла, посмотрите Роль Координаторов Файла и Предъявителей