2012-04-06 13 views
10

मैं ऐप सैंडबॉक्स का उपयोग करने के लिए अपने शेर ऐप को परिवर्तित कर रहा हूं। मैं security-scoped bookmarks सुविधा का उपयोग करने की कोशिश कर रहा हूं जो कि किसी फ़ोल्डर में लगातार पहुंच की अनुमति देने के लिए 10.7.3 में पेश किया गया है। नीचे दिया गया कोड एक शून्य बुकमार्क देता है, और निम्न लॉग संदेश उत्पन्न करता है: XPC couldn't look up the Mach service for scoped bookmarks agentसुरक्षा-स्कोप्ड बुकमार्क बनाने में समस्या

मैंने User Selected File AccessRead/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 में चुनने के बाद।

यदि आप किसी अन्य सुरक्षा-स्कोप्ड यूआरएल से एक बुकमार्क बना रहे हैं, जैसे किसी अन्य ऐप सत्र में बनाए गए ऐप-स्कोप्ड बुकमार्क से दस्तावेज़-स्कोप्ड बुकमार्क बनाना, तो आपको पहले फ़ाइल तक पहुंच प्राप्त करने की आवश्यकता है।

+2

शुरू/रोक कॉल आवश्यक कभी नहीं कर रहे हैं जब एक बुकमार्क बना रही है। आप पहले से ही NSOpenPanel से पहुंच प्राप्त कर चुके हैं। बुकमार्क भविष्य के रनों के लिए उस पहुंच को बचा रहा है। और वे भविष्य के रन हैं जहां आपको स्टार्टएपिंग सिक्योरिटीस्पेड रिसोर्स (यूआरएल पर आप बुकमार्क को हल करने से वापस आते हैं) को कॉल करने की आवश्यकता होगी। – abarnert

+0

@abarnert मुझे विश्वास है कि आप सही हैं, क्योंकि मैंने पोस्ट किए गए कोड में मैं 'NSOpenPanel' का उपयोग करता हूं, लेकिन यदि आप 'NSOpenPanel' या' NSSavePanel' (जैसे किसी अन्य स्रोत से कोई बुकमार्क बना रहे हैं तो आपको इसकी आवश्यकता है एक मौजूदा व्यक्ति से अपना दायरा बदलने के लिए एक नया बुकमार्क बनाने के रूप में)। मैंने अपनी पोस्ट अपडेट की है। – Dov

+0

प्रलेखन ने मेरी आंखें खून कर दीं 'टिल मैंने पाया "सुरक्षा-स्कोप्ड बुकमार्क्स" और यह वास्तव में सहायक नमूना कोड भी है। मेरे पास टैग बनाने की शक्ति नहीं है, क्या मेरा सुझाव है कि हम एक टैग "सुरक्षा-स्कोप्ड बुकमार्क" जोड़ते हैं? – Mark

उत्तर

8

यह पता चला मैं एक महत्वपूर्ण पात्रता, यूआई में सूचीबद्ध नहीं है, लेकिन the documentation में सूचीबद्ध याद आ रही थी:

com.apple.security.files.bookmarks.app-scope 
+2

धन्यवाद, यह काम करने के लिए मुझे जो अधिकार था, वह हकदार था। बस यह जोड़ना चाहता था कि मैं आपके अपडेट से सहमत नहीं हूं-startAccessingSecurityScopedResource आवश्यक नहीं है; अगर मैं इसे अपने कोड से बाहर टिप्पणी करता हूं, तो अब मुझे संसाधन तक पहुंच नहीं मिल सकती है। – escrafford

+0

इस समाधान को साझा करने के लिए आपको बहुत बहुत धन्यवाद। मैंने उम्र केवल अपने कोड को डीबग करने में बिताया ताकि यह पता चल सके कि शेर में यह अधिकार आवश्यक है (माउंटेन शेर में यह नहीं है)। – Nickkk

संबंधित मुद्दे