我有一个C库,我正在尽可能地修改它,以添加功能并使该功能在iOS上正常运行。它在iOS 5.1上可以正常工作,但在iOS 6上却无法使用,因为它需要编写一个小的临时文件,而且我认为在其以前的写入位置(/tmp/some.file)出现了权利问题。

我知道NSHomeDirectory()将为我提供来自ObjectiveC的沙箱根目录,但是它需要ObjectiveC/Foundation才能运行。如何仅使用C/CoreFoundation调用获得沙箱根目录?

最佳答案

相当于NSHomeDirectory()的CoreFoundation是CFCopyHomeDirectoryURL()。自iOS 5起可用,并且唯一“记录在案”的位置在iOS 4.3 to iOS 5.0 API Differences中。

如果您想要临时目录而不对tmp字符串进行硬编码,那么您可能要使用confstr_CS_DARWIN_USER_TEMP_DIR常量,如果confstr调用失败,则回退到TMPDIR环境变量:

char tmpdir[PATH_MAX];
size_t n = confstr(_CS_DARWIN_USER_TEMP_DIR, tmpdir, sizeof(tmpdir));
if ((n <= 0) || (n >= sizeof(tmpdir)))
    strlcpy(tmpdir, getenv("TMPDIR"), sizeof(tmpdir));
CFURLRef tmp = CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, (UInt8 *)tmpdir, strlen(tmpdir), true);

关于objective-c - CoreFoundation中的NSHomeDirectory()等效于什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12714022/

10-12 06:18