Mac App Sandbox的问题.

来源:互联网 发布:9wifi九维网络登入不了 编辑:程序博客网 时间:2024/04/30 07:27
我的程序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也是不行
原创粉丝点击