iOS 私人目录

Posted

技术标签:

【中文标题】iOS 私人目录【英文标题】:iOS Private Directory 【发布时间】:2018-01-12 08:00:43 【问题描述】:

我想知道这段代码的 sn-p 是否返回一个应用程序私有并受应用程序沙箱保护的目录。

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);

我的阅读器应用能够从编写器应用中读取数据。 我在 iPhone 8 Plus 和 iPad Air 模拟器上运行此程序,看到了相同的结果。这可能与模拟器有关,或者这些应用程序是由同一开发人员(在本例中为我)创建/签名的事实。

【问题讨论】:

【参考方案1】:

Application Support 文件夹特定于每个应用程序,并且位于应用程序的私有沙箱中。 在真正的 iOS 设备上运行时,任何应用都无法访问其他应用的此文件夹。

模拟器没有这样的限制。这是在真实设备和模拟器上运行的众多区别之一。

【讨论】:

我明白了 - 是否有任何官方文档描述了这种差异? 我不知道具体的文档概述了每一个差异,但我不知道: 1. Sim 可以到达沙箱之外,而设备不能。 2. Sim 文件系统不区分大小写,设备是。 3. Sim 不能发邮件,不能拍照,没有指南针和陀螺仪。 4. Sim无法安装其他应用程序。 5. Sim 使用不同的架构(英特尔与 ARM)。 6. Sim 在 Mac 上运行,因此它可以访问更多 RAM 和更快的 CPU。 知道了,谢谢!是否有任何文档指出应用程序支持目录在 ios 设备上是私有的?我找到了一些 macOS 参考资料,但没有找到适用于 iOS 的资料。 iOS 应用沙箱中的所有内容都是私有的。见File System Basics。

以上是关于iOS 私人目录的主要内容,如果未能解决你的问题,请参考以下文章

局域网内搭建私人影院 手机端也能播放 增强版

Tips12: 私人定制 专属的Unity3D 脚本模板

使用 MERN 堆栈和 socket.io 进行私人聊天

Node 和 Socket.IO - 私人聊天(一对一)

如何从 socket.io-redis 发送私人消息(发射)

适用于 iOS 的 Facebook SDK、私人消息