5
샌드 박스 응용 프로그램에서 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");
}
문제는 "ASD는"인쇄 결코 극복한다는 것이다 (즉 콜백 함수가 호출되지 않습니다). Xcode의 내 주요 대상 요약에서 "앱 샌드 박스 사용"을 비활성화하면 콜백이 호출됩니다. 내가 뭔가 잘못하고 있는거야? 샌드 박스 응용 프로그램에 부여한 유일한 권한은 사용자가 선택한 파일에 대한 읽기/쓰기 액세스 권한입니다.
그리고 usere가 FSEvent를 통해 모니터링하려는 경로를 선택 했습니까? 그가하지 않으면, 당신은 그것에 접근하는 것을 허락하지 않을 것이고 따라서 또한 그것을 모니터하지 않을 것입니다. – Mecki
너는 나의 구원이야! '[myURL startAccessingSecurityScopedResource]'뿐만 아니라'[myURL stopAccessingSecurityScopedResource]'도 호출 했으므로 마지막 호출을 제거하면 문제가 해결됩니다. 귀하의 의견을 답으로 추가하여 해결해 드릴 수 있습니다 :-) – Nickkk
@Nickkk : 모니터링을 시작한 직후에 결국은 여전히 전화해야합니다. 'dealloc'은 아마도 좋은 장소 일 것입니다. –