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 在真实设备和模拟器上的众多差异之一。