Конфигурирование проекта для основанной на SDK разработки

В этой главе описываются конфигурацию установленного iOS и OS X SDKs и объясняет, как установить Ваш проект XCode использовать определенный SDK.

Заголовочные файлы SDK и тупиковые библиотеки

При установке XCode установщик создает a /Developer/SDKs каталог. Этот каталог содержит один или несколько подкаталогов, каждый из которых обеспечивает полный набор заголовочных файлов и тупиковых библиотек, поставивших для определенной версии iOS или OS X. OS X SDK называет основная версия, такой как MacOSX10.6.sdk, но представляет последнюю вспомогательную версию, доступную для основной версии.

Установщик XCode для iOS помещает SDKs в /Developer/Platforms каталог, в котором каталог для каждой платформы, такой как iPhoneOS.platform. Каждый каталог платформы, в свою очередь, содержит a Developer/SDKs каталог, определенный для той платформы. iOS SDKs называют вспомогательные версии iOS, такой как iPhoneOS4.2.sdk.

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

Каждый .sdk каталог напоминает иерархию каталогов выпуска операционной системы, который это представляет: Это имеет usr, System, и Developer каталоги на его верхнем уровне. OS X .sdk каталоги также содержат a Library каталог. Каждый из этих каталогов поочередно содержит подкаталоги с заголовками и библиотеками, присутствующими в соответствующей версии операционной системы с установленным XCode.

Библиотеки в iOS или OS X SDK являются тупиками для соединения только; они не содержат исполняемый код, но просто экспортируемые символы. SDK поддерживает работы только с собственными целями сборки.

Базируйте SDK и развертывание настройки Target

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

Для возможных значений и большей информации о настройках сборки в XCode, посмотрите Здание для Многократных Выпусков Операционной системы в Руководстве по управлению проектами XCode, Сборка XCode, Устанавливающая Эталонные и Запущенные приложения в Руководстве по Разработке iOS.

Когда Вы создаете свое приложение, Ваша цель развертывания отражается в MinimumOSVersion запись в приложении Info.plist файл. Для приложений для iOS, MinimumOSVersion запись используется App Store для указания требования выпуска iOS.

Рисунок 2-1 показывает временную шкалу, объясняющую отношение между целью развертывания и основным SDK.

Рисунок 2-1  временная шкала разработки SDK
Cross-development timeline

Число описывает проект с целью развертывания OS X v10.4 и основной SDK OS X v10.6. (Номера версий в числе представляют все выпуски той версии, включая системные обновления.)

В этом примере программное обеспечение может свободно использовать любые функции от OS X v10.0 посредством новейшего обновления версии 10.4. Это может условно использовать в своих интересах функции от OS X v10.5 и 10.6 после обеспечения, что каждая такая функция доступна.

Эффекты этих настроек во время компиляции и время выполнения следующие. Если Ваш код использует символ:

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

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

В дополнение к установке основного SDK и развертывания предназначаются для Вашего проекта в целом, можно установить эти значения индивидуально для каждой цели сборки. Настройки Target переопределяют настройки проекта. (Однако некоторые функции Xcode, пытающиеся коррелировать с основной установкой SDK, такой как определение символа и поиск документации, могут работать по-другому.)

Слабое соединение и платформы Apple

Компилятор XCode использует макросы доступности, присоединенные к символам в заголовках платформы Apple, чтобы определить, или ли слабо строго соединяются символы. Они, которые утверждают макросы, в которой версии операционной системы сначала появилась функция. Например, макрос в следующем объявлении указывает что enumerateObjectsUsingBlock: метод (в NSArray класс), доступный запуск в OS X v10.6 и iOS 4.0:

- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block NS_AVAILABLE(10_6, 4_0);

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

В случае осуждаемого символа макрос доступности содержит дальнейший синтаксис для указания версии операционной системы, в которой осуждался символ. Во всех случаях справочная документация для символа утверждает свою доступность и, если применимо, свою информацию об осуждении. Макросы доступности определяются в Availability.h и AvailabilityMacros.h в /usr/include/ каталог.

Компилятор XCode интерпретирует каждый макрос доступности в свете основного SDK и целевых настроек развертывания для проекта. Компилятор использует эти настройки для присвоения надлежащих значений MAC_OS_X_VERSION_MIN_REQUIRED и MAC_OS_X_VERSION_MAX_ALLOWED макросы.

Например, предположите в XCode, к которому Вы ставите цель развертывания (минимальная требуемая версия) “OS X v10.5” и основной SDK (максимальная позволенная версия) к “OS X v10.6”. Во время компиляции компилятор слабо соединил бы интерфейсы, представленные в OS X v10.6, в то время как сильное соединение интерфейсов определило в более ранних версиях OS. Это позволило бы Вашему приложению работать в OS X v10.5 и использовать в своих интересах более новые функции, когда доступно.

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

Конфигурирование основанного на make-файле проекта

Если у Вас есть основанный на make-файле проект, можно также использовать в своих интересах основанную на SDK разработку, путем добавления надлежащих опций к компиляции и соединить команды. Используя SDKs в основанных на make-файле проектах требует GCC 4.0 или позже. Для выбора SDK Вы используете -isysroot опция с компилятором и -syslibroot опция с компоновщиком. Обе опции требуют, чтобы Вы указали полный путь к желаемому каталогу SDK. Для поставления цели развертывания в make-файле используйте переменную make-файла формы: ENVP= MACOSX_DEPLOYMENT_TARGET=10.4. Для использования этой переменной в make-файле включайте его перед компиляцией и командами ссылки.

Установка префиксного файла

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

При использовании основанной на SDK разработки необходимо гарантировать, что префиксный файл, принимающий во внимание выбранный SDK. Т.е. не устанавливайте префиксный файл в заголовочный файл зонтика с помощью абсолютного пути, такой как /System/Library/Frameworks/Cocoa.framework/Versions/A/Headers/Cocoa.h. Этот абсолютный путь не работает, потому что указанный заголовок от существующей системы, а не выбранного SDK.

Для включения заголовков платформы зонтика добавьте надлежащее #import <Framework/Framework.h> директивы к Вашему префиксному файлу. С этим методом компилятор всегда выбирает заголовки из надлежащего каталога SDK. Например, если Ваш проект называют TestSDK, и это имеет префиксный файл TestSDK_Prefix.pch, добавьте следующую строку к тому файлу:

#import <Cocoa/Cocoa.h>

При использовании Objective C предпочтительно использовать #import директива, а не #include (который необходимо использовать в процедурных программах C), потому что #import гарантии, что тот же заголовочный файл никогда не включается несколько раз.