Конфигурирование проекта для основанной на 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 устанавливает это в версию OS, соответствующего основной версии SDK и позже.
Имена переменной сборки XCode для этой установки
MACOSX_DEPLOYMENT_TARGET (OS X Deployment Target)
иIPHONEOS_DEPLOYMENT_TARGET (iOS Deployment Target)
.Можно безусловно использовать функции от версий ОС до и включая целевую установку развертывания.
Выберите основной SDK. Ваше программное обеспечение может использовать функции, доступные в версиях ОС до и включая ту, соответствующую основному SDK. По умолчанию XCode устанавливает это в новейший OS, поддерживаемый XCode.
Имя определяющего сборки XCode для этого параметра
SDKROOT (Base SDK)
.Можно использовать функции от версий системы позже, чем цель развертывания — до, и включая версию ОС Вы выбрали как свой основной SDK — но необходимо проверить на доступность новых функций, как описано в Использовании Слабо Соединенных Классов в iOS и Используя Слабо Соединенные Методы и Функции.
Для возможных значений и большей информации о настройках сборки в XCode, посмотрите Здание для Многократных Выпусков Операционной системы в Руководстве по управлению проектами XCode, Сборка XCode, Устанавливающая Эталонные и Запущенные приложения в Руководстве по Разработке iOS.
Когда Вы создаете свое приложение, Ваша цель развертывания отражается в MinimumOSVersion
запись в приложении Info.plist
файл. Для приложений для iOS, MinimumOSVersion
запись используется App Store для указания требования выпуска iOS.
Рисунок 2-1 показывает временную шкалу, объясняющую отношение между целью развертывания и основным SDK.
Число описывает проект с целью развертывания OS X v10.4 и основной SDK OS X v10.6. (Номера версий в числе представляют все выпуски той версии, включая системные обновления.)
В этом примере программное обеспечение может свободно использовать любые функции от OS X v10.0 посредством новейшего обновления версии 10.4. Это может условно использовать в своих интересах функции от OS X v10.5 и 10.6 после обеспечения, что каждая такая функция доступна.
Эффекты этих настроек во время компиляции и время выполнения следующие. Если Ваш код использует символ:
Не определенный в основном SDK (например, символ от более нового OS), Вы получаете ошибку времени компиляции.
Определенный в основном SDK, но отмеченный, как осуждается, Вы получаете время компиляции, предупреждая.
Определенный в цели развертывания, Ваших ссылках кода и сборках обычно. Во время выполнения:
В системе, выполняющей OS ранее, чем цель развертывания, Ваш код может не загрузиться при использовании символов, недоступных в том OS.
В системе, выполняющей OS, равный или позже, чем цель развертывания, Ваш код имеет нулевых указателей для символов, не доступных в том OS. Подготовьте свой код к этому, как описано в Использовании Слабо Соединенных Методов и Функций и Используя Слабо Соединенные Классы в iOS.
Всегда проверяйте, чтобы видеть, используете ли Вы, осудил 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
гарантии, что тот же заголовочный файл никогда не включается несколько раз.