如何在C中访问Apple Events“openFile”事件?

我有兴趣在C中为Mac OS X编写一个小实用程序来读取,解析,保存(覆盖)写入文件.我不需要任何GUI,菜单或窗口.

>我需要在XCode中开始使用哪种类型的项目模板?
>如何访问传入的文件? (这是通过Apple Events openFile传递的,对吧?)

我做了一点C,但没有在Mac上.链接赞赏,代码样本赞赏更多.

最佳答案 您打算如何将文件传递给您的应用程序?

如果是通过命令行,那么您将使用命令行工具模板并访问命令行参数,就像在任何POSIX平台(argc和argv)上一样.

如果您想使用Finder将文件传递给您的应用程序,例如,通过将文件拖放到应用程序图标上,那么您将使用Cocoa应用程序模板.

Info.plist文件包含您的应用程序配置和支持的文档类型,类似于Windows上的注册表.

>您可以通过项目设置的“信息”选项卡配置Info.plist(它是XCode文件导航器中的最顶层文件).单击右下角的“添加”按钮,然后选择“添加文档类型”以添加应用程序将接受的文档类型.要接受所有文档,请将文档名称设置为“全部”并将扩展名设置为*. More info is here.
>在Info.plist中添加一个LSUIElement键,并将其值设置为YES以指示您的应用程序没有UI.此密钥在XCode中也显示为“Application is agent”. More info on LSUIElement is here.
>在MainMenu.xib中,您可以删除默认情况下存在的Window和Font Manager对象,因为您不需要它们.
>将AppDelegate.m文件重命名为AppDelegate.mm,以便将其编译为Objective-C.这将允许您在该文件中使用C代码.
>在applicationDidFinishLaunching:delegate方法中,添加[NSApp terminate:nil];以便您的应用程序在完成其工作后立即退出.

将以下方法添加到AppDelegate.mm:

- (BOOL)application:(NSApplication*)app openFile:(NSString *)filename
{
    NSLog(@"Opening file %@", filename);

    char* cFilename = [filename UTF8String];    

    // Your C++ code goes here

    return YES;
}

而已.剩下的就是你的C代码.您可以将任何C代码添加到您想要的AppDelegate.mm.例如.:

#include <string>
#include <iostream>
#include "MyCppFileProcessor.h"

- (BOOL)application:(NSApplication*)app openFile:(NSString *)filename
{
    std::string cFilename([filename UTF8String]);
    std::cout << "Processing file: " << cFilename << std::endl;

    MyCppFileProcessor fileProcessor;
    fileProcessor.processFile(cFilename);

    return YES;
}

每当您将文档放入Finder中的应用程序图标时,此代码都将运行.

点赞