Est-ce que quelqu'un connaît toute bibliothèque / code qui me permettra d'encoder et de décoder des données formatées .TAR - que je peux utiliser dans mon projet iPhone (de préférence cacao) p>
Merci d'avance p>
craig p>
MISE À JOUR: J'ai examiné les bibliothèques suggérées et parvenue à la conclusion qu'ils font de Waaaay à une grande partie du problème - je développe moi-même le codec - c'est seulement une en-tête ASCII de 512Bytes après tout - comment dur peut-il être: -) p>
7 Réponses :
Vous pouvez essayer libxad . Ceci est la bibliothèque qui Le nonchiver , une application Mac, utilise. p>
En fait, LibRarchive.DYLIB est inclus dans l'iPhone SDK. Vous devez juste l'ajouter. Le problème est que Apple n'a pas inclus l'archive du fichier d'en-tête.h. Cependant, d'abord, vous n'avez pas besoin des fichiers d'en-tête si vous savez avec certitude les fonctions que vous allez appeler existent (bien que le compilateur se gémit), seconde, si vous ne souhaitez pas que le compilateur se plaint, vous pouvez télécharger le fichier d'en-tête. Pour Librarchive 2.6 et l'inclure dans votre programme ... P>
Si vous voulez savoir savoir pour utiliser LibRarchive, téléchargez sa source du Web et étudiez l'exemple donné (en particulier Minitar). C'est vraiment très simple. P>
Je crois que cela fait de manière non documentée, ce qui signifie que vous ne pouvez pas l'utiliser. Mais je pourrais avoir tort.
S'il vous plaît voir ma réponse ci-dessous. LibarArchive Code> est une API privée sur toutes les versions de iOS. Pour être une API publique (1) la bibliothèque binaire doit être dans le SDK, et (2) le fichier d'en-tête doit être dans le SDK.
Est-ce que LibarRarchive est-il public sur Mac OS?
Même meilleur lien: http://code.google.com/p/libarchive/downloads/detail?Name=libarchive-2.6.2.tar.gz&can=2&q= P>
La version 2.6.2 est incluse dans les SDK iOS 4.0 et 4.1. Ce n'est pas présent en 3.2 (ou plus tôt je suppose). P>
Si vous téléchargez cela, exécutez ./ configure --prefix = $ home && make && créer installer code> et vous trouverez les deux fichiers d'en-tête placés en $ home / include p>
S'il vous plaît voir ma réponse ci-dessous. LibarArchive Code> est une API privée sur toutes les versions de iOS. Pour être une API publique (1) la bibliothèque binaire doit être dans le SDK, et (2) le fichier d'en-tête doit être dans le SDK.
La meilleure bibliothèque que j'ai trouvée est Je viens de créer un référentiel sur GitHub qui dispose des outils pour créer http://github.com/davepeck/ios-libarchive/ P >
D'autres ont souligné que libarchive code>. Il est bien conçu, bien documenté et rapide. P>
LibRarchive code> et
libbz2 code> comme des bibliothèques statiques pour iOS 4.2+. (Il devrait être possible de l'utiliser pour cibler la version 3.x.) P>
libarchive code> est inclus dans le SDK. Ce n'est pas tout à fait vrai. Le binaire
libarchive.2.dylib code> est inclus, mais les en-têtes ne sont pas. La même chose s'applique à
libbz2 code> (mais, curieusement, pas à
libz code>.) Cela signifie que
libarchive code> est considéré comme une API privée - en d'autres termes Vous ne pouvez pas l'utiliser si vous avez l'intention d'expédier sur l'App Store. D'où mon référentiel. P>
Hey Dave, merci de partager votre travail. Je me demande si vous avez réellement soumis une application au magasin à l'aide de ce code. Cette question suggère que vous pouvez toujours avoir des problèmes: Stackoverflow .com / questions / 3507684 / ...
Projet lié à a été effacé de l'existence
LibarArchive CODE> est un logiciel libre, comment Apple pourrait "privé"?
LibarRarchive vient préinstallé sur iOS. p>
Pour LibRarchive, cela fonctionne hors de la boîte en ajoutant simplement "LibRarchive" à votre liste de formats, mais l'en-tête est manquant. Vous pouvez copier les en-têtes de la source de Libarchive. Ou si vous voulez garder cela simple, essayez ceci:
+ (void)unpackArchive: (NSData*) archiveData { int r; struct archive* a; struct archive_entry *entry; const char *entry_path; NSString *baseDir = [self baseDir]; NSFileHandle* file; NSError* error; NSDictionary* result = @{}; NSLog(@"Unpacking %d byte static assets tarball into %@", [archiveData length], baseDir); if (![[NSFileManager defaultManager] createDirectoryAtPath:baseDir withIntermediateDirectories:YES attributes:nil error:&error]) { NSLog(@"Create directory error: %@", error); } a = archive_read_new(); archive_read_support_format_gnutar(a); archive_read_support_format_tar(a); archive_read_support_compression_gzip(a); r = archive_read_open_memory(a, (void*)[archiveData bytes], [archiveData length]); if (r != ARCHIVE_OK) { NSLog(@"ERROR[%d] in archive_read_open_file(): %s", r, archive_error_string(a)); return; } for (;;) { r = archive_read_next_header(a, &entry); if (r == ARCHIVE_EOF) { break; } if (r != ARCHIVE_OK) { NSLog(@"ERROR[%d] in archive_read_next_header(): %s", r, archive_error_string(a)); return; } entry_path = archive_entry_pathname(entry); NSString* path = [baseDir stringByAppendingPathComponent: [NSString stringWithUTF8String: entry_path]]; NSLog(@"Tarball Entry: %s", entry_path); // Create the file and blank it out [[NSFileManager defaultManager] createFileAtPath: path contents:[[NSMutableData alloc] init] attributes:nil]; // Actually write the file file = [NSFileHandle fileHandleForWritingAtPath:path]; r = archive_read_data_into_fd(a, [file fileDescriptor]); if (r != ARCHIVE_OK) { NSLog(@"ERROR[%d] in archive_read_data_into_fd(): %s", r, archive_error_string(a)); return; } [file closeFile]; } r = archive_read_close(a); if (r != ARCHIVE_OK) { NSLog(@"ERROR[%d] in archive_read_close(): %s", r, archive_error_string(a)); return; } }
Il semble y avoir deux bibliothèques plus modernes, toutes deux disponibles sous forme de cocoapodes: P>
Les deux sont très similaires, car ils sont tous deux basés sur Light-endnar-for -IOS . P>
Tarkit produit des fichiers qui ne sont pas développés par Archive Utility.app, Yosemite, le fichier i Tar'ed est un fichier de polices.
Correction: [Docteur TarfileatPath: Filépath Topath: Tarr FilePath Erreur: NIL] suppose que FilePath est un dossier et donc s'il ne s'agit que d'un fichier à goudron, il échoue ...
J'ai fini par utiliser nvhtargzip, après Contribuer .tar code> et
à celui-ci. . tar.gz code> Emballage
Premier élément trouvé dans Google 'Tar Bibliothèque C' Feep.net/Libtar
Craig, avez-vous déjà trouvé une bonne réponse ici ... ou fait des progrès sur votre propre mise en œuvre? C'est un grand trou dans l'espace API, autant que je sache. Aussi: J'ai réussi à obtenir que Libtar compilait dans des bibliothèques statiques respectueuses de l'iPhone, mais c'était un processus douloureux et j'ai rencontré quelques accidents dans des cas de test qui me font fondamentalement penser que je dois abandonner la direction entière.