9
votes

Empêcher iOS QuickLook de générer un cache

J'utilise le Framework QuickLook A> Dans mon application iOS pour prévisualiser divers fichiers. J'ai récemment remarqué que QuickLook garde une cache de tous les fichiers prévisualisés dans le répertoire tmp code> TMP de mon application. Il y a deux problèmes avec des fichiers de mise en cache QuickLook cependant:

  1. Ces fichiers mis en cache sont déjà stockés dans le répertoire de documents. Donc, en théorie, l'application pourrait doubler si l'utilisateur souhaite prévisualiser tous leurs fichiers (qu'ils le feront probablement). D'accord, pas de gros problème, je peux périodiquement nettoyer le cache à l'aide de ce code: p>

    - (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller {
        return 1;
     }
    
    - (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        //Get the stored user data and file name
        NSString *FileName = [defaults objectForKey:@"FileName"]; //Name of file stored in NSUserDefaults
        NSString *finalFilePath = [documentsDirectory stringByAppendingPathComponent:FileName];
    
        return [NSURL fileURLWithPath:finalFilePath];
    }
    
    - (IBAction)previewFile:(id)sender {
       //Setup QuickLook
       QLPreviewController *previewController = [[QLPreviewController alloc] init];
       previewController.delegate=self;
       previewController.dataSource=self;
       previewController.currentPreviewItemIndex = 0;
       [previewController reloadData];
       [self presentModalViewController:previewController animated:YES];
       [previewController.navigationItem setRightBarButtonItem:nil];
    }
    
  2. La seconde et La question la plus importante forte> est que QuickLook semble créer un cache secondaire dans un dossier système (pas mon application). Ceci est un problème car les utilisateurs ont la possibilité de chiffrer des fichiers individuels dans mon application. S'ils prévisualisent un fichier avant de crypter, il semble normal. Si elles cryptées puis prévisualisent ensuite, le fichier apparaît toujours comme s'il n'était pas crypté. Je sais qu'il n'y a pas de problème avec le cryptage car le fichier crypté stocké dans le répertoire code> documents code> est crypté et ne peut pas être lu (correctement) par n'importe quel programme. Il s'agit d'un problème majeur, car il peut entraîner la croire que l'utilisateur croit que le fichier n'était pas crypté. C'est également un problème de sécurité car cela signifie que QUICKLook met en cache le fichier ailleurs. P> LI> ol>

    Voici mon code QuickLook: P>

    NSFileManager *fileMgr = [NSFileManager defaultManager];
    NSArray *fileArray = [fileMgr contentsOfDirectoryAtPath:NSTemporaryDirectory() error:nil];
     for (NSString *filename in fileArray)  {
        [fileMgr removeItemAtPath:[NSTemporaryDirectory() stringByAppendingPathComponent:filename] error:NULL];
    }
    


1 commentaires

Je n'ai pas de réponse pour vous autre que "je n'ai pas vu de manière non et utilise un uiwebview " (malgré la fonctionnalité pire). Avez-vous essayé de soumettre une demande de fonctionnalité à Apple et de voir ce qu'ils ont dit?


3 Réponses :


1
votes

S'il n'y a pas de moyen d'empêcher QlpreviewController de faire sa propre mise en cache, vous voudrez peut-être envisager de faire votre propre version QLpreviewController avec un UIWebView (car cela est capable de consulter de nombreux types de fichiers tels que PDF, Docs, XLS, etc. .).

Ce n'est en aucun cas une solution idéale et vous n'aurez nulle part près du niveau de qualité de performance / interface utilisateur, car le QLPreviewController fournira. Ouais ... c'est un peu une solution piratée, mais une API publique pour effacer le cache secondaire ... C'est la seule chose que je puisse penser.

Je suppose que c'est un mélange entre la convivialité + la sécurité.

bonne chance!


0 commentaires

1
votes

Je pense que vous pouvez réinitialiser l'intégralité du cache de l'invite de commande à l'aide de: xxx

ou générer un aperçu pour des documents spécifiques à l'aide de: xxx < P> Mais parce que ceci est une solution de ligne de commande, ce n'est probablement pas ce dont vous avez besoin. Bonne chance, cependant.


2 commentaires

Je suppose que cela fonctionnerait sur OSX, mais probablement pas sur iOS - car il n'y a pas d'accès à la ligne de commande :-(


Un très bon point. Je me demande pourquoi je pensais que l'OP utilisait OSX. En laissant cette réponse dans au cas où d'autres ont des problèmes avec QuickLook à OSX.



1
votes

Peut-être essayer peut-être un nsurlcache et voir si cela aide.

Configurer dans l'application DidfinishlaunchingwithOptions: P>

[[NSURLCache sharedURLCache] removeAllCachedResponses];


0 commentaires