我正在构建一个监控某事物的可可应用程序,我计划为用户提供一些钩子。所以我想让用户将一个带有指定名称的脚本(Bash,Ruby,Python命名)(比如after_event)放到Application Support目录中,然后在我的代码中的某个事件之后执行该脚本。理想情况下,我可以将一些变量传递给脚本,以便脚本知道发生了什么。
有关于此的任何想法吗?
问题是:我如何获得应用程序支持的路径“SDK方式”?问题二是:如何使用THAT_APPEND =“foo”等变量执行脚本?
谢谢, 菲利普
答案 0 :(得分:1)
因为共享是关心这里是执行脚本的方法:
-(void) runScript:(NSString*)scriptName withVariables:(NSDictionary *)variables
{
NSString *appSupportPath = [NSFileManager defaultManager] applicationSupportDirectory];
NSArray *arguments;
NSString* newpath = [NSString stringWithFormat:@"%@/%@",appSupportPath, scriptName];
if ([[NSFileManager defaultManager]fileExistsAtPath:newpath]){
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath: newpath];
NSLog(@"Executing hook: %@",newpath);
arguments = [NSArray arrayWithObjects:newpath, nil];
[task setArguments: arguments];
[task setEnvironment:variables];
NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];
NSFileHandle *file;
file = [pipe fileHandleForReading];
[task launch];
NSData *data;
data = [file readDataToEndOfFile];
NSString *string;
string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog (@"script returned:\n%@", string);
}
}
}
更新:我将代码更新为更通用。现在NSTask将告诉内核直接执行脚本,这样你的用户就无法在线使用Bash脚本,也可以使用python,perl,php。她唯一需要使用的是该文件中的Shebang。
可以找到NSFileManager类别here。
答案 1 :(得分:0)
寻找NSTask documentation。你可以操作一个环境成员。另外,以-name = value
形式添加命令行参数应该是微不足道的。