在沙盒应用中使用FSEvents

Nic*_*kkk 6 cocoa monitoring filesystemwatcher monitor fsevents

我正在尝试在我的沙盒应用程序中使用FSEvents来监视某些目录.我实现了以下类:

@implementation SNTracker

- (id)initWithPaths:(NSArray *)paths {
    self=[super init];
    if (self) {
        trackedPaths=paths;
        CFTimeInterval latency=1.0;
        FSEventStreamContext context={0,(__bridge void *)self,NULL,NULL,NULL};
        FSEventStreamRef eeventStream=FSEventStreamCreate(kCFAllocatorDefault,&callback,&context,(__bridge CFArrayRef)trackedPaths,kFSEventStreamEventIdSinceNow,latency,kFSEventStreamCreateFlagUseCFTypes|kFSEventStreamCreateFlagWatchRoot|kFSEventStreamCreateFlagFileEvents);
        FSEventStreamScheduleWithRunLoop(eeventStream,[[NSRunLoop mainRunLoop] getCFRunLoop],kCFRunLoopDefaultMode);
        FSEventStreamStart(eeventStream);
    }
    return self;
}

static void callback(ConstFSEventStreamRef streamRef,void *clientCallBackInfo,size_t numEvents,void *eventPaths,const FSEventStreamEventFlags eventFlags[],const FSEventStreamEventId eventIds[]) {
    NSLog(@"asd");
}
Run Code Online (Sandbox Code Playgroud)

问题是"asd"永远不会被打印出来(即永远不会调用回调函数).当我在Xcode中的主要目标摘要中禁用"启用应用程序沙箱"时,将调用回调.难道我做错了什么?我给沙盒应用程序的唯一权利是对用户所选文件的读写访问权限.

Mec*_*cki 3

并且用户已经选择了您要通过 FSEvent 监视的路径?因为如果他没有,您将不被允许访问它,因此也无法监视它。只有当您被允许访问某个路径时,才能对其进行监控。