Как двоичный файл для одного приложения поддерживает 64-битные и 32-разрядные приложения

Мы можем видеть объявление apple здесь.. Согласно этому документу, мы можем представить один и тот же двоичный файл с поддержкой 32-разрядных, а также 64-разрядных. Я нашел один ответ на переполнение стека здесь. Но в соответствии с этим ответом мы should устанавливаем deployment target as IO7+. Но apple doc сказал, вы можете отправить это с поддержкой IOS 7 и IOS 6? Мой вопрос: Как мы можем генерировать двоичные файлы с поддержкой 32-разрядных и 64-битных целей развертывания IOS6 +?

Примечание: Я использую xcode 5.0

Обновление: Question above is fixed by using xcode 5.0.2. Но я запутался, как я могу сделать код для 32-битных, а также 64-битных. Я знаю одно, мы должны делать код по два отдельно в несколько раз. Но How can I do?. например, если один из методов, устаревших в ios6, означает, мы также предоставляем код для ios 6 и ios7. В этом же случае также следует и здесь, а также для некоторых других технических средств.

Ответ 1

Xcode может создавать ваше приложение с 32-разрядными и 64-разрядными двоичными файлами поэтому он работает на всех устройствах под управлением iOS 7. Если вы хотите продолжить для поддержки iOS 6 вам нужно будет построить только для 32-битных. следующий месяц мы будем вносить изменения, которые позволят вам создать единый бинарное приложение, поддерживающее 32-разрядную версию на iOS 6, а также 32-битную и 64-разрядную на iOS 7.

Преобразование вашего приложения в 64-битный двоичный

На высоком уровне, вот шаги по созданию приложения, предназначенного для обоих 32-разрядная и 64-разрядная среды выполнения:

1.Установить Xcode 5.0.1.

2.Откройте свой проект. Xcode предлагает вам модернизировать ваш проект. Модернизация проекта добавляет новые предупреждения и ошибки, которые важно при компиляции вашего приложения для 64-разрядной версии.

3.Удавите настройки своего проекта для поддержки iOS 5.1.1 или новее. Вы не можете построить 64-битный проект, если он нацелен на версию iOS раньше, чем iOS 5.1.

4. Измените параметр "Архитектура" в вашем проекте на "Стандартные архитектуры (включая 64-разрядные)".

5.Успокойте свое приложение для поддержки 64-битной среды выполнения. Новые предупреждения и ошибки компилятора помогут вам в этом процессе. Однако компилятор не выполняет всю работу за вас; использовать информацию в этом документе, которая поможет вам провести исследование ваш собственный код.

6. Проверьте приложение на реальном 64-битном оборудовании. iOS Simulator также может быть полезен во время разработки, но некоторые изменения, такие как функция вызывающие соглашения, видны только тогда, когда ваше приложение работает на устройство.

7.Используйте инструменты для настройки производительности приложений.

8.Подтвердите приложение, которое включает обе архитектуры для утверждения.

Остальная часть этой главы описывает проблемы, которые часто возникают при переносе приложения Cocoa Touch в среду с 64-битным временем выполнения. использование эти разделы направляют ваши собственные усилия на изучение вашего кода.

Из https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaTouch64BitGuide/ConvertingYourAppto64-Bit/ConvertingYourAppto64-Bit.html#//apple_ref/doc/uid/TP40013501-CH3-SW1

Ответ 2

Приложения iOS полагаются на двоичный интерфейс приложения низкого уровня и соглашения о кодировании, установленные языком Objective-C и системными рамками. Начиная с iOS 7, некоторые устройства iOS используют 64-разрядные процессоры и предлагают как 32-битную, так и 64-битную среду выполнения. Для большинства приложений среда 64-разрядной среды выполнения отличается от 32-разрядной среды выполнения двумя существенными способами:

В 64-битной среде выполнения многие типы данных, используемые Cocoa Touch frameworks (а также язык Objective-C), увеличились по размеру или имеют более строгие правила выравнивания памяти. См. " Изменения в типах данных." Для выполнения 64-битной runtime требуются правильные прототипы функций при выполнении вызовов функций. См. " Изменения в вызове функций.

двоичный интерфейс приложения (ABI)

Другие изменения в 64-разрядной среде выполнения

Набор 64-разрядных команд ARM существенно отличается от 32-битного набора команд. Если ваше приложение содержит любой код языка ассемблера, вам необходимо переписать его для использования нового набора команд. Вам также необходимо более подробное описание 64-битных соглашений о вызовах в iOS, поскольку соглашения не соответствуют стандарту ARM. Для получения дополнительной информации см. IOS ABI Function Call Guide.

На высоком уровне, чтобы сделать ваш код 64-битным чистым, вы должны сделать следующее:

  • Избегайте назначения целых чисел в 64 бита в 32-разрядные целые числа.
  • Избегайте назначения 64-битных указателей для 32-разрядных целых чисел.
  • Избегайте усечения указателя и длинного целого во время арифметических операций (или других арифметических проблем, вызванных изменением целочисленных типов).
  • Исправить проблемы выравнивания, вызванные изменениями размеров данных.
  • Убедитесь, что структуры памяти, которые совместно используются между 32-разрядной и 64-разрядной версиями времени выполнения, используют аналогичный макет.
  • Перепишите любой код языка ассемблера, чтобы ваш код использовал новые 64-битные коды операций и время выполнения.
  • Избегайте приведения переменных функций к функциям, которые принимают фиксированное количество параметров, или наоборот.

Ответ 3

На высоком уровне, вот шаги по созданию приложения, предназначенного для 32-разрядных и 64-разрядных сред выполнения:

Установить Xcode 5.0.2 (я сделал это только, может быть, лучше)

Откройте проект. Xcode предлагает вам модернизировать ваш проект. Модернизация проекта добавляет новые предупреждения и ошибки, которые важны при компиляции вашего приложения для 64-разрядной версии.

Обновите настройки своего проекта, чтобы поддерживать iOS 5.1.1 или новее. Вы не можете построить 64-битный проект, если он нацелен на версию iOS раньше, чем iOS 5.1.

Измените параметр "Архитектура" в вашем проекте на "Стандартные архитектуры (включая 64-разрядные)".

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

Проверьте свое приложение на реальном 64-битном оборудовании. iOS Simulator также может быть полезен во время разработки, но некоторые изменения, такие как соглашения о вызове функций, видны только тогда, когда ваше приложение работает на устройстве.

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

В оставшейся части этой главы описываются проблемы, которые часто возникают при переносе приложения Cocoa Touch в среду с 64-разрядной средой выполнения. Используйте эти разделы, чтобы направлять свои усилия на изучение вашего кода.

Следуйте руководству для поддержки 32-разрядной и 64-разрядной архитектуры с помощью apple

Ответ 4

Скомпилированная программа xcode 5 содержала два двоичных кода: 32-разрядные и 64-разрядные. В 32-битной системе будет вызываться 32-разрядный код. В 64-битной системе будет вызываться 64-разрядный код. В то же время, подумайте, что у одной и той же программы есть только 32-битный код, 64-битная система содержит две структуры: 32-разрядную, 64-разрядную. Когда 64-разрядная система, работающая с 32-разрядной программой, вызовет 32-разрядная инфраструктура для базовой поддержки, работающая с 64-разрядной программой, вызовет 64-битную инфраструктуру для базовой поддержки. Более подробно вы можете увидеть официальную документацию Apple "Руководство по переходу на 64-разрядный переход для Cocoa Touch".

Использовать xcode 5 можно легко скомпилировать программу в 64. Основная процедура следующая.

  • Установите поддерживающее устройство в "ios7"

  • "Архитектура" в "Настройке сборки" изменилась на "Стандартные архитектуры (включая 64-разрядные)".

Ответ 5

Что касается первой части вопроса - базовый SDK должен быть "Последним IOS SDK", который является iOS 7.0. Минимальная цель развертывания должна быть iOS 6.0 или вы не сможете выбрать "Стандартные архитектуры, включая 64-разрядные (armv7, armv7s, armv8)" для архитектур. После того, как вы выберете эти настройки, ваше приложение будет создано для 32-разрядных и 64-разрядных версий.

Что касается обновления - после переключения на 32/64-битные арки, проанализируйте свой проект и исправьте новые предупреждения, которые могут появиться. Затем проверьте свое приложение на реальном 64-битном устройстве (iPhone 5s/iPad Air/iPad mini retina). Если ваше приложение использует iCloud, проверьте синхронизацию между 32 и 64-разрядными устройствами. Полезная информация находится в Руководство Apple (резюме из ответа @iDev).

ИЗМЕНИТЬ

Фактически да, минимум 5.1.1, но вы должны либо установить его вручную, либо установить цель развертывания ниже 6.0, а при выборе архитектур вкл. 64-битный Xcode попросит вас установить его как 5.1.1. Во всяком случае, я не уверен, почему вы хотите поддерживать 5.1.1, особенно если вы хотите использовать 64-битные арки.