मैं ऐप सैंडबॉक्स का उपयोग करने के लिए अपने शेर ऐप को परिवर्तित कर रहा हूं। मैं security-scoped bookmarks सुविधा का उपयोग करने की कोशिश कर रहा हूं जो कि किसी फ़ोल्डर में लगातार पहुंच की अनुमति देने के लिए 10.7.3 में पेश किया गया है। नीचे दिया गया कोड एक शून्य बुकमार्क देता है, और निम्न लॉग संदेश उत्पन्न करता है: XPC couldn't look up the Mach service for scoped bookmarks agent
।सुरक्षा-स्कोप्ड बुकमार्क बनाने में समस्या
मैंने User Selected File Access
Read/Write Access
के लिए एंटाइटेलमेंट सेट किया है, और आसपास के ..AccessingSecurityScopedResource
कॉल के साथ और इसके बिना भी प्रयास किया है।
मुझे लगता है कि मैं सब कुछ दस्तावेज के अनुसार सही कर रहा हूं, इसलिए मैं किसी भी पॉइंटर्स की सराहना करता हूं। ऐप सैंडबॉक्सिंग शुरू करने से पहले कोड एक सादा यूआरएल पुनः प्राप्त करने के लिए काम कर रहा था।
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);
}
अद्यतन (x3)
अब जब कि मैं यह काम कर रहा है, इस बात की पुष्टि कर सकते हैं कि -startAccessingSecurityScopedResource
और -stopAccessingSecurityScopedResource
के लिए कॉल करने के लिए संसाधन Powerbox एक्सेस प्रदान करता के बाद से, उपरोक्त कोड में आवश्यक नहीं हैं उपयोगकर्ता इसे NSOpenPanel
में चुनने के बाद।
यदि आप किसी अन्य सुरक्षा-स्कोप्ड यूआरएल से एक बुकमार्क बना रहे हैं, जैसे किसी अन्य ऐप सत्र में बनाए गए ऐप-स्कोप्ड बुकमार्क से दस्तावेज़-स्कोप्ड बुकमार्क बनाना, तो आपको पहले फ़ाइल तक पहुंच प्राप्त करने की आवश्यकता है।
शुरू/रोक कॉल आवश्यक कभी नहीं कर रहे हैं जब एक बुकमार्क बना रही है। आप पहले से ही NSOpenPanel से पहुंच प्राप्त कर चुके हैं। बुकमार्क भविष्य के रनों के लिए उस पहुंच को बचा रहा है। और वे भविष्य के रन हैं जहां आपको स्टार्टएपिंग सिक्योरिटीस्पेड रिसोर्स (यूआरएल पर आप बुकमार्क को हल करने से वापस आते हैं) को कॉल करने की आवश्यकता होगी। – abarnert
@abarnert मुझे विश्वास है कि आप सही हैं, क्योंकि मैंने पोस्ट किए गए कोड में मैं 'NSOpenPanel' का उपयोग करता हूं, लेकिन यदि आप 'NSOpenPanel' या' NSSavePanel' (जैसे किसी अन्य स्रोत से कोई बुकमार्क बना रहे हैं तो आपको इसकी आवश्यकता है एक मौजूदा व्यक्ति से अपना दायरा बदलने के लिए एक नया बुकमार्क बनाने के रूप में)। मैंने अपनी पोस्ट अपडेट की है। – Dov
प्रलेखन ने मेरी आंखें खून कर दीं 'टिल मैंने पाया "सुरक्षा-स्कोप्ड बुकमार्क्स" और यह वास्तव में सहायक नमूना कोड भी है। मेरे पास टैग बनाने की शक्ति नहीं है, क्या मेरा सुझाव है कि हम एक टैग "सुरक्षा-स्कोप्ड बुकमार्क" जोड़ते हैं? – Mark