Arbeiten mit ZIP/Archiven in Swift (iOS/macOS): vollständige Anleitung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit ZIP/Archiven in Swift (iOS/macOS)



In der modernen Entwicklung für iOS und macOS besteht häufig die Notwendigkeit, Dateien in ZIP-Archive zu komprimieren oder Daten daraus zu extrahieren. Dies kann zur Speicherplatzersparnis, zur Datenübertragung über das Netzwerk oder zur Organisation von Backups erforderlich sein. In diesem Artikel betrachten wir zwei Hauptansätze: die Nutzung der integrierten Möglichkeiten von Foundation und der beliebten Drittanbieter-Bibliothek ZipFoundation.



Integrierte Mittel von Foundation (NSFileCoordinator + Low-Level-Arbeit)



Apple bietet keine High-Level-API für die Arbeit mit ZIP in Foundation. Ab iOS 12 / macOS 10.14 besteht jedoch die Möglichkeit, NSFileCoordinator und NSFileWrapper für einige Operationen zu verwenden. Für die vollständige Arbeit mit ZIP wird jedoch meist das Systemdienstprogramm libz über die C-Schnittstelle genutzt.



Beispiel: Datenkomprimierung mit libz

import Compressionimport Foundation

func compressData(_ data: Data) -> Data? { let sourceData = data as NSData let compressedData = NSMutableData(length: data.count)! var compressedSize = data.count let result = compression_encode( compressedData.mutableBytes.assumingMemoryBound(to: UInt8.self), &compressedSize, sourceData.bytes.assumingMemoryBound(to: UInt8.self), data.count, nil, COMPRESSION_ZLIB ) guard result == COMPRESSION_STATUS_OK else { return nil } compressedData.length = compressedSize return compressedData as Data}


Bibliothek ZipFoundation (empfohlener Weg)



ZipFoundation ist eine leichtgewichtige Open-Source-Bibliothek für die Arbeit mit ZIP-Archiven in Swift. Sie unterstützt iOS, macOS, tvOS und watchOS. Installation über Swift Package Manager:



// In Package.swift oder über Xcodedependencies: [    .package(url: "https://github.com/weichsel/ZIPFoundation.git", from: "0.9.0")]


Hauptfunktionen von ZipFoundation:

  • Erstellung von ZIP-Archiven aus Dateien und Ordnern
  • Extraktion einzelner Dateien oder des gesamten Archivs
  • Unterstützung von Passwörtern (AES-256)
  • Arbeit mit Streams für große Dateien
  • Kompatibilität mit macOS und iOS


Beispiel 1: Erstellen eines ZIP-Archivs

import ZIPFoundationimport Foundation

func createZip(from sourceURL: URL, to destinationURL: URL) throws { let fileManager = FileManager() // Archiv aus einem Ordner erstellen try fileManager.zipItem(at: sourceURL, to: destinationURL) // Oder aus einer einzelnen Datei // try fileManager.zipItem(at: sourceURL, to: destinationURL, // shouldKeepParent: false)}

// Verwendunglet documents = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!let sourceFolder = documents.appendingPathComponent("MyData")let archiveURL = documents.appendingPathComponent("backup.zip")

do { try createZip(from: sourceFolder, to: archiveURL) print("Archiv erstellt: \\(archiveURL.path)")} catch { print("Fehler: \\(error)")}


Beispiel 2: Entpacken eines ZIP-Archivs

import ZIPFoundation

func unzipArchive(at sourceURL: URL, to destinationURL: URL) throws { let fileManager = FileManager() // Zielordner erstellen, falls nicht vorhanden try fileManager.createDirectory(at: destinationURL, withIntermediateDirectories: true) // Entpacken try fileManager.unzipItem(at: sourceURL, to: destinationURL)}

// Verwendunglet archiveURL = documents.appendingPathComponent("backup.zip")let extractFolder = documents.appendingPathComponent("ExtractedData")

do { try unzipArchive(at: archiveURL, to: extractFolder) print("Entpacken abgeschlossen")} catch {

Empfehlungen