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.

Author: michael, 2011-02-03

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 "

 86
Author: michael,
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

  1. Utwórz folder w Finderze.
  2. Dodaj pliki do folderu
  3. 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

  1. 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)

 31
Author: hfossli,
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.

 25
Author: Hari Karam Singh,
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]; 
 10
Author: LandedGently,
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:

  1. Utwórz test.plik txt i dodaj do niego tekst " testing✌ ️", a następnie umieść go w folderze o nazwie test.bundle
  2. przeciągnij i upuść go obok swojego .plik aplikacji w xcode (copy)
  3. 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
    }
}
 0
Author: eonist,
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