Как сделать пакет активов iOS? - PullRequest
54 голосов
/ 03 февраля 2011

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

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

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

Ответы [ 6 ]

92 голосов
/ 11 марта 2011

Ответ глупо прост, используйте форму PathToMainBundle + "/ bundlename.bundle"

36 голосов
/ 27 мая 2014

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

  1. Создать папку в Finder.
  2. Добавить файлы в папку
  3. Переименуйте папку, чтобы ее расширение было .bundle (например, «Новая папка» -> «BundleName.bundle»)

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

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

  1. Перетащите его в Xcode

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

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

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

25 голосов
/ 19 ноября 2011

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

Во-первых, чтобы увидеть содержимое пакета в 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 должен соответствовать регистру вашего фактического файла, чтобы он работал на устройстве .В симуляторе это будет работать в любом случае, так что не дайте себя обмануть этой красной селедке!

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

10 голосов
/ 10 июля 2011

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

Тогда в коде ссылаться на изображение таким образом:

NSString *imgName = @"bundlename.bundle/my-image.png";
UIImage *myImage = [UIImage imageNamed:imgName]; 
1 голос
/ 31 июля 2017

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

Шаги:

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

Пример:

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
    }
}
0 голосов
/ 05 февраля 2019

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

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