Создает ли дублирование ссылки на каталог активов и включение его из платформы? - PullRequest
0 голосов
/ 26 апреля 2019

Как обсуждено здесь & здесь , единственный очевидный способ размещения многократно используемых изображений в файле .xcassets платформы, а затем использовать эти изображения в раскадровке / XIB приложения - вручную создать ссылку на этот файл каталога непосредственно в проекте приложения. Это помещает ресурсы в основной пакет приложения и позволяет избежать этой ошибки при попытке использовать их через Interface Builder:

Не удалось загрузить изображение «ImageName», на которое ссылается перо в комплект с идентификатором "BundleName"

Однако у меня такой вопрос: Приводит ли это к дублированию ресурсов во время сборки? Достаточно ли умна iOS, чтобы не удваивать активы, которые оба:

  • Ссылка на основной пакет приложения и
  • Входит в комплект встроенного каркаса

Если это приводит к дублированию, какой другой подход может достичь того же результата более эффективно? Платформа должна быть встроена в приложение, потому что она содержит другой повторно используемый код, а ресурсы должны быть в каталоге платформы, потому что они также используются в других приложениях.

1 Ответ

1 голос
/ 21 мая 2019

Цель Apple - минимизировать пространство, необходимое для активов, поэтому активы объединяются и сжимаются в один файл с именем «Asset.car».

При отправке в магазин приложений запускается процесс под названием «Разбавление приложений», который создает варианты для разных реальных устройств.

Вы можете имитировать процесс локально, а сторонними инструментами даже заглянуть в файл «Asset.car».

Я подробно описал весь процесс в этом ответе: Пиксельные изображения на iOS10 при сборке с Xcode 10

Чтобы проверить это сам, я сделал следующее:

  • Я создал рабочее пространство
  • Я добавил рамки
  • Я добавил приложение
  • внутри фреймворка я добавил 'Media.xcassets'
  • Я ссылаюсь на этот Media.xcassets из приложения
  • Я добавил одну фотографию под названием «Regensburg.jpg» в Media.xcassets
  • Я использую это изображение в раскадровке

Затем я делаю процесс, описанный в моем связанном ответе выше, и извлекаю файл Asset.car.

При взгляде со сторонним инструментом внутри видно, что изображение только один раз.

Итак, хорошие новости: как и ожидалось, дублирования не происходит.

Скриншот

screenshot

На скриншоте вы видите:

  • Структура проекта Xcode с каркасом и приложением, а также .xcassets в фоновом режиме

  • использование единственного изображения внутри раскадровки

  • извлеченный Assets.car в Finder в правом нижнем углу

  • наконец упомянутый сторонний инструмент в левом нижнем углу, где вы видите, что файл есть только один раз

Дополнительная информация

Как и в моем другом ответе, я бы рекомендовал взглянуть на это видео WWDC 2018: Сессия 227, Оптимизация ресурсов приложения, https://developer.apple.com/videos/play/wwdc2018/227/

...