Сборка Mac Catalyst не выполняется при сборке для Mac Catalyst-x86_64, но при попытке установить связь с файлом, созданным для Mac Catalyst-arm64

После обновления до Xcode 12.2 мой проект начал не компилироваться из-за ошибок связывания, связанных с Apple Silicon. Кажется, что большинство из них исправлено, но один подпроект, который строит статически связанный фреймворк, вызывает у меня проблемы. И все же дочерний подпроект с явно идентичными настройками сборки - нет.

Во время связывания я получаю предупреждение об одном фреймворке:

ld: предупреждение: игнорирование файла ... Build / Products / Debug-maccatalyst / TCSiOSC.framework / TCSiOSC, сборка для Mac Catalyst-x86_64, но попытка связи с файлом, созданным для Mac Catalyst-arm64

Я использую Intel Mac для загрузки (так что сборка только активной архитектуры не имеет значения). Я не могу найти какой-либо параметр сборки, который решал бы эту проблему, и поиск в Интернете не обнаружил совпадений с этой конкретной ошибкой. Любые идеи приветствуются!


person Oscar    schedule 16.11.2020    source источник


Ответы (2)


У меня такая же проблема, и я нашел этот вопрос. В моем случае сборка на Debug завершается успешно, а на Release терпит неудачу. Причина как раз в том, что сборка только с активной архитектурой. Эту опцию можно найти в вашем ПРОЕКТЕ - Вкладка «Настройки сборки», затем в разделе «Архитектура». Есть настройка только для сборки активной архитектуры. По умолчанию режим отладки - Да, а режим выпуска - нет. Это привело к сбою моей сборки в выпуске.

person Yi Hu    schedule 25.11.2020
comment
Спасибо за эту информацию! В моем случае это не было проблемой, но вы напомнили мне обновить этот пост решением, к которому я пришел. - person Oscar; 27.11.2020
comment
Огромное спасибо И Ху !! Я только что опубликовал вопрос об этом в разделе Apple« Спросить разное ». Затем я попытался усерднее искать в основном stackoverflow и нашел ответ И Ху на Оскар. Это была именно моя проблема, и я решил ее без проблем! - person Craig Reynolds; 06.12.2020

Я проконсультировался с Apple по этому поводу, и их инженер порекомендовал несколько вещей:

  1. Превратите любые подпроекты Swift в пакеты Swift, а не встроенные проекты Xcode. Итак, я удалил проект Xcode одной библиотеки из родительского проекта и перетащил его каталог верхнего уровня в родительский проект, чтобы включить его как пакет Swift. Теперь ... в этом конкретном подпроекте (SQLite.swift) уже был определен пакет Swift. Я сам раньше не создавал пакет Swift, поэтому не могу с этим поделать. Кроме того, не забудьте добавить его в список Frameworks, Libraries и Embedded Content в целевом объекте приложения.

  2. Зайдите в настройки сборки вашего проекта и удалите параметр Поддерживаемые платформы. Если вы нажмете кнопку уровней над списком параметров сборки, вы увидите, откуда берется каждый параметр. Поддерживаемые платформы не должны выделяться жирным шрифтом. Выделите строку и нажмите Удалить, если она полужирная. Затем перейдите к своей цели и сделайте то же самое: удалите Поддерживаемые платформы.

  3. Установите базовый SDK на уровне вашего проекта (верхний) на iOS; это обязательно. Удалите его с целевого уровня, чтобы он унаследовал от проекта; Я не знаю, верно ли это для нескольких типов целей или для всех проектов, но у меня это работает.

  4. Удалите параметр сборки VALID_ARCHS со всех целей, если он присутствует. Этот параметр устарел.

В моем случае настройка активной архитектуры сборки не имеет никакого значения после этих изменений. Теперь проект отлично компилируется и работает под Catalyst.

person Oscar    schedule 27.11.2020
comment
В настоящее время существует проблема с CocoaPods, когда для Базового SDK проекта Pods по умолчанию установлено значение Нет SDK (MacOS). Изменив его на iOS, как было предложено здесь, я решил проблему связывания. - person Max Klint; 23.12.2020
comment
Рад это слышать! - person Oscar; 24.12.2020