2013-05-30 56 views
0

我的可可應用程序使用一個以'C'寫的庫,它是'/ tmp'路徑上的試寫文件。這會造成沙箱侵犯。在Cocoa中,我們可以使用'NSTemporaryDirectory'API。修復沙盒違例在沙盒環境中使用'tmpfile'API是否安全?有其他解決方案嗎?'C'庫內的tmp目錄路徑

+0

你想要一個C API或者Obj-C API爲你工作嗎?在Cocoa中,我們可以使用'NSTemporaryDirectory'API? – Mar0ux

+0

我想使用C API。 – Raviprakash

+0

謝謝澄清,我已經刪除了我的答案。 – Mar0ux

回答

1

EDITED實際測試它

不,tmpnam()將無法​​正常工作後,我想獲得一個臨時的文件名的唯一方法是提供一個.m文件與資料庫專爲iOS和OSX使用,可用於返回臨時目錄爲C-字符串:

apple.h:

#pragma once 

extern size_t getTemporaryDirectory(char *buffer, size_t len); 

apple.m:

size_t getTemporaryDirectory(char *buffer, size_t len) 
{ 
    @autoreleasepool 
    { 
     NSString *tempDir = NSTemporaryDirectory(); 
     if (tempDir != nil) 
     { 
      const char *utf = [tempDir UTF8String]; 
      strncpy(buffer, utf, len); 
      return strlen(utf); 
     } 
    } 
    return 0; 
} 
+0

對我來說這是行不通的。我正在獲得如下登錄控制檯:#(10920)拒絕file-write-create/private/var/tmp/tmp.0.7SUvca'。我正在使用以下代碼在沙盒測試應用程序中進行測試。 'char * tmpFname = tmpnam(NULL); NSLog(@「Temp File name:%s」,tmpFname); [@「Test」writeToFile:[NSString stringWithUTF8String:tmpFname] atomically:NO encoding:NSUTF8StringEncoding error:NULL];' – Raviprakash