使用沙盒应用FSEvents(Use FSEvents in sandboxed app)

2019-08-17 01:31发布

我试图用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");
}

问题是,“ASD”永远不会被打印(即回调函数不会被调用)。 当我在禁用我在Xcode的主要目标的总结“启用应用程序沙箱”,回调函数被调用。 难道我做错了什么? 我给沙盒应用程序的唯一授权的读写访问用户选择的文件。

Answer 1:

而usere选择了你试图通过FSEvent监控的路径? 因为如果他有没有,你将不会被允许访问它,因此也无法监控。 路径只能是只要你被允许访问监控。



文章来源: Use FSEvents in sandboxed app