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のメインターゲットのサマリで「アプリケーションサンドボックスを有効にする」を無効にすると、コールバックが呼び出されます。私は何か間違っているのですか?サンドボックスアプリケーションに与えた唯一の権限は、ユーザーが選択したファイルへの読み書きアクセスです。
そして、あなたはFSEvent経由で監視しようとしているパスを選択しましたか?彼が持っていない場合、あなたはそれにアクセスすることを許可されないので、それもそれを監視しません。 – Mecki
あなたは私の救いです!私は '[myURL startAccessingSecurityScopedResource]'と '[myURL stopAccessingSecurityScopedResource]'を呼び出していたので、最後の呼び出しを削除すると私の問題は解決します。あなたのコメントを答えとして追加してください:-) – Nickkk
@Nickkk:あなたはおそらくそれを最終的に、あなたが監視を開始した直後に呼び出すべきです。 'dealloc'はおそらく良い場所です。 –