2012-08-30 27 views
6

से पहले सुरक्षा-स्कोप्ड बुकमार्क्स को संभालने के लिए ऐप को पुनरारंभ करने के बाद खुली फ़ाइल को फिर से खोलने के लिए मुझे अपने सैंडबॉक्स किए गए ऐप की आवश्यकता है। ऐप्पल एनएसआरएल बुकमार्क निर्माण और समाधान विधियों में NSURLBookmarkCreationWithSecurityScope और NSURLBookmarkResolutionWithSecurityScope विकल्पों के साथ सुरक्षा-स्कोप्ड बुकमार्क्स प्रदान करता है। हालांकि, ये झंडे/विकल्प केवल 10.7.3 या बाद के लिए अच्छे हैं और 10.7.3 से पहले एक ऐप विफल होने का कारण बनते हैं।मैक ऐप स्टोर सैंडबॉक्सिंग और 10.7.3

मैं सैंडबॉक्स किए गए ऐप में 10.6 से 10.7.3 के लिए फ़ाइल बुकमार्क के प्रतिधारण/दोबारा खोलने को कैसे संभाल सकता हूं?

-

फ़ॉलो-अप: कृपया नीचे मेरा उत्तर देखें। यह समस्या NSURLBookmarkCreationWithSecurityScope का उपयोग करके नहीं हुई थी, लेकिन सुरक्षा-स्कोप्ड बुकमार्क का उपयोग करके स्टार्ट और स्टॉप विधियों का उपयोग करके।

+0

मेरा अनुमान है कि आप शायद नहीं कर सकते हैं। यह उनके सैंडबॉक्सिंग दृष्टिकोण में कमी थी, और इसके कारण अतिरिक्त तंत्र जोड़ा गया था। और ऐप्पल चीजों को बैकपोर्ट करने वाला नहीं है ... – Thilo

+2

क्या आप वाकई विफलता का कारण हैं? मेरे पास एक ऐप (एमएएस में) है जो '[NSURL URLByResolvingBookmarkData: बुकमार्क विकल्प का उपयोग करता है: NSURLBookmarkResolutionWithSecurityScope सापेक्ष ToURL: nil bookmarkDataIsStale: कोई त्रुटि नहीं: nil];' यह 10.6.8 मशीनों पर ठीक काम करता है। – Patrick

+0

@ पैट्रिक - क्या यह 10.7 - 10.7.2 पर ठीक काम करता है? (सैंडबॉक्स 10.6.8 पर गैर-परिचालन है और यूआरएल का संकल्प 10.7.3+ द्वारा जोड़े गए किसी भी सुरक्षा जानकारी को अनदेखा कर सकता है - बस अनुमान लगा रहा है) – CRD

उत्तर

9

यह NSURLBookmarkCreationWithSecurityScope का उपयोग कर बाहर निकलता है 10.7 - 10.7.2 के साथ कोई समस्या नहीं है। विफलता -[NSURL startAccessingSecurityScopedResource]: पर कॉल करने का कारण बनती है जो 10.7.3 से पहले समर्थित नहीं है। इसलिए, आपको ओएस चेक या प्रतिक्रियाओं के लिए इस विधि (और संबंधित स्टॉप विधि) में कॉल लपेटने की आवश्यकता है। मैंने परीक्षण किया कि बुकमार्क अभी भी 10.7.1 में काम करता है जब तक कि आप सुनिश्चित न करें कि स्टार्ट/स्टॉप को कॉल न करें।

इस का प्रयोग करें उपयोग शुरू करने के लिए:

यहाँ किसी भी अन्य कहते हैं कि इस समस्या का में चलाने में मदद मिलेगी respondsToSelector को उपयोग करने के कोड स्निपेट हैं

if([bookmarkFileURL respondsToSelector:@selector(startAccessingSecurityScopedResource)]) { // only supported by 10.7.3 or later 
    [bookmarkFileURL startAccessingSecurityScopedResource]; // start using bookmarked resource 
} 

और इस प्रयोग को रोकने के लिए:

if([bookmarkFileURL respondsToSelector:@selector(stopAccessingSecurityScopedResource)]) { // only supported by 10.7.3 or later 
    [bookmarkFileURL stopAccessingSecurityScopedResource]; // stop using bookmarked resource 
} 
+1

ओएस संस्करण की जांच करने के बजाय प्रतिक्रियाओं का चयन क्यों नहीं कर रहा है? –

+0

@ बेन-उरी आप सही हैं, 'प्रतिक्रियाएं' चयनकर्ता 'ओएस संस्करण की जांच करने से बेहतर कार्यान्वयन है। मैंने जवाब अपडेट किया। – spurgeon