Подтвердить что ты не робот

Как сделать пакет активов iOS?

Я просмотрел собственный пакет активов в проекте iOS, который я оценил, поэтому, по крайней мере, я знаю, что это возможно.

Моя проблема в том, что я использую CATiledLayer с примерно 22 000 фрагментов для данного изображения, и для компиляции требуется очень много времени (полчаса чистой сборки, 5-10 минут для регулярной сборки). Итак, я хочу взять все изображения и сделать собственный набор, чтобы сделать его переносным и, надеюсь, не перекомпилировать в пакет приложений каждый раз.

Как мне это сделать? Я проверил документы, но не видел объяснений, как на самом деле создать пакет.

4b9b3361

Ответ 1

Ответ глупо прост

Создайте папку в finder, добавьте в нее файлы, переименуйте ее в bundlename.bundle

перетащить в Xcode - успех!

для доступа, используйте форму PathToMainBundle + "/bundlename.bundle"

Ответ 2

Как создать пакет

  • Создайте папку в finder.
  • Добавить файлы в папку
  • Переименуйте папку так, чтобы ее расширение было .bundle (например, "Новая папка" → "BundleName.bundle" )

PS: вы можете в любой момент щелкнуть правой кнопкой мыши по папке и нажать "Показать содержимое пакета", чтобы добавить, удалить или изменить любые файлы.

Как добавить пакет в Xcode

  • Перетащите его в Xcode

Как использовать пакет

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"BundleName" ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath]; 
NSString *resource = [bundle pathForResource:@"fileName" ofType:@"fileType"];

(Замените BundleName, fileName и fileType на соответствующие имена)

Ответ 3

Два других полезных совета:

Во-первых, чтобы увидеть содержимое пакета в XCode, вам нужно установить его тип в панели служебных программ File Inspector, в "Application Bundle". Вы по-прежнему не сможете копировать и с помощью XCode. Вам нужно будет использовать Terminal, но XCode немедленно обновит его.

Во-вторых, чтобы использовать ресурсы в пакете здесь полезный фрагмент...

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"AquarianHarp" ofType:@"bundle"];
NSString *imageName = [[NSBundle bundleWithPath:bundlePath] pathForResource:@"trebleclef2" ofType:@"png"];
UIImage *myImage = [[UIImage alloc] initWithContentsOfFile:imageName];

Как уже упоминалось в моем комментарии выше, вам действительно не нужно загружать пакет (вы не можете, поскольку он не является исполняемым), а ofType должен соответствовать случаю вашего фактического файла, чтобы он работал на устройстве. Это будет работать в симуляторе, поэтому не обманывайте эту красную селедку!

Наконец, вам не нужно размещать свои ресурсы в подпапке "Ресурсы" внутри пакета. Кажется, вы можете использовать произвольный макет, но могут быть неизвестны последствия для производительности.

Ответ 4

Вот как я получил это для работы: в XCode создайте новый файл | Ресурс | Настройки Bundle. Затем в Finder выберите этот пакет и выберите "Показать содержимое пакета" и добавьте все файлы изображений.

Затем в ссылке на код изображение следующим образом:

NSString *imgName = @"bundlename.bundle/my-image.png";
UIImage *myImage = [UIImage imageNamed:imgName]; 

Ответ 5

Мои заметки о связывании и чтении файлов в проекте XCode

Действия:

  • Создайте файл test.txt и добавьте в него текст "testing", а затем поместите его в папку с именем test.bundle
  • Перетащите его рядом с вашим .app файлом в xcode (копия)
  • print(Bundle.main.resourcePath!+"/temp.bundle/test.txt") Результат:/Users/James/Library/Developer/Xcode/DerivedData/GitSyncMac-heiwpdjbtaxzhiclikjotucjguqu/Build/Products/Debug/GitSyncMacApp.app/Contents/Resources/temp.bundle/test.txt

Пример:

print(content(Bundle.main.resourcePath!+"/temp.bundle/test.txt"))// testing✌️
static func content(_ path:String)->String?{
    do {
        let content = try String(contentsOfFile:path, encoding:String.Encoding.utf8) as String//encoding: NSUTF8StringEncoding
        return content
    } catch {
        return nil
    }
}

Ответ 6

Вот шаги для создания актива или пакета ресурсов (например, FrameworkResources.bundle) - это на удивление неочевидно. Это особенно полезно, если вы создаете статические рамки.

  1. Нажмите Файл → Создать → Цель в Xcode
  2. Выберите вкладку "macOS", поиск "Bundle"
  3. Нажмите "Пакет" → нажмите "Далее" → введите название продукта "MyResources" → нажмите "Готово"
  4. Перейдите в "Настройки сборки" для только что созданного Пакета. Измените "Базовый SDK" (SDKROOT) на "iOS"
  5. Перейдите в "Фазы сборки" для только что созданного пакета. Удалите "Исходники компиляции" и "Связать двоичные файлы с библиотеками" (это приведет к удалению исполняемого файла в комплекте, что может вызвать всевозможные ошибки сборки и отправки приложения)