Условный импорт в Objective-C в зависимости от архитектуры - PullRequest
0 голосов
/ 18 марта 2019

У меня есть предварительно скомпилированная библиотека, которая доступна только как arm64 framework. Я хотел бы импортировать его, когда это возможно, и импортировать другую версию библиотеки, если цель armv7.

Как мне добиться этого с помощью Objective-C?

Я ищу что-то похожее на этот псевдокод:

if arm64 || x86_64 {
#import <LibraryArm64>
} else {
#import <Library32>
}

Изменено:

Этот код дает достаточно близкий для меня результат:

#if __LP64__
#import <A.h>
#else
#import "B.h"
#endif

1 Ответ

0 голосов
/ 18 марта 2019

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

Это будет выглядеть примерно так в настройках сборки.

enter image description here

Единственная «ошибка» в том, что с более свежими версиями Xcode вам нужно «помочь» Xcode сделать это вручную. Когда вы в первый раз попытаетесь добавить архитектуру или SDK (щелкните значок «+» справа от значения параметра «Конфигурация»), будет отображаться только «Любая архитектура | Любой SDK».

enter image description here

Затем вам нужно отредактировать файл project.pbxproj и выполнить поиск «arch = *». Тогда вы можете заменить это своей архитектурой. Например, в файле project.pbxproj это будет выглядеть следующим образом.

            "GCC_OPTIMIZATION_LEVEL[arch=*]" = s;

После этого вы увидите, что он правильно отображается в Xcode (как в моем первом примере).

...