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


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

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

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

5 52

5 ответов:

ответ тупо простой

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

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

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

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

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

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.приложение / содержание / ресурсы / темп.комплект / тест.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
    }
}