windows调试ios - xcode模拟器运行




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

事实证明,Xcode 6实际上确实在每次运行时都会更改应用程序的UUID,而我在存储绝对路径方面错了。

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

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

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

现在以第一次运行为例:

/用户/乔伊/库/开发人员/ CoreSimulator /设备/ 5B9930EE-A9B4-4B36-BABB-AA864ACAF2DE /数据/容器/数据/应用程序/ 4B10C2E4-A5C3-4C64-93B1-4069FCCB9C46 /文档

现在第二次运行是:

/用户/乔伊/库/开发人员/ CoreSimulator /设备/ 5B9930EE-A9B4-4B36-BABB-AA864ACAF2DE /数据/容器/数据/应用/ 7E9EB62D-115A-4092-AD23-CB6BA3E5E10F /文档

第三轮:

/用户/乔伊/库/开发人员/ CoreSimulator /设备/ 5B9930EE-A9B4-4B36-BABB-AA864ACAF2DE /数据/容器/数据/应用程序/ EC8F41E8-52ED-4B10-9808-B3ACC46FC6AA /文档

这对我的应用造成了严重破坏,因为它在应用中存储了某些文件的路径引用。 不是我的NSLog语句返回错误的结果,而是我验证了这是在Finder中发生的情况。 每次都在更改名称。 有人见过这种情况吗? 这是我误会的“特征”吗?


您只需要在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;
}

使用SIMPHOLDERS

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

http://simpholders.com/

尚未准备好使用Xcode 6(截至2014年9月24日),但省去了所有麻烦。

在Xcode 6 / iOS8中,捆绑包现在与数据分开了。/在Xcode中运行之间会重新生成应用程序GUID(不确定原因)

  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来查看XGUI中哪个设备是GUID-我认为这是静态的

3.查找您在iPad 2上运行的设备-我认为这是静态的

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

4.找到您的应用程序/ Documents文件夹

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

每次在XCode 6中运行该应用程序时,都会重新生成GUID C220D351-0BE7-46BA-B35E-D16646C61A3F

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

主捆绑路径

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

切勿在两次运行之间检查到/ Documents的路径,否则它将更改。

我将其序列化为一个plist,无法弄清楚为什么它们不断消失

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

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

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

免费解决方案

使用开源库 OpenSim 。 OpenSim是使用Swift编写的SimPholders的开源替代方案。

付费解决方案

使用SimPholder应用程序知道当前应用程序位置。

对于xcode 6.0>

下载 http://simpholders.com/

对于xcode 5.1 <

下载 SimPholders 1.5