Ошибка квадратных скобок в хедерах UnityFramework в Xcode

—

от автора

Знакомство

Привет!

Я учусь разрабатывать игры на движке Unity. За моей спиной пока что 3 учебных проекта.

Предыстория

Я спокойно себе пилю проект, никого не трогаю, собираю очередную сборку iOS, открываю проект в Xcode и…. на меня обваливается шквал ошибок. Я начинаю пытаться разобраться в том, как исправить ошибку внутри проекта Xcode. Не выходит…

Бегу судорожно откатывать последние изменения в проекте Unity…. Тщетно.
Переключаюсь с текущей ветки на ветку main, собираю сборку, понимаю что битва только начинается.

Вернусь немного назад. Когда я получил ошибки в Xcode и пытался понять какие изменения в Untiy могли вызвать их, я заметил, что после сборки проекта Xcode, в консоли Untiy появляются предупреждения о том, что не были найдены какие-то скрипты рендеринга. Предполагаю, что раз не были найдены некие скрипты, то это могло повлиять на проект Xcode. Я не знал, существуют они давно или привнесены последними изменениями. Очень много времени трачу на локализацию проблемы (теперь она, как это часто бывает, выглядит пустяком для меня. И так оно и есть). Сокращая детали и подробную историю, постараюсь изложить коротко. Как оказалось, проблема в том, что изначально я создавал проект URP, чтобы просто посмотреть на него, потыкать, сравнить с неURP. Почему то в этом же проекте я начал делать игру. Позже я удалил часть ассетов URP, но как оказалось не все. И предупреждения, которые появлялись после сборки Unity билда говорили о том, что в проекте нет скриптов, используемые в оставшемся шаблоне URP. Решение простое — удалить шаблоны.

Итак, я проверил коммиты из недалекого прошлого, которые успешно билдились и ошибка не пропала. И только в этот момент битва действительно только началась.

Ныряю рыбкой в гугл.

И происходит то, что в будущем сподвигло меня на публичное описание проблемы и ее решения… Я ничего не нахожу. Даже носители родного языка всех этих сред разработки ни разу не упомянули об этой проблеме. Так что новичкам я точно помогу.

Я находил два поста, в которых описывали как отключить предупреждения. Казалось бы, кейс похожий, но у них всего лишь предупреждения, а у меня ошибка.

Не называя имя главного злодея, его существования и его действий не отменишь. Кажется уже все вокруг меня слышат этот крик, но не души, а подгорающего … вулкана. Сборка не собирается!

Я естественно воспользовался этими советами, но дальше я уже не мог думать конструктивно, осознанно подходить к решению проблемы, я был на автопилоте. Я просто копал. Смотрел хедеры и настройки фреймворка. Миллион раз гуглил и перечитывал одно и тоже. И даже кажется начал что-то понимать.

Я точно понял, что фреймворк, который делает Unity или по крайней мере хедеры фреймворка — это либо чистый C++, либо он там присутствует в том или ином виде. И я полез в настройки UnityFramework связанные с С++. Исходя из прочитанных статей я понял, что искать надо в Apple Clang — Warnings — C++. Но я, естественно, не особо хорошо понимал, что на что влияет в Xcode, мог только догадываться.

Конец битвы окажется не таким как я ожидал.

На исходе третьего дня я в отчаянии открываю другой свой проект, меняю платформу на iOS, собираю проект Xcode, в этом проекте собираю сборку. Она собирается…. Я сравниваю хедеры фреймворка проекта с ошибками и проекта, который спокойно билдит сборки. Хм, они идентичны по использованию двойных кавычек и угловых скобок. Я расстроен. Но следующая мысль — сравнить настройки фреймворка касаемо С++. Последний день наполнен большим количеством напряженных моментов, от почти каждого действия я жду, что оно окажется решающим. Настройки в двух проектах отличаются. Я меняю два параметра с «Да» на «Нет». Запускаю сборку, готовлюсь смотреть, какие из ошибок пропадут… а может появятся другие?.. прикидываю, что попробовать дальше… и я понимаю, что сижу с лицом выражающим тупое удивление…. я вижу саксесс где сказано что‑то типа: «Невозможно запустить сборку, ваше устройство занято».

Я сижу и не знаю что думать. Уже и забыл что я там последнее разрабатывал в своем проекте. И вроде облегчение, можно дальше пилить свой проект, а не копаться в этом… ИКСкоде. А вроде возмущение, два переключателя с «Да» на «Нет»… три дня. Вместо того чтобы разрабатывать, я бился с ошибками, взявшимися из ниоткуда, а решение — переключить два жалких параметра.

Итак, это все лирика, теперь обратим внимание на техническую часть проблемы.

Проблема

В нескольких места, в хедерах фреймворка появляется ошибка: «double-quoted include [название хедера].h in framework header expected angle-bracketed instead». double-quoted include .h in framework header expected angle-bracketed instead

Если пойти на поводу у самонадеянного Xcode, и сменить в указанных им местах двойные кавычки на квадратные(я бы назвал их угловыми) скобки, это вызывает появление противоречивой ошибки, по причине того, что с <> указанные хедеры не находятся. Новая ошибка выглядит так: «‘[название хедера].h’ file not found with <angled> include; use «quotes» instead». ‘.h’ file not found with <angled> include; use «quotes» instead

Решение давольно простое: переходим в настройки сборки фреймворка. UnityFramework > Build Settings. Листаем список до Apple Clang — Warnings — C++. И в этом разделе меняем Yes на No для Suspicious Moves, Range-based For Loops.

UnityFramework > Build Settings. Листаем список до Apple Clang — Warnings — C++» title=»UnityFramework > Build Settings. Листаем список до Apple Clang — Warnings — C++» width=»1644″ height=»690″ data-src=»https://habrastorage.org/getpro/habr/upload_files/dfc/722/d9a/dfc722d9a641c47aedb1013d9c99a3e3.png»/></p>
<div><figcaption>UnityFramework > Build Settings. Листаем список до Apple Clang — Warnings — C++</figcaption></div>
</figure>
<p>Так же можно на всякий случай отключить предупреждения.</p>
<p>Для этого никуда не уходим из  Build Settings. Просто листаем до Apple Clang — Warnings — All languages и меняем Yes на No для Quoted Include In Framework Header.</p>
<figure class= UnityFramework > Build Settings. Листаем список до Apple Clang — Warnings — All languages » title=» UnityFramework > Build Settings. Листаем список до Apple Clang — Warnings — All languages » width=»1670″ height=»1698″ data-src=»https://habrastorage.org/getpro/habr/upload_files/697/350/846/6973508469b6537e3849b393d491771c.png»/></p>
<div><figcaption> UnityFramework > Build Settings. Листаем список до Apple Clang — Warnings — All languages</figcaption></div>
</figure>
<h2>Заключение</h2>
<p>Возможно, я неправильно что-то понял и описал неверно. Но самое главное — эти действия помогли мне избавиться от проблемы. Теперь я могу дальше спокойно пилить игру и тестировать ее на устройстве. </p>
<p>Это кайф!</p>
<p>Если вдруг кто-то столкнется с этим, не хочу чтобы этот человек потратил 3 дня или вообще не смог решить проблему. Я был бы рад преодолеть ее не за 3 дня, а за 10 минут, загуглив и переключив два — три параметра в настройках. </p>
</p>
</div>
</div>
</div>
<p><!----><!----></div>
<p><!----><!----><br /> ссылка на оригинал статьи <a href= https://habr.com/ru/articles/729002/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *