XCode 11 поддерживает библиотеки металлов.
- Добавьте новую цель сборки в ваш проект.
![enter image description here](https://i.stack.imgur.com/iQFdP.png)
Добавление металлических файлов в исходники компиляции
![enter image description here](https://i.stack.imgur.com/Z3pIO.png)
Если вы используете Core Image, добавьте эти флаги компоновщика. Измените цели развертывания (ios12 +) и проверьте наличие быстрой математики.
![enter image description here](https://i.stack.imgur.com/76mFW.png)
К исходной цели проекта добавьте новые зависимости и скопируйте скрипт
cp "$ {BUILT_PRODUCTS_DIR}" / *. Metallib "$ {METAL_LIBRARY_OUTPUT_DIR}" ![enter image description here](https://i.stack.imgur.com/1JHxF.png)
Дополнительно:
Избегайте жестко закодированных строк везде в проекте. Добавить файл xconfig в проект
MY_METAL_LIBRARY_NAME_10_13 = Metal_10_13_aaa
MY_METAL_LIBRARY_NAME_10_14 = Metal_10_14_bbb
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) MY_METAL_LIBRARY_NAME_10_13='@"$(MY_METAL_LIBRARY_NAME_10_13)"' MY_METAL_LIBRARY_NAME_10_14='@"$(MY_METAL_LIBRARY_NAME_10_14)"'
Добавить xconfig в качестве конфигурации (не устанавливайте его для проекта, потому что в итоге вы получите двойной импорт) ![enter image description here](https://i.stack.imgur.com/SwCXR.png)
Измените переменную PRODUCT_NAME каждой библиотеки металлов на переменную
![enter image description here](https://i.stack.imgur.com/LEE8G.png)
Используйте переменные препроцессора в коде
static NSString *const kMetallibExtension = @"metallib";
NSString *const kMetalLibraryOldTarget = MY_METAL_LIBRARY_NAME_10_13; //@"Metal_10_13";
NSString *const kMetalLibraryFastMathTarget = MY_METAL_LIBRARY_NAME_10_14; //@"Metal_10_14";
+ (NSString *)metalLibraryName
{
if (@available(macOS 10.14, *)) {
return kMetalLibraryFastMathTarget;
} else {
return kMetalLibraryOldTarget;
}
//use default
//return @"default";
}