Версии платформы

Можно создать различные версии платформы на основе типа изменений, внесенных в его динамическую совместно используемую библиотеку. Существует два типа версий: главный (или несовместимый) и незначительный (или совместимый) версии. Оба оказывают влияние на программы, соединенные с платформой, хотя по-разному.

Основные версии

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

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

Нумерация основной версии

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

/System/Library/Frameworks/Boffo.framework/Versions/A/Boffo

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

Когда использовать основные версии

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

  • Удаляя открытые интерфейсы, такие как класс, функция, метод или структура

  • Переименование любых открытых интерфейсов

  • Изменение формата данных структуры

  • Добавление, изменяясь или переупорядочивая переменные экземпляра класса

  • Добавление виртуальных методов к классу C++

  • Переупорядочение виртуальных методов класса C++

  • Изменение компиляторов C++ или версий компилятора

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

Изменения в подписи функции включают изменение порядка, вводят, или число параметров. Подпись может также измениться дополнением или удалением const метки от функции или ее параметров.

При изменении основной версии платформы Вы обычно делаете новую версию «текущей» версией. XCode автоматически генерирует сеть символьных ссылок для указания на текущую основную версию платформы. Посмотрите Структуру Пакета Платформы для подробных данных.

Предотвращение существенных изменений версии

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

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

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

    Следует иметь в виду, что дополнение переменных экземпляра часто инстанцируемых классов или полей часто выделяемых структур имеет стоимость в памяти.

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

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

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

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

Создание основной версии платформы

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

Для установки информации об основной версии для платформы в XCode сделайте следующее:

  1. Откройте свой проект в Xcode 2.4.

  2. В области Groups & Files выберите цель для своей платформы и откройте окно инспектора.

  3. Выберите вкладку Build окна инспектора.

  4. В Упаковочных настройках, набор значение установки «Framework Version» к указателю для новой основной версии Вашей платформы, например, B..

Можно также сделать основные версии автономных динамических совместно используемых библиотек (т.е. библиотеки не содержавший в пакете платформы). Основная версия для автономной библиотеки кодируется в самом имени файла, как показано в следующем примере:

libMyLib.B.dylib

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

Вспомогательные версии

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

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

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

Нумерация вспомогательной версии

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

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

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

Когда использовать вспомогательные версии

Необходимо обновить информацию о версии платформы при создании любого из следующих изменений:

  • Добавьте класс

  • Добавьте методы к классу Objective C

  • Добавьте невиртуальные методы к классу C++

  • Добавьте общедоступные структуры

  • Добавьте государственные функции

  • Исправьте ошибки, не изменяющие Ваши открытые интерфейсы

  • Сделайте улучшения, не изменяющие Ваши открытые интерфейсы

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

Числа версии совместимости во время выполнения

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

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

Для запуска приложения на более ранних версиях платформы необходимо соединить приложение против самой ранней версии платформы, которую это поддерживает. XCode предоставляет поддержку для соединения против более ранних версий платформ OS X. Эта функция позволяет Вам соединиться против определенных версий версии 10.1 OS X и позже. Для получения дополнительной информации посмотрите Руководство по совместимости SDK.

Создание вспомогательной версии платформы

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

  1. Откройте свой проект в Xcode 2.4.

  2. В области Groups & Files выберите цель для своей платформы и откройте окно инспектора.

  3. Выберите вкладку Build окна инспектора.

  4. В Соединении настроек, набор значение установки «Current Library Version» к текущей версии Вашей платформы.

  5. Обновите опцию «Compatibility version» по мере необходимости для отражения существенных изменений к платформе. (См. Числа Версии совместимости во Время выполнения для получения дополнительной информации.)

Инструкции по управлению версиями

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

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

Табличные 1  изменения Внесения в платформу

Тип версии

Позволенные изменения

Что сделать

Основная версия

Удалите интерфейсы (классы, функции, методы, и т.д.). Переименуйте интерфейсы. Измените расположение класса или структуры. Добавьте, измените или переупорядочьте переменные экземпляра класса. Добавьте или переупорядочьте виртуальные методы в классе C++. Измените подпись функции или метода. Изменение компиляторов C++ или версий компилятора.

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

Вспомогательная версия (изменения открытого интерфейса)

Добавьте класс Objective C или C++. Добавьте методы к классу Objective C. Добавьте невиртуальные методы к классу C++. Добавьте структуры. Добавьте функции.

Постепенно увеличьте свое число текущей версии и определите Ваш номер версии совместимости для соответствия. Создайте свою платформу.

Вспомогательная версия (никакие изменения открытого интерфейса)

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

Постепенно увеличьте свое число текущей версии. Не изменяйте число версии совместимости.

Если Вы не изменяете номер основной версии платформы, когда Вы должны, программы, соединенные с ним, могут перестать работать непредсказуемыми способами. С другой стороны при изменении номера основной версии, когда Вы не должны были, Вы загромождаете систему с ненужными версиями платформы.

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