Как указать версию Metal Shader Language?
Мое приложение получил Binary Rejected
в третий раз. Аварийные журналы не помогают (я их символизировал, но они не содержат журналов печати...).
Работает нормально на iPhone 6s
, iPhone X
а также iPad Pro 12.9
Я тестирую на iOS 12
с целью приложения iOS 11
Так как Metal для iOS нельзя запустить в симуляторе, я не тестировал на iOS 11
Так что я получил Crashlytics и получил некоторую информацию для crash_info_entry_0
ключ:
... Error Domain = AGXMetalA8X Code = 3 "Функция... использует язык версии 2.1, который несовместим с этой ОС."...
Это произошло на iPad Air 2 (A8)
Бег iOS 11.4.1
Я думаю, проблема в том, что iOS 11
доза не поддерживает металл language version 2.1
Как мне изменить языковую версию на 2.0
?
Обновление 1:
После проверки моего Metal Lib у него действительно была цель iOS 12
, То, что это работало хорошо с целью приложения из iOS 11
, Теперь я изменил цель Metal Lib на iOS 11
Надеюсь, это тоже изменит версию Metal Language...
Я хотел бы, чтобы компилятор или App Store Uploader поймал это
Обновление 2:
Это сработало! Изменение целевой версии Metal Lib для iOS также изменяет версию Metal Shader Language.
1 ответ
В целях, которые содержат код Metal, есть параметр сборки, называемый "Редакция языка Metal" (фактический ключ MTL_LANGUAGE_REVISION
и допустимые значения включают Metal12
а также Metal20
, что соответствует языковым версиям 1.2 и 2.0 соответственно), что позволяет указать предпочитаемую версию MSL. Если этот параметр не задан, этот параметр выбирает значение по умолчанию, подходящее для текущего SDK и цели развертывания, что в вашем случае представляется слишком агрессивным. Если вы не используете функции MSL 2.1, вы можете явно установить для этого "Metal 2.0" в разделе "Настройки сборки" настроек вашей цели.