在每次运行之后,Xcode 6都会在iOS8模拟器中重命名我的应用程序的目录。

我正在运行Xcode 6 Beta 5,但自从第一次testing以来,这种情况一直在发生。 模拟器中我的应用程序目录在每次运行后不断重命名。 我花了一段时间才弄明白这一点。 我正在使用它来获取文档的目录参考。

NSString *folder = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSLog(@"Documents Dir: %@",folder); 

现在例如在第一次运行它将是:

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

第二次运行现在是:

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

第三轮:

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

这对我的应用程序造成了巨大的破坏,因为它为应用程序中的某些文件存储path引用。 这不是我的NSLog语句返回不正确的结果,我证实这是Finder中发生的事情。 每次都在改名字 有没有人看到过这种情况? 这是我误解的“特征”吗?

原来,Xcode 6实际上每次运行都会改变应用程序的UUID,而我错误地存储绝对path。

使用SIMPHOLDERS

我在Xcode 5上使用这个应用程序在Finder中打开模拟器中当前正在运行的应用程序的Documents文件夹。

http://simpholders.com/

还没有准备好Xcode 6(截至2014年9月24日),但保存所有这些麻烦。

在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.find您在iPad 2上运行的设备 – 我认为这是静态的

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

4.find你的应用程序/文档文件夹

 /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"); } 

主要组合path

 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 

从来没有cachingpath/运行之间它将会改变。

我正在序列化为一个plist,并不能找出为什么他们一直消失

上面的GUID /文档在运行之间不断变化,但是如果您在Finder中打开文档,文件夹保持打开状态。

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

免费解决scheme

使用Open Source Library OpenSim 。 OpenSim是用Swift编写的SimPholder的开源替代品。

付费解决scheme

使用SimPholder应用程序来了解当前的应用程序位置。

在这里输入图像描述

对于xcode 6.0>

下载SimPholder 2.0 alpha 2


对于xcode 5.1 <

下载SimPholders 1.5

我可以确认这是与iOS 8相关的Xcode 6。

我有两个开发机器。 其中之一,我有Xcode 5.我一直在这台机器上工作,我的url都很好(照片的应用程序,照片是可见的)。

昨天我用Xcode 6检查了一台机器的git源码。我注意到我的照片不再可见,只有在应用程序会话期间创build的照片。

经过小小的debugging,我意识到file:/// var / mobile / Applications / B6A6BAEF-C90C-4A2A-93DB-E6700B88971F / Documents /正在改变每个应用程序的运行。

我一直在使用iOS 7设备。

我将再次使用Xcode 5在一台机器上进行检查,以确认何时可以使用它。

您只需要在DocumentDirectory(目录/文件名)中保存path,并在每次加载文件时将其添加到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; }