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