iOS: создайте пакет ресурсов с помощью Xcode Target

Я хочу создать пакет ресурсов из файлов ресурсов моей статической библиотеки через цель xcode. Я видел, что у Three20 есть файл .bundle, который нужно импортировать.

Как я могу это сделать?


person cschuff    schedule 10.12.2011    source источник


Ответы (2)


Важный отказ от ответственности:

Apple не поддерживает это решение. Когда я разговаривал с разработчиком в Apple, который работает над Xcode, он сообщил мне, что пакеты ресурсов не поддерживаются в iOS, и они были удивлены, что это вообще работает.

Это решение сработало для меня на iOS с 9 по 13, как на телефоне, так и на планшете. Однако возможно, что будущее обновление iOS может сломать это. Просто знайте об этом.

Теперь к ответу:

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

Шаг 1. Создайте новую цель

введите здесь описание изображения

  • Убедитесь, что ваш проект выбран в Навигаторе проектов.
  • Нажмите на + в нижней части списка целей.

Шаг 2. Создайте пакет macOS

введите здесь описание изображения

Мы преобразуем это в пакет iOS на шаге 3.

Шаг 2 (продолжение). Создайте пакет macOS

введите здесь описание изображения

  • Назовите свой пакет
  • Нажмите «Готово»

Шаг 3. Измените базовый SDK с macOS на iOS

введите здесь описание изображения

  • Убедитесь, что выбрана новая цель пакета ресурсов.
  • Перейдите в Настройки сборки.
  • Найдите Base SDK и измените это значение с macOS на iOS.

На этом этапе вы технически закончили свой вопрос (создание цели Resource Bundle для iOS), но для правильной работы требуется некоторая настройка.

Шаг 4. Замените ресурсы iOS Bundle

введите здесь описание изображения

  • Убедитесь, что выбрано ваше целевое приложение (не набор ресурсов).
  • Перейдите к Этапам сборки.
  • Выбрать все ресурсы
  • Нажмите кнопку -, чтобы удалить их.

Шаг 4 (продолжение). Замена ресурсов пакета iOS

введите здесь описание изображения

  • Нажмите кнопку +, чтобы добавить новый ресурс пакета в приложение iOS (не показано на рисунке).
  • Выберите пакетный продукт
  • Нажмите «Добавить»

Шаг 5. Настройте зависимости

введите здесь описание изображения

  • Откройте раздел Зависимости (все еще в разделе "Фазы сборки" и все еще в вашем приложении, а не в пакете ресурсов).
  • Нажмите кнопку +, чтобы добавить новую зависимость.

Шаг 5 (продолжение). Настройка зависимостей

введите здесь описание изображения

  • Выберите проект пакета ресурсов
  • Нажмите «Добавить»

Готово!

Выполнив все эти шаги, вы создадите пакет ресурсов, совместимый с iOS, и встроите его в свое приложение для загрузки. Это не так просто, и во многих статьях может быть сказано, что это не поддерживается, но я использовал эту функцию в опубликованном приложении, и она отлично работает.

Просто помните, что если вы хотите добавить какие-либо ресурсы в свое приложение сейчас (файлы PNG, XIB-файлы и т. д.), вам нужно добавить их в комплект, а не в приложение, например:

введите здесь описание изображения

Важная ошибка

После того, как вы настроите это, проверьте настройки сборки вашего пакета ресурсов еще раз. Найдите параметр под названием «Система управления версиями». Это значение должно быть равно None. Если установлено значение Apple Generic, вы будете сталкиваться с проблемами при попытке отправить приложение в магазин приложений!

Система управления версиями Apple создаст файл *_vers.c, скомпилирует его и встроит этот двоичный файл в ваш пакет. Поскольку это недопустимый CFBundleExecutable, это приведет к отклонению вашего приложения с ошибкой ITMS-90171.

введите здесь описание изображения

person stevendesu    schedule 05.12.2019
comment
Большое спасибо. Ваш совет по системе управления версиями сэкономил мне много времени! - person OdNairy; 13.05.2020

Пакет — это просто каталог со специальной структурой и расширением .bundle. Вы можете прочитать больше об особенностях в документация.

Изменить:

Важно то, что пакет — это обычная папка со специальным расширением. Например, если у вас есть папка с именем MyBundle.bundle и изображение внутри с именем image.png, вы можете загрузить его с помощью [UIImage imageNamed:@"MyBundle.bundle/image.png"]; Таким образом, нет необходимости создавать его с помощью цели Xcode. Фактически, он недоступен в проектах iOS. У вас может быть фаза сборки копирования файлов в вашем проекте или сценарий оболочки.

Это просто и мощно. Например, если вы соответствуете специальной структуре, указанной в документации для фреймворков, вы можете встроить статические библиотеки в фреймворки, используя простой метод, сценарии оболочки, задачи ant или файлы rake. Пока выходной каталог соответствует структуре и называется Something.framework, вы можете использовать его как Framework даже на iOS.

person Don    schedule 17.01.2012
comment
Документация НЕ предоставляет эту информацию - она ​​расплывчата, машет рукой и игнорирует фактический вопрос. Я пришел сюда из Google специально, ПОТОМУ ЧТО я читал документы, на которые вы ссылаетесь, и хотя они работают для OS X, большинство деталей iOS отсутствуют. Понижение. - person Adam; 02.12.2012
comment
@ Адам, надеюсь, я более подробно изложил свои мысли и причину ссылки на документы. - person Don; 06.12.2012