繁体   English   中英

无法在沙盒可可应用程序中执行shell脚本命令

[英]Can't execute shell script commands in sandboxed cocoa app

我开发了一个构建,存档和创建iOS应用程序文件的cocoa应用程序。 现在我想将它发布到Mac App Store。 我的应用运行正常,但不是沙盒模式。 App结构如下:

MyApp.app
|_Contents
  |_Resources
    |_BuildTask.command
  1. 我做的第一件事就是获得执行“BuildTask.command”的权限。

     NSTask *permissionTask = [[NSTask alloc] init]; permissionTask.launchPath = @"/bin/bash"; permissionTask.arguments = @[@"-c", [NSString stringWithFormat:@"chmod +x %@", pathToBuildTask], @"run"]; [permissionTask launch]; [permissionTask waitUntilExit]; 

否则,BuildTask会产生错误:

Problem Running Task: launch path not accessible
  1. 执行权限任务后,我使用包含xcodebuild命令的NSTask执行我的BuildTask.command文件。

     NSString *path = [NSString stringWithFormat:@"%@", [[NSBundle mainBundle] pathForResource:@"BuildTask" ofType:@"command"]]; task.launchPath = path; task.arguments = scriptArguments; [task launch]; [task waitUntilExit]; 

当App Sandbox在功能中关闭时,一切正常。 当我启用App Sandbox for Mac App Store时,权限任务会出错:

chmod: Unable to change file mode on .../MyApp.app/Contents/Resources/BuildTask.command: Operation not permitted

当我手动在BuildTask.command上执行chmod时,在BuildTask.command中默认写入命令和xcodebuild命令会产生如下错误:

defaults[2264:70400] Could not write domain .../SampleApp/SampleApp/SampleApp-Info.plist; exiting

xcodebuild[2410] (FSEvents.framework) FSEventStreamCreate: _FSEventStreamCreate: ERROR: watch_path() failed for '/'
xcodebuild[2410] (FSEvents.framework) FSEventStreamCopyPathsBeingWatched(): failed assertion 'streamRef != NULL'

../MyApp.app/Contents/Resources/BuildTask.command: line 65:  2410 Segmentation fault: 11  xcodebuild -scheme "${SCHEME}" clean build CODE_SIGN_IDENTITY="${SIGNING_IDENTITY}" "${BUILD_ARGUMENT}" "${WORKSPACE_OR_PROJECT}"

那么,我有机会将此工具发布到Mac App Store吗?

任何帮助都会非常感激。

可能不是你想听到的:

  1. 我做的第一件事就是获得执行“BuildTask.command”的权限。

你有两个问题。 首先,如果您希望从应用程序中更改文件的权限,您应该使用框架或系统调用直接执行此操作,而不是调用NSTask来执行shell,而shell又执行调用这些框架或系统调用的命令。 。

其次,您不应该尝试从应用程序中更改应用程序包的内容。 如果您需要应用程序包中的文件具有执行权限,请在构建应用程序时进行设置。 您可以使用Xcode中的构建阶段来完成此操作。

那么,我有机会将此工具发布到Mac App Store吗?

很少或没有。

Xcode本身不是沙盒应用程序,您收到的错误消息表明它正在尝试执行违反从您的应用程序继承的沙箱的操作。

HTH

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM