Ответ 1
Ответ глупо прост
Создайте папку в finder, добавьте в нее файлы, переименуйте ее в bundlename.bundle
перетащить в Xcode - успех!
для доступа, используйте форму PathToMainBundle + "/bundlename.bundle"
Я просмотрел собственный пакет активов в проекте iOS, который я оценил, поэтому, по крайней мере, я знаю, что это возможно.
Моя проблема в том, что я использую CATiledLayer с примерно 22 000 фрагментов для данного изображения, и для компиляции требуется очень много времени (полчаса чистой сборки, 5-10 минут для регулярной сборки). Итак, я хочу взять все изображения и сделать собственный набор, чтобы сделать его переносным и, надеюсь, не перекомпилировать в пакет приложений каждый раз.
Как мне это сделать? Я проверил документы, но не видел объяснений, как на самом деле создать пакет.
Ответ глупо прост
Создайте папку в finder, добавьте в нее файлы, переименуйте ее в bundlename.bundle
перетащить в Xcode - успех!
для доступа, используйте форму PathToMainBundle + "/bundlename.bundle"
Как создать пакет
.bundle
(например, "Новая папка" → "BundleName.bundle" )PS: вы можете в любой момент щелкнуть правой кнопкой мыши по папке и нажать "Показать содержимое пакета", чтобы добавить, удалить или изменить любые файлы.
Как добавить пакет в 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, в "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
должен соответствовать случаю вашего фактического файла, чтобы он работал на устройстве. Это будет работать в симуляторе, поэтому не обманывайте эту красную селедку!
Наконец, вам не нужно размещать свои ресурсы в подпапке "Ресурсы" внутри пакета. Кажется, вы можете использовать произвольный макет, но могут быть неизвестны последствия для производительности.
Вот как я получил это для работы: в XCode создайте новый файл | Ресурс | Настройки Bundle. Затем в Finder выберите этот пакет и выберите "Показать содержимое пакета" и добавьте все файлы изображений.
Затем в ссылке на код изображение следующим образом:
NSString *imgName = @"bundlename.bundle/my-image.png";
UIImage *myImage = [UIImage imageNamed:imgName];
Мои заметки о связывании и чтении файлов в проекте XCode
print(Bundle.main.resourcePath!+"/temp.bundle/test.txt")
Результат:/Users/James/Library/Developer/Xcode/DerivedData/GitSyncMac-heiwpdjbtaxzhiclikjotucjguqu/Build/Products/Debug/GitSyncMacApp.app/Contents/Resources/temp.bundle/test.txtprint(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
}
}
Вот шаги для создания актива или пакета ресурсов (например, FrameworkResources.bundle
) - это на удивление неочевидно. Это особенно полезно, если вы создаете статические рамки.
SDKROOT
) на "iOS"