Проблема со структурой папок студии Xamarin в проекте iOS

У меня возникают проблемы с папками xamarin. В настоящее время я пишу проект xamarin iOS. В Xcode я использовал каталоги для группировки изображений, может быть несколько уровней вложенных папок, но когда я строил проект для симулятора устройств или iOS, эти ресурсы просто копировались в основной комплект, без какой-либо структуры папок. Я не могу достичь такого же поведения в студии хамарин. Всякий раз, когда я создаю папки в своем проекте и помещаю в них изображения или другие ресурсы, эта структура папок воссоздается на самом устройстве и, таким образом, я борюсь с разными путями при загрузке изображений. Как я могу сделать студию xamarin просто скопировать файлы в папки в основной пакет, вместо воссоздания структуры папок?

Спасибо за помощь.

Ответ 1

Мое первое предложение - изменить свойство BuildAction ваших изображений на BundleResource.

Как только вы это сделаете, существует несколько способов достижения вашей цели:

Первый вариант - указать LogicalName как то, что вы хотите, чтобы имя было внутри скомпилированного набора приложений. В настоящее время нет способа установить Resource ID (имя пользовательского интерфейса для свойства LogicalName) для чего-либо иного, кроме EmbeddedResource файлов (я буду исправлять это мгновенно), но вы можете редактировать *.csproj так:

<BundleResource Include="Icons\icon.png">
  <LogicalName>icon.png</LogicalName>
</BundleResource>

Обычно этот файл Icons\icon.png будет скопирован в пакет приложений iOS как Icons/icon.png, однако свойство LogicalName переопределяет относительное имя пути. В этом случае он будет скопирован как просто icon.png.

В качестве другого примера вы также можете сделать это:

<BundleResource Include="Icons\iOS\icon.png">
  <LogicalName>AppIcon.png</LogicalName>
</BundleResource>

Это скопирует файл Icons\iOS\icon.png в корень пакета приложений iOS, а также переименует его в AppIcon.png.

Второй вариант - просто переместить файлы изображений в папку Resources. Папка "Ресурсы" представляет собой специальный каталог, который удаляется из имен путей по умолчанию при копировании в пакет приложений iOS. Другими словами, Resources\icon.png будет скопирован в корень пакета приложений iOS как icon.png, а не Resources\icon.png, как в случае с нормальными проектными каталогами.

Третий вариант - просто зарегистрировать другие собственные каталоги ресурсов (и они могут существовать в других каталогах, включая каталог ресурсов по умолчанию).

Например, у вас может быть структура в вашем проекте:

Resources/
   Icons/
      icon.png
      [email protected]

И в вашем файле *.csproj отредактируйте следующий тег:

<IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>

и замените его на:

<IPhoneResourcePrefix>Resources;Resources\Icons</IPhoneResourcePrefix>

Это гарантирует, что файлы icon.png и [email protected] установлены в корневом каталоге приложения iOS.

Ответ 2

У Xamarin есть два способа установки файлов, которые вы хотите найти в комплекте iOS:

  • Поместите их в любую папку и отметьте "Build Action" как "Content". Любая структура каталогов, которую вы имеете в своем проекте, будет присутствовать в основном комплекте.
  • Поместите их в папку "Ресурсы" с помощью "Действия сборки" как "BundleResource", это делает то же самое, что и # 1, но удаляет папку "Ресурсы" из пути, присутствующего в комплекте. Это приятное место, чтобы поместить все изображения в корень вашего пакета, но будет загромождать ваш проект.