После каждого запуска Xcode 6 переименовывает каталог моего приложения в iOS8-симуляторе.

Я запускаю Xcode 6 Beta 5, но это происходит с первой беты. Мой каталог приложений в симуляторе продолжает переименовываться после каждого запуска. Мне потребовалось некоторое время, чтобы понять это. Я использую это, чтобы получить ссылку dor dir.

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

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

Теперь, например, при первом запуске это будет:

/Users/Joey/Library/Developer/CoreSimulator/Devices/5B9930EE-A9B4-4B36-Бабб-AA864ACAF2DE/данные/Контейнеры/Data/Application/ 4B10C2E4-A5C3-4C64-93B1-4069FCCB9C46/Документы

Второй запуск теперь это:

/Users/Joey/Library/Developer/CoreSimulator/Devices/5B9930EE-A9B4-4B36-Бабб-AA864ACAF2DE/данные/Контейнеры/Data/Application/ 7E9EB62D-115A-4092-AD23-CB6BA3E5E10F/Документы

Третий запуск:

/Users/Joey/Library/Developer/CoreSimulator/Devices/5B9930EE-A9B4-4B36-Бабб-AA864ACAF2DE/данные/Контейнеры/Data/Application/ EC8F41E8-52ED-4B10-9808-B3ACC46FC6AA/Документы

Это вредит хау с моим приложением, потому что в нем хранятся ссылки на пути для определенных файлов в приложении. Это не значит, что моя инструкция NSLog возвращает неверные результаты, я подтвердил, что это происходит в Finder. Он меняет имя каждый раз. Кто-нибудь видел это? Является ли это "особенностью", что я недопонимаю?

Ответ 1

Оказывается, Xcode 6 действительно изменяет UUID приложения каждый раз, и я ошибаюсь для хранения абсолютных путей.

Ответ 2

ИСПОЛЬЗОВАТЬ SIMPHOLDERS

Я использовал это приложение на Xcode 5, открыв папку "Документы" для текущего приложения в симуляторе в Finder.

http://simpholders.com/

еще не готов к Xcode 6 (начиная с sep 24 2014), но сохраняет все эти проблемы.

В Xcode 6/iOS8 Теперь пакет отделяется от данных. /GUID приложения регенерируется между прогонами в Xcode (не уверен, почему)

  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. НАЙТИ ПАПКУ УСТРОЙСТВ В СИМУЛЯТОРЕ

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

откройте каждый файл /device.plist, чтобы узнать, каким GUID является это устройство в XCode - я думаю, что это статический

3. НАЙТИ УСТРОЙСТВО, на которой вы работаете на iPad 2 - я думаю, что это статический

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

4. Найдите папку "Приложение/Документы"

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

ОСТОРОЖНО GUID C220D351-0BE7-46BA-B35E-D16646C61A3F восстанавливается каждый раз, когда приложение запускается в 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");
        }

Основной путь BUNDLE

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

НИКОГДА НЕ СКАЗАЙТЕ ПУТЬ к/Документы между запусками будут меняться.

Я сериализовал его на plist и не мог понять, почему они продолжали исчезать

Указанный GUID/Документы постоянно меняются между прогонами, но если у вас есть/Документы открываются в Finder, папка остается открытой.

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

https://devforums.apple.com/thread/238754?tstart=0

Ответ 3

Бесплатное решение

Использовать библиотеку с открытым исходным кодом OpenSim. OpenSim - альтернатива Open Source для SimPholders, написанная в Swift.

Платное решение

Используйте приложение SimPholder, чтобы узнать текущее местоположение приложения.

enter image description here

Для xcode 6.0 >

Загрузить SimPholder 2.0 alpha 2


Для xcode 5.1 <

Загрузить SimPholders 1.5

Ответ 4

Я могу подтвердить, что это связанный с Xcode 6 не iOS 8.

У меня есть две машины для разработки. На одном из них у меня есть Xcode 5. Я работал все время на этой машине, и мой URL был прав (фото-приложение, фотографии видны).

Вчера я проверил в форме git мой источник на машине с Xcode 6. Я заметил, что мои фотографии больше не видны, только фотографии, созданные во время этого сеанса приложения.

После небольшой отладки я понял, что файл:///var/mobile/Applications/ B6A6BAEF-C90C-4A2A-93DB-E6700B88971F/Documents/меняется при каждом запуске приложения.

Все это время я работаю с устройством iOS 7.

Я еще раз хочу проверить на машине с Xcode 5, чтобы подтвердить, когда я получу ее.

Ответ 5

Вам нужно сохранить только путь внутри DocumentDirectory (имя каталога/файла) и добавить его в DocumentDirectory каждый раз, когда вы загружаете файл...

-(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;
}