Xcode 5 и iOS 7: архитектура и допустимые архитектуры



Я начинаю новый проект в Xcode 5. Я хочу разработать приложение с помощью iOS SDK 7 но с целью развертывания iOS 5.0. Как только я создаю новый проект в Xcode и пытаюсь изменить цель развертывания на 5.0, у меня появляется это сообщение:



Applications including an arm64 slice are not compatible with versions of iOS
prior to 6.0
Adjust your Architectures build setting to not include arm64 in order to deploy
to releases prior to iOS 6.0.


так изменились архитектуры на Standard (нет 64 бит). Я компилирую, запускаю, но я действительно не понимаю, что только что произошло.

в чем разница между Architectures и Valid architectures настройки в сборке проекта Xcode Настройки?
если я поставил Architectures чтобы исключить 64-бит что происходит, когда я запускаю свое приложение на 64-битном iPhone или iOS Simulator (я знаю, что это работает, мне просто интересно, что происходит внизу)?
можете ли вы объяснить большой беспорядок с новой 64-битной архитектурой?



enter image description here

765   6  

6 ответов:

установите для параметра архитектура в сборке значение стандартные архитектуры (armv7, armv7s)

enter image description here

iPhone 5S питается от 64-битного процессора A7. От apple docs

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

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

из документации я понял, что это

  • Xcode может создавать как 64-битные 32-битные двоичные файлы для одного приложения, но целью развертывания должен быть iOS7. Они говорят, что в будущем это будет быть iOS 6.0
  • 32-битный двоичный файл будет отлично работать в iPhone 5S (64-битный процессор).

Обновление (Xcode 5.0.1)
В Xcode 5.0.1 они добавили поддержку для создания 64-битного двоичного кода для iOS 5.1.1 и далее.

Xcode 5.0.1 может построить ваше приложение как с 32-разрядными, так и с 64-разрядными двоичными файлами. Для этого комбинированного двоичного файла требуется минимальная цель развертывания iOS 5.1.1 или более поздней версии. 64-разрядный двоичный файл работает только на 64-разрядных устройствах под управлением iOS 7.0.3 и более поздних версий.

Обновление (Xcode 5.1)
Xcode 5.1 внес существенные изменения в секция архитектуры. Это ответ будет продолжение, для вас. проверить это

когда вы устанавливаете 64-битный результирующий двоичный файл является" жирным " двоичным файлом, который содержит все три изображения Mach-O в комплекте с тонким жирным заголовком. Вы можете видеть это с помощью otool или jtool. Вы можете проверить некоторые двоичные файлы fat, включенные в состав iOS 7.0 SDK, например AVFoundation Framework, например:

% cd  /Developer/Platforms/iPhoneOS.platform/DeviceSupport/7.0\ \(11A465\)/Symbols/System/Library/Frameworks/AVFoundation.framework/

%otool -V -f AVFoundation                                                                     9:36
Fat headers
fat_magic FAT_MAGIC
nfat_arch 3
architecture arm64     # The 64-bit version (A7)
    cputype CPU_TYPE_ARM64
    cpusubtype CPU_SUBTYPE_ARM64_ALL
    capabilities 0x0
    offset 16384
    size 2329888
    align 2^14 (16384)
architecture armv7        # A5X - packaged after the arm64version
    cputype CPU_TYPE_ARM
    cpusubtype CPU_SUBTYPE_ARM_V7
    capabilities 0x0
    offset 2359296
    size 2046336
    align 2^14 (16384)
architecture armv7s       # A6 - packaged after the armv7 version
    cputype CPU_TYPE_ARM
    cpusubtype CPU_SUBTYPE_ARM_V7S
    capabilities 0x0
    offset 4407296
    size 2046176
    align 2^14 (16384)

что касается самого двоичного файла, он использует набор команд ARM64 бит, который (в основном совместим с 32-битным, но) совершенно другой набор команд. Это особенно важно важно для графической программы (использование неоновых инструкций и регистров). Кроме того, процессор имеет больше регистров, что оказывает значительное влияние на скорость работы программы. Есть интересная дискуссия в http://blogs.barrons.com/techtraderdaily/2013/09/19/apple-the-64-bit-question/?mod=yahoobarrons о том, имеет ли это значение; тесты бенчмаркинга до сих пор четко указывали, что это так.

использование otool-tV приведет к сбросу сборки (если у вас есть XCode 5 и позже), а затем вы можете увидеть разницу в наборе инструкций для себя. Большинство (но не все) разработчиков останутся агностиками к изменениям, поскольку по большей части они не влияют непосредственно на Obj-C (несмотря на CG* API) и должны делать больше с обработкой указателя низкого уровня. Компилятор будет работать свою магию и оптимизацию.

мое понимание от Apple Docs.

  • что это архитектура (ARCHS) в Xcode build-settings?
    • указывает архитектуру / s, к которой относится двоичный файл TARGETED. Если указано более одной архитектуры, созданный двоичный файл может содержать объектный код для каждой из указанных архитектуры.
  • Что это Действительный Архитектур (VALID_ARCHES) в Xcode сборка-настройки?

    • указывает архитектуру / S, для которой двоичный файл может быть построен.
    • во время процесса сборки этот список пересекается с ARCHS, и результирующий список определяет архитектуры, на которых может работать двоичный файл.
  • пример: - один проект iOS имеет следующие настройки сборки в Xcode.

    • ARCHS = armv7 armv7s
    • VALID_ARCHES = armv7 armv7s arm64
    • In в этом случае двоичный файл будет построен для архитектур armv7 armv7s arm64. Но тот же двоичный файл будет работать только на ARCHS = armv7 armv7s.

вам не нужно ограничивать свой компилятор только ARMv7 с и armv7s на удалении arm64 установка из поддерживаемых архитектур. Вам просто нужно установить цель развертывания настройки к 5.1.1

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

просто исправить:

Цели - > Настройки Сборки - > Параметры Сборки - > Включить Bitcode - > Нет

работает на устройстве с iOS 9.3.3

ни один из ответов не работал, а затем я забыл установить минимальную цель развертывания, которую можно найти в проект ->общие ->Информация О Развертывании ->Цель Развертывания - > 8.0

Example

Comments

    Ничего не найдено.