Как сделать пакет активов iOS?
Я видел пользовательский пакет активов в проекте iOS, который я оценил, поэтому, по крайней мере, я знаю, что это возможно.
моя проблема заключается в том, что я использую CATiledLayer с примерно 22 000 плиток для данного изображения, и это занимает очень много времени для компиляции (полчаса чистой сборки, 5-10 минут для обычной сборки). Итак, я хочу взять все изображения и сделать пользовательский пакет, чтобы сделать его портативным и, надеюсь, не перекомпилировать в пакет приложений каждый раз.
Как мне это сделать? Я проверил документы, но не видел объяснения о том, как на самом деле создать пакет.
5 ответов:
ответ тупо простой
создайте папку в finder, добавьте в нее файлы, переименуйте ее в bundlename.бандл
перетащите в Xcode-успех!
для доступа используйте форму PathToMainBundle+ " /bundlename.бандл"
как создать пакет
- создать папку в finder.
- добавить файлы в папку
- переименуйте папку так, чтобы ее расширение было
.bundle
(например "Новая папка" -> "BundleName.бандл")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
с соответствующими названиями)
два других полезных совета:
во-первых, чтобы увидеть содержимое пакета в 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
действия:
- создать тест.txt-файл и добавьте к нему текст "testing✌️", а затем поместите его в папку с именем test.бандл
- перетащите его рядом с вашим .файл приложения в xcode (копия)
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 } }