Jak utworzyć pakiet zasobów iOS?
Widziałem niestandardowy pakiet zasobów w projekcie iOS, który oceniłem, więc przynajmniej wiem, że to możliwe.
Mój problem polega na tym, że używam CATiledLayer z około 22,000 kafelkami dla danego obrazu i kompilowanie zajmuje bardzo dużo czasu(pół godziny czystego budowania, 5-10 minut dla zwykłego budowania). Tak więc, chcę wziąć wszystkie obrazy i zrobić niestandardowy pakiet, aby uczynić go przenośnym i mam nadzieję, że nie przekompilować do pakietu aplikacji za każdym razem.
Jak mam to zrobić? Sprawdziłem dokumenty, ale nie widziałem wyjaśnienia, jak utworzyć pakiet.
5 answers
Odpowiedź jest głupio prosta
Stwórz folder w Finderze, Dodaj do niego pliki, zmień jego nazwę na bundlename.bundle
Drag into Xcode-sukces!
Aby uzyskać dostęp, użyj formy PathToMainBundle+" / bundlename.bundle "
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-11 19:32:39
Jak utworzyć pakiet
- Utwórz folder w Finderze.
- Dodaj pliki do folderu
- Zmień nazwę folderu tak, aby jego rozszerzenie było
.bundle
(np. "Nowy folder" - > " Nazwa pakietu.bundle")
PS: możesz w każdej chwili kliknąć prawym przyciskiem myszy folder i nacisnąć "Pokaż Zawartość pakietu", aby dodać, usunąć lub zmodyfikować dowolny z plików.
Jak dodać pakiet do Xcode
- przeciągnij go do Xcode
Jak używać pakiet
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"BundleName" ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];
NSString *resource = [bundle pathForResource:@"fileName" ofType:@"fileType"];
(Zastąp BundleName
, fileName
i fileType
z odpowiednimi nazwami)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-27 12:23:53
Dwie inne pomocne rady:
Po pierwsze, aby zobaczyć zawartość pakietu w XCode, należy ustawić jego typ w panelu Narzędzia File Inspector na "pakiet aplikacji". Nadal nie będzie można kopiować do iz przez XCode. Musisz użyć terminala, ale XCode natychmiast go zaktualizuje.
Po drugie, aby wykorzystać zasoby w pakiecie, oto przydatny fragment...
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"AquarianHarp" ofType:@"bundle"];
NSString *imageName = [[NSBundle bundleWithPath:bundlePath] pathForResource:@"trebleclef2" ofType:@"png"];
UIImage *myImage = [[UIImage alloc] initWithContentsOfFile:imageName];
Jak wspomniałem w moim komentarzu powyżej, nie musisz ładować pakietu (nie możesz, ponieważ nie jest wykonywalny) i ofType
musi pasować do przypadku rzeczywistego pliku, aby działał na urządzeniu. W symulatorze będzie działać tak czy inaczej, więc nie daj się zwieść temu czerwonemu śledziowi!
Wreszcie, nie musisz umieszczać swoich zasobów w podfolderze" zasoby " wewnątrz pakietu. Wydaje się, że można użyć dowolnego układu, ale mogą być nieznane implikacje wydajności.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-02 14:49:50
Oto Jak mam to do pracy: w XCode utwórz nowy plik | Resource | Settings Bundle. Następnie w Finderze wybierz ten pakiet i wybierz Pokaż Zawartość pakietu, a następnie dodaj dowolne pliki obrazów.
Następnie w kodzie odnośnik obrazka w ten sposób:
NSString *imgName = @"bundlename.bundle/my-image.png";
UIImage *myImage = [UIImage imageNamed:imgName];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-10 05:17:36
Moje uwagi na temat łączenia i czytania plików w projekcie XCode
Kroki:
- Utwórz test.plik txt i dodaj do niego tekst " testing✌ ️", a następnie umieść go w folderze o nazwie test.bundle
- przeciągnij i upuść go obok swojego .plik aplikacji w xcode (copy)
-
print(Bundle.main.resourcePath!+"/temp.bundle/test.txt")
Wyjście: /Users/James/Library/Developer/Xcode/DerivedData/GitSyncMac-heiwpdjbtaxzhiclikjotucjguqu/Build/Products/Debug/GitSyncMacApp.app / Contents / Resources / temp.pakiet / test.txt
Przykład:
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
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-31 20:41:12