包含 shell 和 Objective C 组件的 SDK

SDK with mixed shell and Objective C components

这里相对较新,所以请原谅这个愚蠢的问题。

我目前正在使用一组特定的商用 DSLR 型相机(第一阶段),并且有制造商提供的 SDK。但是,SDK 有两个组件 - 一个专用于图像捕获,编写为 Objective C 框架,另一个专用于图像处理,编写为 shell 命令列表。

我想构建一个带有用户界面的程序,允许我为捕获和处理布置序列。

运行 使用 Objective C 框架的相机相对简单,我刚刚使用界面生成器构建了一个 Cocoa 应用程序。但是将它与处理引擎集成的最佳方法是什么,我似乎只能从 shell 中 运行?

到目前为止,我已经使用 NSTask 调用了一些我单独编写的 bash 脚本,并且运行良好...但现在我需要保存一些命令行输出,这些输出是我从shell 将文件处理为整个应用程序中的变量后的脚本。

我读到的所有地方都说没有优雅的方法来做到这一点,并且解决它的方法(写入文件,从该文件读取主程序等)存在很大的安全风险.

所以我认为必须有更好的方法来集成 SDK 的这两部分。或者我的方法是否正确,并且有一种安全的方法可以将终端输出拉入我的程序?提前致谢。

您可以从 NSTask 中读取 STDOUT。这是一个让您入门的示例:

NSPipe  *readPipe=NSPipe.pipe;

readPipe.fileHandleForReading.readabilityHandler=^(NSFileHandle *fh){

    NSData  *data=fh.availableData;

    if(!data)
    {
        NSLog(@"Script STDOUT closed!");

        fh.readabilityHandler=NULL;

        return;
    }

    // process the data here
    NSString *s=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

    // NOTE: there is no guarantee what kind of chunk size your data
    // comes in! You may need to concatenate strings until it is complete
};


NSTask  *task=NSTask.new;

// set up your task as normal

task.standardOutput=readPipe;

[task launch];