webentwicklung-frage-antwort-db.com.de

Wie erstelle ich ein iOS-Asset-Bundle?

Ich habe ein benutzerdefiniertes Asset-Bundle in einem von mir bewerteten iOS-Projekt gesehen, daher weiß ich zumindest, dass es möglich ist.

Mein Problem ist, dass ich einen CATiledLayer mit etwa 22.000 Kacheln für ein bestimmtes Bild verwende und das Kompilieren sehr lange dauert (eine halbe Stunde Clean Build, 5-10 Minuten für das normale Build). Ich möchte also alle Bilder aufnehmen und ein benutzerdefiniertes Bundle erstellen, um es portabel zu machen und hoffentlich nicht jedes Mal in das App-Bundle neu zu kompilieren.

Wie gehe ich vor? Ich habe die Dokumente durchgesehen, konnte jedoch keine Erklärung dazu finden, wie das Bundle erstellt wird. 

53
michael

Die Antwort ist dumm einfach

Erstellen Sie einen Ordner im Finder, fügen Sie Dateien hinzu und benennen Sie ihn in Bündelname.bundle um

in Xcode ziehen - Erfolg!

verwenden Sie für den Zugriff das Formular PathToMainBundle + "/ bundlename.bundle".

89
michael

So erstellen Sie ein Bundle

  1. Erstellen Sie einen Ordner im Finder.
  2. Fügen Sie dem Ordner Dateien hinzu
  3. Benennen Sie den Ordner um, sodass die Erweiterung .bundle lautet (z. B. "Neuer Ordner" -> "BundleName.bundle").

PS: Sie können jederzeit mit der rechten Maustaste auf den Ordner klicken und auf "Paketinhalt anzeigen" klicken, um Dateien hinzuzufügen, zu entfernen oder zu ändern.

So fügen Sie das Bundle zu Xcode hinzu

  1. Ziehen Sie es in Xcode 

So verwenden Sie das Bundle

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"BundleName" ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath]; 
NSString *resource = [bundle pathForResource:@"fileName" ofType:@"fileType"];

(Ersetzen Sie BundleName, fileName und fileType durch entsprechende Namen.)

34
hfossli

Zwei weitere hilfreiche Ratschläge:

Um den Inhalt des Bundles in XCode anzuzeigen, müssen Sie seinen Typ im Dienstprogramm "Datei-Inspektor" auf "Anwendungs-Bundle" setzen. Sie können immer noch nicht über XCode kopieren. Sie müssen Terminal verwenden, aber XCode aktualisiert es sofort.

Zweitens, um Ressourcen im Bundle zu nutzen, hier ein hilfreicher Ausschnitt ...

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"AquarianHarp" ofType:@"bundle"];
NSString *imageName = [[NSBundle bundleWithPath:bundlePath] pathForResource:@"trebleclef2" ofType:@"png"];
UIImage *myImage = [[UIImage alloc] initWithContentsOfFile:imageName];

Wie in meinem Kommentar oben erwähnt, müssen Sie das Bundle nicht wirklich laden (Sie können es nicht ausführen, da es nicht ausführbar ist) und ofType muss mit dem Fall Ihrer tatsächlichen Datei übereinstimmen, damit es auf dem Gerät funktioniert. Im Simulator funktioniert es so oder so, also lasst euch nicht von diesem roten Hering täuschen!

Schließlich müssen Sie Ihre Ressourcen nicht im Unterordner "Resources" im Bundle ablegen. Es scheint, dass Sie ein beliebiges Layout verwenden können, es kann jedoch unbekannte Auswirkungen auf die Leistung geben.

25

So habe ich das gemacht: In XCode eine neue Datei erstellen Ressource | Einstellungspaket. Wählen Sie dann im Finder das Bundle aus, wählen Sie Paketinhalt anzeigen und fügen Sie beliebige Bilddateien hinzu. 

Dann verweisen Sie im Code auf ein Bild auf diese Weise:

NSString *imgName = @"bundlename.bundle/my-image.png";
UIImage *myImage = [UIImage imageNamed:imgName]; 
10
LandedGently

Meine Hinweise zum Bündeln und Lesen von Dateien in einem XCode-Projekt 

Schritte:

  1. Erstellen Sie eine test.txt-Datei, fügen Sie den Text "testing✌️" hinzu und legen Sie ihn in einem Ordner namens test.bundle ab
  2. Ziehen Sie es in xcode (Kopie) neben Ihre .app-Datei.
  3. print(Bundle.main.resourcePath!+"/temp.bundle/test.txt") Ausgabe: /Users/James/Library/Developer/Xcode/DerivedData/GitSyncMac-heiwpdjbtaxzhiclikjotucjguqu/Build/Products/Debug/GitSyncMacApp.app/Contes/Resources/temp.bundle./

Beispiel:

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
eonist

Hier sind die Schritte zum Erstellen eines Assets oder Ressourcenpakets (z. B. FrameworkResources.bundle). Dies ist überraschenderweise nicht offensichtlich. Dies ist besonders nützlich, wenn Sie statische Frameworks erstellen.

  1. Drücken Sie Datei -> Neu -> Ziel in Xcode
  2. Wählen Sie "macOS", suchen Sie nach "Bundle"
  3. Tippen Sie auf "Bundle" -> klicken Sie auf "Weiter" -> geben Sie den Produktnamen "MyResources" ein -> tippen Sie auf "Fertig stellen".
  4. Gehen Sie zu "Build-Einstellungen" für das neu erstellte Bundle. Ändern Sie "Base SDK" (SDKROOT) in "iOS".
  5. Gehen Sie zu "Phasen erstellen" für das neu erstellte Bundle. "Compile Sources" und "Link Binary With Libraries" löschen (dadurch wird die ausführbare Datei innerhalb des Bundles entfernt, wodurch alle Arten von Build- und App-Übermittlungsfehlern auftreten können)
0
kgaidis