Aslan uygulamamı Uygulama Korumalı Alanı'nı kullanacak şekilde dönüştürüyorum. Bir klasöre kalıcı erişim sağlamak için 10.7.3'te tanıtılan security-scoped bookmarks özelliğinden yararlanmaya çalışıyorum. Aşağıda bulunan kod, bir nil yer işareti döndürür ve aşağıdaki günlük iletisini üretir: XPC couldn't look up the Mach service for scoped bookmarks agent
.Güvenlik Kapsamında Oluşturulmakta Sorun Oluşuyor
User Selected File Access
yetkilendirmesini Read/Write Access
numaralı telefona ayarlıyorum ve aynı zamanda çevreleyen ..AccessingSecurityScopedResource
çağrıları ile veya bunlar olmadan da denedim.
Sanırım belgelere göre her şeyi doğru yapıyorum, bu yüzden herhangi bir işaretçiyi takdir ediyorum. Kod, uygulamayı korumayı başlatmadan önce düz bir URL almak için çalışıyordu.
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel setCanChooseFiles:NO];
[openPanel setCanChooseDirectories:YES];
[openPanel setAllowsMultipleSelection:NO];
NSInteger result = [openPanel runModal];
if(result == NSFileHandlingPanelCancelButton) {
return;
}
NSArray *urls = [openPanel URLs];
if(urls != nil && [urls count] == 1) {
NSURL *url = [urls objectAtIndex:0];
NSData *bookmark = nil;
NSError *error = nil;
bookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
includingResourceValuesForKeys:nil
relativeToURL:nil // Make it app-scoped
error:&error];
if (error) {
NSLog(@"Error creating bookmark for URL (%@): %@", url, error);
[NSApp presentError:error];
}
NSLog(@"bookmark: %@", bookmark);
}
Güncellemesi (x3) o çalışma var, ben -startAccessingSecurityScopedResource
ve -stopAccessingSecurityScopedResource
için çağrılar kaynağa Powerbox hibe erişim beri, yukarıdaki kodda gerekli olmadığını doğrulayabilirsiniz Şimdi
Kullanıcı NSOpenPanel
'da seçtikten sonra.
Başka bir uygulama oturumunda oluşturulan bir uygulamada işaretlenmiş yer işaretinden belge kapsamlı bir yer işareti oluşturma gibi başka bir güvenlik kapsamındaki URL'den bir yer işareti oluşturuyorsanız, önce dosyaya erişmeniz gerekir.
başlangıç / çağrılar gerekli asla durdurun. NSOpenPanel'den zaten erişiminiz var. Yer imi, gelecekteki işlemler için bu erişimi kaydediyor. Ve gelecekteki bu çalışmalar, startAccessingSecurityScopedResource öğesini (yer işaretini çözümlemek için geri aldığınız URL'de) aramanız gereken yerlerdir. – abarnert
@abarnert Haklı olduğuma inanıyorum, çünkü gönderdiğim kodda bir 'NSOpenPanel' kullanıyorum, ancak bir NSOpenPanel 'veya' NSSavePanel 'dışındaki bir kaynaktan bir yer imi oluşturuyorsanız buna ihtiyacınız var. varolan birinden yeni bir yer imi oluşturuyor. Gönderiyi güncelledim. – Dov
Dokümantasyon gözlerimi 'güvenlik kapsamlı yer imleri' bulduğumdan akıyordu ve bu da gerçekten faydalı örnek koddur. Bir etiket oluşturma gücüm yok, "güvenlik kapsamlı bir yer işareti" etiketi eklememizi önerebilir miyim? – Mark