我的程序Test.app里面包含一个命令行工具HelloWorld.如果只是Test.app打开sandbox,那么从Test.app调用HelloWorld是没有任何问题的.但是如果这样上传的话,MacStore会reject,理由是我的HelloWorld不是sandbox enable.但是如果我吧HelloWorld改成sandbox enable之后, Test.app就无法调用HelloWorld了. yuriwang2012-10-12 12:13人工置顶.顶到有大大们慷慨相助为止 朱东勇2012-10-12 12:37楼主可以把调用HelloWorld程序的代码,以及把sandbox的设置页面截屏看下么 yuriwang2012-10-12 13:16代码已经上传,工程默认使用的是Sandbox签名后的HelloWorld. 无法正确执行. 文件夹里面还有个HelloWorld-UnSandbox的,可以正常执行. zplay_mfly2012-10-12 13:31 yuriwang2012-10-12 13:46着急啊.....没有源码,用XPC也不行啊 朱东勇2012-10-12 14:09应该是沙盒模式数据访问限制的问题,execl(szExe, szExe, tmpName, (char *)0) 这个方法里面传的参数依然是app 包里面的数据,而这里面的数据,是只能是程序内部去访问的,所以楼主要增加以下操作 :1.把HelloWorld可执行程序及相关文件保存到应用程序用户目录(如 NSTemporaryDirectory());2.将执行的目前改为用户目录下面的文件,应该就可以解决 yuriwang2012-10-12 14:27NoNo,在沙箱下,考出去你更加无法执行了.... 拷贝出去后,哪怕在命令行下,用sudo 都无法执行. DEMO我都放出来了.给出答案前你可以自己试一下... yuriwang2012-10-12 16:14继续自己顶自己吧~! 朱东勇2012-10-12 16:52可以把不加沙盒,执行的正确结果给我看下么?我这边去掉沙盒一样是只看到打印出个 100,没有其它现象 yuriwang2012-10-12 17:10去掉沙盒的,会打印Hello World,主程序打印出来的是101 你将demo里面的helloWorld-UnSandbox 改名成HelloWorld就可以了. 朱东勇2012-10-12 17:47[[NSWorkspace sharedWorkspace] openFile:exePath withApplication:@"/Applications/Utilities/Terminal.app"]; 这个方法可以解决你所讲的问题,我有测试过了 朱东勇2012-10-12 18:00上面那个方法会打开 终端程序,还可以用 以下这种方法实现 *****;*****;*****;*****;[NSTask launchedTaskWithLaunchPath:exePath arguments:[NSArray arrayWithObjects:exePath, exePath, @"/application", nil]]; *****;*****;*****;*****; 不过要当接到*****;*****;NSTaskDidTerminateNotification 这个通知后,结果才会被改为 101 yuriwang2012-10-13 11:03谢谢.我试一下. yuriwang2012-10-13 11:17兄弟,你确定使用的是sandbox吗? 这个方法我早试过了,不行. CallCommandLine[1151:303] launch path not accessible 兄弟你可以查一下那个HelloWorld是否是sandbox的. yuriwang2012-10-14 13:17周末不休息~~ yuriwang2012-10-14 17:04cocoachina的高手都去哪里了 yuriwang2012-10-15 09:11这个问题应该很常见吧.哪位遇到过的,能分享一下吗? yuriwang2012-10-15 15:09怎么还没有高人愿意指点一下啊 yuriwang2012-10-16 10:54cocoachina以前不是这样的... konglongdan2012-10-18 09:19果断XPC吧*****;*****;*****;*****;我以前也是你那样做的*****;*****; 经过各种尝试,最后还是放弃了,用的xpc*****;*****;完美通过app store 并且也达到我的要求了。 yuriwang2012-10-19 17:19但是我没有源码啊.我只有一个人家的命令行工具啊,能XPC吗? 另外我看了一些mac store上的应用,里面也是包含的命令行工具,而不是XPC app konglongdan2012-10-23 09:33cmd tool 也可以sandbox的(我确认)。 但是我不知道你是怎么搞的。 友情提升下,二进制程序的签名和sandbox 都是用codesign 完成的。 ps:以前我是自己写的,有源码,所以用xpc 非常方便。 yuriwang2012-10-31 10:43我正是将cmd tool用codesign签名为sandbox之后,在程序里就不能使用了.但是不签名的话,会被苹果reject. 这种情况怎么办? konglongdan2012-11-05 09:56 引用 引用第23楼yuriwang于2012-10-31 10:43发表的 回 22楼(konglongdan) 的帖子 : 我正是将cmd tool用codesign签名为sandbox之后,在程序里就不能使用了.但是不签名的话,会被苹果reject. 这种情况怎么办? 你的那个entitlements 的plist 文件的key 要弄对。 yuriwang2012-11-09 08:51我是加了enableSandbox啊。 我用的entitlements*****;*****;文件,和我程序里使用的是一样的。 请问key错在什么地方?导致拉不起来,用fork不行,用NSTask也是不行