iOS 私人目录
iOS Private Directory
我想知道这段代码 returns 是否是应用程序专用的目录并受应用程序沙箱保护。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
return [paths firstObject];
为了亲自测试,我编写了两个应用程序。应用程序 prateek.writer
运行以下代码:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
NSString *applicationSupportDirectory = [paths firstObject];
NSLog(@"applicationSupportDirectory: '%@'", applicationSupportDirectory); // This is used by the second app.
NSString *filePath = [applicationSupportDirectory stringByAppendingPathComponent:@"myfile.txt"];
if (![[NSFileManager defaultManager] fileExistsAtPath:applicationSupportDirectory
isDirectory:NULL]) {
NSError *error = nil;
if (![[NSFileManager defaultManager] createDirectoryAtPath:applicationSupportDirectory
withIntermediateDirectories:YES
attributes:nil
error:&error]) {
NSLog(@"error %@", error);
}
}
[@"Hello World" writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
第二个应用程序 prateek.reader
运行以下代码:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
// This string is copied from the logs of the writer application.
NSString *applicationSupportDirectory = @"/Users/prateek/Library/Developer/CoreSimulator/Devices/218F1365-5AF2-4003-83AF-6337E0EA8207/data/Containers/Data/Application/B8918247-5509-458D-AB9E-0F1273EAD2FE/Library/Application Support";
NSString *filePath = [applicationSupportDirectory stringByAppendingPathComponent:@"myfile.txt"];
NSString *string = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
NSLog(@"Read file with contents: %@", string);
我的 reader 应用程序能够从编写器应用程序读取数据。
我 运行 在 iPhone 8 Plus 和 iPad Air 模拟器上看到了相同的结果。这可能与这个模拟器有关,或者这些是同一开发人员(在这种情况下是我)的应用程序 created/signed 的事实。
Application Support 文件夹特定于每个应用程序,并且位于应用程序的私有沙箱中。 当 运行 在真实的 iOS 设备上 时,没有任何应用可以访问另一个应用的文件夹。
模拟器没有这样的限制。这是 运行ning 在真实设备和模拟器上的众多差异之一。
我想知道这段代码 returns 是否是应用程序专用的目录并受应用程序沙箱保护。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
return [paths firstObject];
为了亲自测试,我编写了两个应用程序。应用程序 prateek.writer
运行以下代码:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
NSString *applicationSupportDirectory = [paths firstObject];
NSLog(@"applicationSupportDirectory: '%@'", applicationSupportDirectory); // This is used by the second app.
NSString *filePath = [applicationSupportDirectory stringByAppendingPathComponent:@"myfile.txt"];
if (![[NSFileManager defaultManager] fileExistsAtPath:applicationSupportDirectory
isDirectory:NULL]) {
NSError *error = nil;
if (![[NSFileManager defaultManager] createDirectoryAtPath:applicationSupportDirectory
withIntermediateDirectories:YES
attributes:nil
error:&error]) {
NSLog(@"error %@", error);
}
}
[@"Hello World" writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
第二个应用程序 prateek.reader
运行以下代码:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
// This string is copied from the logs of the writer application.
NSString *applicationSupportDirectory = @"/Users/prateek/Library/Developer/CoreSimulator/Devices/218F1365-5AF2-4003-83AF-6337E0EA8207/data/Containers/Data/Application/B8918247-5509-458D-AB9E-0F1273EAD2FE/Library/Application Support";
NSString *filePath = [applicationSupportDirectory stringByAppendingPathComponent:@"myfile.txt"];
NSString *string = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
NSLog(@"Read file with contents: %@", string);
我的 reader 应用程序能够从编写器应用程序读取数据。 我 运行 在 iPhone 8 Plus 和 iPad Air 模拟器上看到了相同的结果。这可能与这个模拟器有关,或者这些是同一开发人员(在这种情况下是我)的应用程序 created/signed 的事实。
Application Support 文件夹特定于每个应用程序,并且位于应用程序的私有沙箱中。 当 运行 在真实的 iOS 设备上 时,没有任何应用可以访问另一个应用的文件夹。
模拟器没有这样的限制。这是 运行ning 在真实设备和模拟器上的众多差异之一。