Я начинаю новый проект в 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-битной архитектурой?
Ответы:
Установите для архитектуры в настройке сборки значение Стандартные архитектуры (armv7, armv7s)
iPhone 5S оснащен 64-битным процессором A7. Из документов Apple
Из документации я понял, что
Обновление (Xcode 5.0.1)
В Xcode 5.0.1 добавлена поддержка создания 64-битного двоичного файла для iOS 5.1.1 и новее.
Обновление (Xcode 5.1)
Xcode 5.1 внес существенные изменения в раздел архитектуры. Этот ответ станет для вас продолжением. Проверь это
источник
arm64
.Насколько я понимаю, из Apple Docs.
Что такое допустимые архитектуры (VALID_ARCHS) в настройках сборки Xcode?
Пример: - Один проект iOS имеет следующие настройки сборки в Xcode.
источник
Когда вы устанавливаете 64-битную версию, результирующий двоичный файл является «толстым» двоичным файлом, который содержит все три изображения Mach-O, объединенные с тонким толстым заголовком. Вы можете убедиться в этом, используя otool или jtool. Вы можете проверить некоторые толстые двоичные файлы, входящие в состав 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-разрядными версиями, но) совершенно другой набор команд. Это особенно важно для графической программы (использующей NEON инструкции и регистры). Точно так же у ЦП больше регистров, что сильно влияет на скорость выполнения программы. В http://blogs.barrons.com/techtraderdaily/2013/09/19/apple-the-64-bit-question/?mod=yahoobarrons есть интересное обсуждение того, имеет ли это значение; сравнительные тесты пока ясно показали, что это так.
Использование otool -tV сбрасывает сборку (если у вас XCode 5 и новее), после чего вы можете сами увидеть различия в наборе команд. Большинство (но не все) разработчиков останутся безразличными к изменениям, так как по большей части они не влияют напрямую на Obj-C (несмотря на CG * API) и должны делать больше с обработкой указателей низкого уровня. Компилятор будет творить чудеса и оптимизацию.
источник
Вам не нужно ограничивать свой компилятор только armv7 и armv7s , удалив настройку arm64 из поддерживаемых архитектур. Вам просто нужно установить для параметра Deployment target значение 5.1.1.
Важное примечание: вы не можете установить цель развертывания на 5.1.1 в разделе « Параметры сборки », потому что это раскрывающийся список только с фиксированными значениями. Но вы можете легко установить его на 5.1.1 в разделе « Общие » настроек приложения, просто введя значение в текстовое поле.
источник
Простое исправление:
Цели -> Параметры сборки -> Параметры сборки -> Включить битовый код -> Нет
Работает на устройстве с iOS 9.3.3
источник
Ни один из ответов не сработал, а затем я забыл установить минимальную цель развертывания, которую можно найти в Project -> General -> Deployment Info -> Deployment Target -> 8.0
источник