Среда приложения Mac

OS X включает последние технологии для создания мощного и приложения забавы к использованию. Но технологий собой недостаточно для создания каждого приложения большим. То, что устанавливает приложение кроме его коллег, - то, как оно помогает пользователю достигнуть некоторой материальной цели. В конце концов, пользователи не собираются заботиться о том, какие технологии приложение использует, пока оно помогает им сделать то, что они должны сделать. Стоящее на пути приложение будет забытым, но тот, делающий работу (или игра) проще и больше забавы, будет помнившим.

Вы используете Какао для записи приложений для OS X. Какао предоставляет Вам доступ ко всем функциям OS X и позволяет Вам интегрировать свое приложение чисто с остальной частью системы. В этой главе рассматривается ключевых ролей OS X, помогающих Вам создать большие приложения. В частности эта глава описывает некоторые важные простые в употреблении технологии, представленные в OS X v10.7. Для более полного списка технологий, доступных в OS X, см. Технологический Обзор Mac.

Среда, разработанная для простоты использования

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

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

Все предыдущие функции поддерживаются Какао и могут быть включены с относительно небольшим усилием.

Сложная графическая среда

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

Для получения информации о графических технологиях, доступных в OS X, посмотрите Уровень Носителей в Технологическом Обзоре Mac.

Низкоуровневые подробные данные среды выполнения

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

На основе UNIX

OS X приводится в действие 64-разрядным ядром Маха, управляющим ресурсами процессора, памятью и другими низкоуровневыми способами поведения. Поверх ядра находится измененная версия операционной системы Berkeley Software Distribution (BSD), обеспечивающей интерфейсы, которые приложения могут использовать для взаимодействия с системой низшего уровня. Эта комбинация Маха и BSD предоставляет следующую поддержку системного уровня для Ваших приложений:

  • Вытесняющая многозадачность — Все процессы совместно используют CPU эффективно. Ядро планирует процессы в пути, гарантирующем, чтобы они все получили время, которое они должны выполнить. Даже фоновые приложения продолжают получать процессорное время для выполнения продолжающихся задач.

  • Защищенная память — Каждый процесс работает в его собственном защищенном пространстве памяти, предотвращающем процессы от случайного вмешательства друг с другом. (Приложения могут совместно использовать часть своего пространства памяти, чтобы реализовать быстрое межпроцессное взаимодействие, но взять на себя ответственность за синхронизацию и блокировку той памяти соответственно.)

  • Виртуальная память — 64-разрядные приложения имеют виртуальное адресное пространство приблизительно 18 эксабайт (18 миллиардов миллиардов байтов). (При создании 32-разрядного приложения сумма виртуальной памяти составляет только 4 ГБ.), Когда использование памяти приложения превышает сумму свободной физической памяти, система прозрачно пишет страницы в диск для создания большего количества комнаты. Выписанные страницы остаются на диске, пока они не необходимы в памяти снова или выходах приложения.

  • При сетях и Добрый день — OS X предоставляет поддержку для стандартных сетевых протоколов и служб в использовании сегодня. Сокеты BSD обеспечивают низкоуровневый механизм связи для приложений, но также существуют высокоуровневые интерфейсы. Добрый день упрощает пользователя, объединяющего опыт в сеть путем обеспечения динамического способа распространиться и соединиться с сетевыми службами по TCP/IP.

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

Параллелизм и поточная обработка

Каждый процесс начинается с единственным потоком выполнения и может создать больше потоков по мере необходимости. Несмотря на то, что можно создать потоки непосредственно с помощью POSIX и других высокоуровневых интерфейсов, для большинства типов работы лучше создать их косвенно использующий блочные объекты с Grand Central Dispatch (GCD) или объектами операции, технология параллелизма Какао, реализованная NSOperation класс.

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

Для получения дополнительной информации об использовании GCD и объектов операции для реализации параллелизма в приложениях см. Руководство по программированию Параллелизма.

Файловая система

Файловая система в OS X структурирована для обеспечения лучшего опыта для пользователей. Вместо того, чтобы представлять целую файловую систему пользователю, Средство поиска скрывает любые файлы и каталоги, которые средний пользователь не должен должен быть использовать, такие как содержание низкоуровневых каталогов UNIX. Это сделано, чтобы обеспечить более простой интерфейс для конечного пользователя (и только в местах как Средство поиска и открытое и сохранить панели). Приложения могут все еще получить доступ к любым файлам и каталогам, для которых у них есть допустимые полномочия, независимо от того, скрыты ли они Средством поиска.

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

Несколько каталогов важного приложения

Файловая система OS X организована в пути, собирающем в группу связанные файлы и данные в определенных местах. Каждый файл в файловой системе имеет свое место, и приложения должны знать, куда поместить файлы, они создают. Это особенно важно, если Вы распределяете свое приложение через App Store, ожидающий, что Вы поместите файлы данных своего приложения в определенные каталоги.

Таблица 1-1 перечисляет каталоги, с которыми обычно взаимодействуют приложения. Некоторые из этих каталогов в корневом каталоге, который является или корневым каталогом пользователя или, если приложение принимает Тестовую среду приложения, контейнерный каталог приложения, как описано в Тестовой среде приложения и XPC. Поскольку фактические пути могут отличаться на основе этих условий, используйте URLsForDirectory:inDomains: метод NSFileManager класс для получения фактического пути к каталогу. Можно тогда добавить любой пользовательский каталог и информацию об имени файла к возвращенному объекту URL завершить путь.

  Каталоги Table 1-1 Key для приложений Mac

Каталог

Описание

Каталог приложений

Это - каталог установки для Вашего комплекта приложений. Путь для глобального Каталога приложений /Applications но каждый пользовательский каталог может иметь каталог локальных приложений, содержащий специфичные для пользователя приложения. Независимо, Вы не должны должны быть использовать этот путь непосредственно. К ресурсам доступа в Вашем комплекте приложений используйте NSBundle объект вместо этого.

Для получения дополнительной информации о структуре Вашего комплекта приложений и как Вы определяете местоположение ресурсов, посмотрите Комплект приложений OS X.

Корневой каталог

Конфигурация Вашего приложения определяет расположение корневого каталога, замеченного Вашим приложением:

  • Для приложений, работающих в песочнице в OS X v10.7 и позже, корневой каталог является контейнерным каталогом приложения. Для получения дополнительной информации о контейнерном каталоге, посмотрите Цепочку для ключей.

  • Для приложений, работающих за пределами песочницы (включая тех, которые работают в версиях OS X прежде 10.7), корневой каталог является специфичным для пользователя подкаталогом /Users это содержит файлы пользователя.

Для получения пути к корневому каталогу используйте NSHomeDirectory функция.

Каталог Library

Каталог Library является каталогом верхнего уровня для того, чтобы хранить частные связанные с приложением данные и предпочтения. Существует несколько каталогов Library, рассеянных по всей системе, но необходимо всегда использовать тот, расположенный в текущем корневом каталоге.

Не храните файлы непосредственно на верхнем уровне каталога Library. Вместо этого сохраните их в одном из определенных подкаталогов, описанных в этой таблице.

В OS X v10.7 и позже, Средство поиска скрывает каталог Library в домашней папке пользователя по умолчанию. Поэтому Вы никогда не должны хранить файлы в этом каталоге, что Вы хотите пользователя к доступу.

Для получения пути к этому каталогу используют NSLibraryDirectory ключ пути поиска с NSUserDomainMask домен.

Каталог Application Support

Каталог Application Support - то, где Ваше приложение хранит любой тип файла, поддерживающего приложение, но не требующегося для приложения работать, такие как шаблоны документов или конфигурационные файлы. Файлы должны быть специфичными для приложения, но никогда не должны хранить пользовательские данные. Этот каталог расположен в каталоге Library.

Никогда не храните файлы на верхнем уровне этого каталога: Всегда помещайте их в подкаталог, названный по имени Вашего приложения или компании.

Если ресурсы применяются ко всем пользователям в системе, таким как шаблоны документов, размещают их в /Library/Application Support. Для получения пути к этому каталогу используют NSApplicationSupportDirectory ключ пути поиска с NSLocalDomainMask домен. Если ресурсы специфичны для пользователя, таковы как конфигурационные файлы рабочей области, размещают их в текущего пользователя ~/Library/Application Support каталог. Для получения пути к этому каталогу используют NSApplicationSupportDirectory ключ пути поиска с NSUserDomainMask домен.

Каталог Caches

Каталог Caches - то, где Вы храните файлы кэша и другие временные данные, которые Ваше приложение может воссоздать по мере необходимости. Этот каталог расположен в каталоге Library.

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

Для получения пути к этому каталогу используют NSCachesDirectory ключ пути поиска с NSUserDomainMask домен.

Каталог Movies

Каталог Movies содержит видеофайлы пользователя.

Для получения пути к этому каталогу используют NSMoviesDirectory ключ пути поиска с NSUserDomainMask домен.

Каталог Music

Каталог Music содержит музыкальные файлы пользователя и аудиофайлы.

Для получения пути к этому каталогу используют NSMusicDirectory ключ пути поиска с NSUserDomainMask домен.

Каталог Pictures

Каталог Pictures содержит изображения и фотографии пользователя.

Для получения пути к этому каталогу используют NSPicturesDirectory ключ пути поиска с NSUserDomainMask домен.

Временный каталог

Каталог Temporary - то, где Вы храните файлы, которые не должны сохраняться между запусками Вашего приложения. Вы обычно используете этот каталог для рабочих файлов или других типов недолгих файлов данных, не связанных с персистентными данными Вашего приложения. Этот каталог обычно скрыт от пользователя.

Ваше приложение должно удалить файлы из этого каталога, как только это сделано с ними. Система может также произвести чистку непрекращающихся файлов от этого каталога при системном запуске.

Для получения пути к этому каталогу используют NSTemporaryDirectory функция.

Перечисление 1-1 показывает пример того, как получить основной путь к Application Support каталог и затем добавляет каталог пользовательского приложения к нему.

Перечисление 1-1  , Получающее путь к Application Support каталог

NSFileManager* fileManager = [NSFileManager defaultManager];
NSURL* appSupportDir = nil;
 
NSArray *urls = [fileManager URLsForDirectory:NSApplicationSupportDirectory inDomains:NSUserDomainMask];
if ([paths count] > 0) {
   appSupportDir = [[urls objectAtIndex:0] URLByAppendingPathComponent:@"com.example.MyApp"];
}

Для получения дополнительной информации о том, как получить доступ к файлам в известных системных каталогах, см. Руководство по программированию Файловой системы.

Координирование доступа к файлу с другими процессами

В OS X другие процессы могут иметь доступ к тем же файлам, которые делает Ваше приложение. Поэтому при работе с файлами, необходимо использовать интерфейсы координации файла, представленные в OS X v10.7, чтобы быть уведомленными, когда другие процессы (включая Средство поиска) пытаются считать или изменить, регистрирует приложение, в настоящее время использует. Например, когда Ваше приложение принимает хранение iCloud, координирование доступа к файлу критически важно.

APIs координации файла позволяет Вам утверждать владение по файлам и каталогам, о которых заботится Ваше приложение. Любому времени другой процесс пытается коснуться одного из тех элементов, Ваше приложение, дают шанс ответить. Например, когда приложение пытается считать содержание документа, Ваше приложение редактирует, можно записать несохраненные изменения в диске, прежде чем другому процессу позволят сделать его чтение.

Используя хранение документов iCloud, например, необходимо включить координацию файла, потому что многократные приложения могут получить доступ файлам документов в iCloud. Самый простой способ включить координацию файла в Ваше приложение состоит в том, чтобы использовать NSDocument класс, обрабатывающий все связанное с файлом управление для Вас. См. Основанное на документе Руководство по программированию Приложения для Mac.

С другой стороны, если Вы пишете стиль библиотеки (или «обувная коробка») приложение, необходимо использовать интерфейсы координации файла непосредственно, как описано в Руководстве по программированию Файловой системы.

Взаимодействие с файловой системой

Диски в компьютерах Macintosh отформатированы с помощью HFS + файловая система по умолчанию. Однако компьютеры Macintosh могут взаимодействовать с дисками, использующими другие форматы, таким образом, Вы никогда не должны кодировать в частности ни к какой файловой системе. Таблица 1-2 перечисляет некоторые основные атрибуты файловой системы, которые Вы, возможно, должны рассмотреть в Вашем приложении и как необходимо обработать их.

Табличные 1-2  Атрибуты для файловой системы OS X

Атрибут

Описание

Чувствительность к регистру

HFS + файловая система нечувствителен к регистру, но также и сохраняет случай. Поэтому при указании имен файлов и каталогов в коде, лучше принимать чувствительность к регистру.

Конструкция пути

Создайте пути с помощью методов NSURL и NSString классы. NSURL класс предпочтен для конструкции пути из-за ее возможности указать не, только соединяет каналом в локальной файловой системе, но и соединяет каналом к сетевым ресурсам.

Атрибуты файла

Много связанных с файлом атрибутов могут быть получены с помощью getResourceValue:forKey:error: метод NSURL класс. Можно также использовать NSFileManager объект получить много связанных с файлом атрибутов.

Полномочия файла

Полномочиями файла управляют с помощью списков управления доступом полномочий BSD и (ACLs). Система использует ACLs, когда это возможно, для указания точных полномочий для файлов и каталогов, но это отступает к использованию полномочий BSD, когда не указаны никакие ACLs.

По умолчанию любые файлы, которые создает Ваше приложение, принадлежат текущему пользователю и даны надлежащие полномочия. Таким образом Ваше приложение должно всегда быть в состоянии считать и записать файлы, которые оно создает явно. Кроме того, песочница приложения может позволить ему получать доступ к другим файлам в особых ситуациях. Для получения дополнительной информации о песочнице, посмотрите Тестовую среду приложения и XPC.

Отслеживание изменений файла

Приложения, которые не могут использовать интерфейсы Координации Файла (см. Доступ к файлу Координирования с Другими Процессами) для отслеживания изменений в файлах и каталогах могут использовать API FSEvents вместо этого. Этот API обеспечивает интерфейс низшего уровня для отслеживания взаимодействий файловой системы и доступен в OS X v10.5 и позже.

Для получения информации о том, как использовать API FSEvents, см. Руководство по программированию Событий Файловой системы.

Требования использования файловой системы для App Store Mac

Для продвижения более непротиворечивого пользовательского опыта заявки, поданные к App Store Mac, должны неотступно следовать за определенными правилами, где они пишут файлы. Пользователи могут быть смущены, когда приложения вызывают неожиданные побочные эффекты в файловой системе (например, храня базы данных в папке Documents пользователя, храня файлы в папке Library пользователя, узнаваемо не связанные с Вашим приложением, храня пользовательские данные в папке Library пользователя, и т.д.).

Ваше приложение должно придерживаться следующих требований:

  • Можно использовать платформы Apple, такие как Пользовательские Значения по умолчанию, Календарное Хранилище и Адресная книга, которые неявно пишут в файлы в определенных расположениях, включая расположения, к которым приложению не позволяют получить доступ непосредственно.

  • Ваше приложение может записать во временные пути получение использования надлежащих интерфейсов программирования Apple, такой как NSTemporaryDirectory функция.

  • Ваше приложение может записать в следующие каталоги:

    • ~/Library/Application Support/<app-identifier>

    • ~/Library/<app-identifier>

    • ~/Library/Caches/<app-identifier>

    где <идентификатор приложения> является идентификатором пакета Вашего приложения, его именем или именем Вашей компании. Это должно точно соответствовать то, что находится в Подключении iTunes для приложения.

    Всегда используйте интерфейсы программирования Apple такой в качестве URLsForDirectory:inDomains: функция для определения местоположения этих путей, а не жесткого кодирования их. Для получения дополнительной информации см. Руководство по программированию Файловой системы.

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

    • ~/Pictures/<app-identifier>

    • ~/Music/<app-identifier>

    • ~/Movies/<app-identifier>

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

Безопасность

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

Тестовая среда приложения и XPC

Вы защищаете свое приложение от атаки из вредоносного программного обеспечения следующим методы, рекомендуемые в Безопасном Руководстве по Кодированию. Но атакующий должен только найти единственную дыру в Вашей обороноспособности, или в любой из платформ и библиотек, против которых Вы соединяетесь, для получения контроля над приложением вместе со всеми его полномочиями.

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

  1. Тестовая среда приложения позволяет Вам описать, как Ваше приложение взаимодействует с системой. Система тогда предоставляет Вашему приложению доступ, это должно было сделать свое задание, и не больше. Для Вашего приложения для обеспечения высшего уровня включения ущерба наиболее успешная практика должна принять самую трудную возможную песочницу.

  2. Тестовая среда приложения позволяет пользователю прозрачно предоставлять Вашему приложению дополнительный доступ посредством Открытого и Сохранять диалоговые окна, перетаскивание и другое знакомое взаимодействие с пользователем.

Вы описываете взаимодействие своего приложения с системой посредством установки прав в XCode. Право является парой ключ/значение, определенной в файле списка свойств, присуждающем определенную возможность или право доступа к цели. Например, существуют дающие право ключи, чтобы указать, что для Вашего приложения нужен доступ к камере, сети и пользовательским данным, таким как Адресная книга. Для получения дополнительной информации на всех правах, доступных в OS X, посмотрите Дающую право Ключевую Ссылку.

При принятии Тестовой среды приложения система обеспечивает специальный каталог для использования приложением — и только приложением — вызвал контейнер. Ваше приложение освободило доступ для чтения-записи к контейнеру. Весь OS X новаторский APIs, выше уровня POSIX, относительно контейнера вместо к корневому каталогу пользователя. Другие поигравшие в песочнице приложения не имеют никакого доступа к контейнеру Вашего приложения, как описано далее в Подписывании кода.

Ваше поигравшее в песочнице приложение может пути доступа за пределами своего контейнера следующими тремя способами:

  • В определенном направлении пользователя

  • Вами конфигурирующий Ваше приложение с правами для определенных расположений файловой системы, таких как папка Movies

  • Когда путь находится в любом из определенных каталогов, которые являются читаемым миром

Технологию безопасности OS X, взаимодействующую с пользователем для расширения песочницы, вызывают Блоком питания. Блок питания не имеет никакого API. Когда, например, Вы используете, Ваше приложение использует Блок питания прозрачно NSOpenPanel и NSSavePanel классы, или когда пользователь использует перетаскивание с Вашим приложением.

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

XPC является технологией межпроцессного взаимодействия OS X что Тестовая среда приложения дополнений путем включения разделения полномочия. Разделение полномочия, в свою очередь, стратегия развития, в которой Вы делите приложение на части согласно доступу системного ресурса, в котором нуждается каждая часть. Части компонента, которые Вы создаете, вызывают службами XPC. Для получения дополнительной информации при принятии XPC, см. Руководство по программированию Демонов и Служб.

Для полного объяснения Тестовой среды приложения и как использовать его, считайте Руководство по проектированию Тестовой среды приложения.

Подписывание кода

OS X использует технологию безопасности, которая, как известно как подписывание кода, позволила Вам сертифицировать, что Ваше приложение действительно создавалось Вами. После того, как приложение является подписанным кодом, система может обнаружить любое изменение в приложении — представлено ли изменение случайно или вредоносным кодом. Различные технологии безопасности, включая Тестовую среду приложения и родительский контроль, зависят от подписывания кода.

В большинстве случаев можно полагаться на автоматическое подписывание кода XCode, требующее только, чтобы Вы указали идентификационные данные подписывания кода в настройках сборки для Вашего проекта. Шаги для взятия описаны в Подписывании кода Приложение в Руководстве по Потоку операций Инструментов для Mac. Если необходимо включить подписывание кода в автоматизированную систему сборки, или если Вы соединяете свое приложение против сторонних платформ, обратитесь к процедурам, описанным в Руководстве по Подписыванию кода.

При принятии Тестовой среды приложения Вы должны элемент кода Ваше приложение. Это вызвано тем, что права (включая специальное право, включающее Тестовую среду приложения) встроены в подпись кода приложения.

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

Для полного объяснения подписывания кода в контексте Тестовой среды приложения считайте Тестовую среду приложения подробно в Руководстве по проектированию Тестовой среды приложения.

Цепочка для ключей

Цепочка для ключей является безопасным, зашифрованным контейнером для хранения паролей пользователя и других секретов. Это разработано, чтобы помочь пользователю управлять их многократным именем для входа в систему, каждым с его собственным ID и паролем. Необходимо всегда использовать цепочку для ключей для хранения чувствительных учетных данных для приложения.

Для больше на цепочке для ключей, посмотрите Понятия Keychain Services в Руководстве по программированию Keychain Services.