web-dev-qa-db-fra.com

Xcode 6 continue de renommer le répertoire de mon application dans le simulateur iOS8 après chaque exécution.

J'utilise Xcode 6 Beta 5, mais cela se produit depuis la première version bêta. Le répertoire de mon application dans le simulateur continue d'être renommé après chaque exécution. Il m'a fallu un certain temps pour comprendre cela. J'utilise ceci pour obtenir la référence dir du doc.

NSString *folder = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                        NSUserDomainMask,
                                                        YES) lastObject];

NSLog(@"Documents Dir: %@",folder);

Maintenant, par exemple, lors de la première manche, ce sera:

/ Users/Joey/Library/Developer/CoreSimulator/Devices/5B9930EE-A9B4-4B36-BABB-AA864ACAF2DE/data/Containers/Data/Application/4B10C2E4-A5C3-4C64-93B1-4069FCCB9C46/Documents

La deuxième manche est maintenant:

/ Users/Joey/Library/Developer/CoreSimulator/Devices/5B9930EE-A9B4-4B36-BABB-AA864ACAF2DE/data/Containers/Data/Application/7E9EB62D-115A-4092-AD23-CB6BA3E5E10F/Documents

Troisième manche:

/ Users/Joey/Library/Developer/CoreSimulator/Devices/5B9930EE-A9B4-4B36-BABB-AA864ACAF2DE/data/Containers/Data/Application/EC8F41E8-52ED-4B10-9808-B3ACC46FC6AA/Documents

Cela fait des ravages avec mon application car elle stocke les références de chemin pour certains fichiers dans l'application. Ce n'est pas que mon instruction NSLog renvoie des résultats incorrects, j'ai vérifié que c'est ce qui se passe dans le Finder. Ça change le nom à chaque fois. Quelqu'un a-t-il vu cela se produire? Est-ce une "fonctionnalité" que je comprends mal?

69
Joseph Toronto

Il s'avère que Xcode 6 change en fait l'UUID de l'application à chaque exécution, et j'ai tort de stocker des chemins absolus.

49
Joseph Toronto

UTILISER DES SIMPHOLDERS

J'ai utilisé cette application sur Xcode 5 ouvre le dossier Documents, pour l'application en cours d'exécution dans le simulateur, dans le Finder.

http://simpholders.com/

pas encore prêt pour Xcode 6 (à partir du 24 septembre 2014) mais enregistre tout ce tracas.

Dans Xcode 6/iOS8 Le bundle est maintenant séparé des données./ L'application GUID est régénérée entre les exécutions dans Xcode (je ne sais pas pourquoi)

  DOCUMENTS DIR:/Users/gbxc/Library/Developer/CoreSimulator/Devices/AC79941F-EC56-495E-A077-773EEE882732/data/Containers/Data/Application/C220D351-0BE7-46BA-B35E-D16646C61A3F/Documents
mainBundlePath_:/Users/gbxc/Library/Developer/CoreSimulator/Devices/AC79941F-EC56-495E-A077-773EEE882732/data/Containers/Bundle/Application/12200D1D-9B67-408B-BCF7-38206CBE0940/myappname.app/BLANK_BLOG_SCALED.jpg

1. TROUVEZ LE DOSSIER DES APPAREILS dans SIMULATOR

/Users/gbxc/Library/Developer/CoreSimulator/Devices/

ouvrez chaque /device.plist pour voir quel GUID est quel périphérique dans XCode - je pense que c'est statique

3. TROUVEZ L'APPAREIL que vous utilisez sur l'iPad 2 - Je pense que c'est statique

/Devices/AC79941F-EC56-495E-A077-773EEE882732

4. Trouvez votre dossier d'application/documents

/AC79941F-EC56-495E-A077-773EEE882732/data/Containers/Data/Application/C220D351-0BE7-46BA-B35E-D16646C61A3F/Documents

ATTENTION au GUID C220D351-0BE7-46BA-B35E-D16646C61A3F est régénéré chaque fois que l'application est exécutée dans XCode 6

 NSArray *paths_ = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        if(paths_){
            _docsDir = [paths_ firstObject];
            DebugLog(@"DOCUMENTS DIR:%@",_docsDir);         
        }else{
            ErrorLog(@"paths_ is nil - cant get Documents directory");
        }

Chemin du GROUPE PRINCIPAL

NSString *mainBundlePath_ = [[NSBundle mainBundle] pathForResource:@"someimageinyourbundle" ofType:@"jpg"];
/AC79941F-EC56-495E-A077-773EEE882732/data/Containers/Bundle/Application/12200D1D-9B67-408B-BCF7-38206CBE0940/clarksonsiq.app/BLANK_BLOG_SCALED.jpg

NE JAMAIS METTRE EN CACHE LE CHEMIN vers/Documents entre les exécutions, cela changera.

Je le sérialisais à un plist et ne pouvais pas comprendre pourquoi ils continuaient à disparaître

Le GUID ci-dessus/Documents continue de changer entre les exécutions mais si vous avez/Documents ouverts dans le Finder, le dossier reste ouvert.

https://devforums.Apple.com/thread/235911?tstart=0

https://devforums.Apple.com/thread/238754?tstart=0
8
brian.clear

Solution gratuite

Utilisez la bibliothèque Open Source OpenSim . OpenSim est une alternative open source pour les SimPholders, écrite en Swift.

Solution payante

Utilisez l'application SimPholder pour connaître l'emplacement actuel de l'application.

enter image description here

Pour xcode 6.0>

Télécharger SimPholder 2.0 alpha 2


Pour xcode 5.1 <

Télécharger SimPholders 1.5

7
Paresh Navadiya

Vous devez enregistrer uniquement le chemin dans DocumentDirectory (répertoire/nom de fichier) et l'ajouter à DocumentDirectory chaque fois que vous chargez le fichier ...

-(void)saveImage:(UIImage *)image{
NSData *pngData = UIImagePNGRepresentation(image);
NSString *pathInDocumentDirectory = [APP_DocumentDirectory stringByAppendingPathComponent:PROFILE_IMAGE_NAME];
NSString *filePath = [self documentsPathForFileName:pathInDocumentDirectory];
//Save pic file path - DirName/Filename.png
[XYZPreferencesHelper setUserImageFilePath:pathInDocumentDirectory];
 //Write the file
[[NSFileManager defaultManager] createFileAtPath:filePath contents:pngData attributes:nil];

}



-(void)loadSavedUserPicture{
//Load saved DirName/Filename.png
NSString *pathInDocumentDirectory = [XYZPreferencesHelper getUserImageFilePath];

if (pathInDocumentDirectory != nil){
    //Full path with new app Document Directory
    NSString *filePath = [self documentsPathForFileName:pathInDocumentDirectory];
    if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]){
        NSData *pngData = [NSData dataWithContentsOfFile:filePath];
        UIImage *image = [UIImage imageWithData:pngData];
        if (image != nil){
            userPicImageView.image = image;
        }

    }

 }
}



- (NSString *)documentsPathForFileName:(NSString *)name
{
NSString *documentsPath = [self createRestcallDirectoryIfNotExist];
return [documentsPath stringByAppendingPathComponent:name];
}



-(NSString *)createRestcallDirectoryIfNotExist{
NSString *path;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
path = [documentsPath stringByAppendingPathComponent:APP_DocumentDirectory];
NSError *error;
if (![[NSFileManager defaultManager] fileExistsAtPath:path])    //Does directory already exist?
{
    if (![[NSFileManager defaultManager] createDirectoryAtPath:path
                                   withIntermediateDirectories:NO
                                                    attributes:nil
                                                         error:&error])
    {
        NSLog(@"Create directory error: %@", error);
    }
}
return documentsPath;
}
1
Shlomi Fresko

Je peux confirmer que c'est lié à Xcode 6 et non à iOS 8.

J'ai deux machines de développement. Sur l'un d'eux, j'ai Xcode 5. Je travaillais tout le temps sur cette machine et mes URL étaient bien (application photo, les photos sont visibles).

Hier, j'ai vérifié sous git ma source sur une machine avec Xcode 6. J'ai remarqué que mes photos ne sont plus visibles, seules les photos créées pendant cette session d'application.

Après un petit débogage, j'ai réalisé que le fichier: /// var/mobile/Applications/B6A6BAEF-C90C-4A2A-93DB-E6700B88971F/Documents/change à chaque exécution d'application.

Pendant tout ce temps, je travaille avec un appareil iOS 7.

Je vais vérifier une fois de plus sur une machine avec Xcode 5 pour confirmer quand je mets la main dessus.

1
vale4674