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

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

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

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

5 ответов


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

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

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

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


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

  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 с соответствующими названиями)


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

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

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


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

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

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

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

действия:

  1. создать тест.txt-файл и добавьте к нему текст " testing✌️", а затем поместите его в папку с именем test.бандл
  2. перетащите его рядом с вашим .файл приложения в xcode (копия)
  3. print(Bundle.main.resourcePath!+"/temp.bundle/test.txt") выход: /Users/James/Library/Developer/Xcode/DerivedData/GitSyncMac-heiwpdjbtaxzhiclikjotucjguqu/Build/Products/Debug/GitSyncMacApp.app / содержание / ресурсы / temp.комплект / тест.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
    }
}