2012-09-01 13 views
6

के साथ संवाद करने में असमर्थ, मैंने ऐप्पल द्वारा प्रदान किए गए सैंडबॉक्स किए गए हेल्पर ऐप उदाहरण के रूप में बिल्कुल किया है और सभी ठीक चल रहे हैं। मैं सफलतापूर्वक NSXPCConnection ऑब्जेक्ट बनाने में सक्षम हूं और मेरी रिमोट ऑब्जेक्ट भी वापस प्राप्त कर सकता हूं (remoteObjectProxyWithErrorHandler के माध्यम से)।हेल्पर मैक ऐप (लॉगिन आइटम),

हालांकि जब मैं प्रॉक्सी वस्तु (प्रोटोकॉल परिभाषा में परिभाषित) पर एक विधि कॉल, मैं वापस इस त्रुटि मिलती है:

Failed to connect to launch agent: Error Domain=NSCocoaErrorDomain Code=4099 "Couldn’t communicate with a helper application. 

अनिवार्य रूप से कोई फर्क नहीं पड़ता कि मैं मैं के साथ संवाद करने में सक्षम नहीं कर रहा हूँ कि क्या करना मेरी सहायक ऐप मैं कुछ भी नहीं कर रहा हूं, बस एनएसएलओजी() कुछ के लिए सहायक ऐप पर एक साधारण कॉल करने की कोशिश कर रहा हूं। लेकिन यह काम नहीं करता है। आश्चर्यजनक रूप से मुझे अंदर से कोई भी आउटपुट नहीं दिख रहा है:

- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection 

मैं संभवतः गलत क्या कर सकता हूं?

अद्यतन: जाहिर है अगर मैं अपने मुख्य ऐप पर 'ऐप सैंडबॉक्सिंग सक्षम करें' अनचेक करता हूं, तो यह काम करता है! तो सैंडबॉक्सिंग सक्षम करने में कुछ गड़बड़ है जिसके बाद यह मेरे सहायक ऐप से संवाद नहीं करना चाहता। क्या मुझे और अधिक अधिकारों की आवश्यकता है? मैंने उन सभी को एक्सकोड के तहत आजमाया है!

+0

यदि आप कंसोल खोलते हैं, तो क्या आपको एक सैंडबॉक्स मच लुकअप उल्लंघन मिलता है? – Samir

+0

नहीं, लेकिन मुझे एक समाधान मिला, – strange

उत्तर

12

आपका सहायक एप्लिकेशन सैंडबॉक्स किया गया है। इसलिए, यह गतिशील रूप से एक मशीन सेवा पंजीकृत नहीं कर सकता है, हालांकि एक्सकोड इसे डीबग उद्देश्य के लिए अनुमति देता है।

हालांकि, जब आप लॉगिन आइटम में अपना सहायक एप्लिकेशन जोड़ते हैं (SMLoginItemSetEnabled() का उपयोग करके) लॉन्च स्वचालित रूप से आपके बंडल पहचानकर्ता के नाम पर आपके लिए एक मशीन सेवा पंजीकृत करेगा।

अब आपका मुख्य एप्लिकेशन सैंडबॉक्स है। इसलिए, यादृच्छिक मच संचार की अनुमति नहीं है। इसे काम करने का एकमात्र तरीका अस्थायी मच लुकअप एंटाइटेलमेंट जोड़ना था।

10.7.4 के बाद से। ऐप्पल ने इस मामले के समाधान के रूप में एप्लिकेशन-ग्रुप एंटाइटेलमेंट पेश किए, जहां एक एप्लिकेशन को एक सहायक ऐप के साथ संवाद करने की आवश्यकता होती है।

दोनों अनुप्रयोगों को एक ही एप्लिकेशन-समूह एंटाइटेलमेंट साझा करना होगा। यह कोई मूल्य हो सकता है, लेकिन ऐप्पल को यह आवश्यक है कि यह मान आपकी टीम-आईडी (उदा: टीम-आईडी.myApp) से शुरू हो। फिर, आपके सहायक एप्लिकेशन बंडल पहचानकर्ता को उसी एंटाइटेलमेंट (जैसे टीम-id.myApp.myHelperApp) से शुरू होना चाहिए। उसके बाद, आपका मुख्य एप्लिकेशन सहायक एप्लिकेशन बंडल पहचानकर्ता (यानी टीम-आईडी.myApp.myHelperApp) नामक सेवा के साथ एक एक्सपीसी संचार का उपयोग करके अपने सहायक अनुप्रयोग के साथ स्वतंत्र रूप से संवाद कर सकता है। साथ ही, दो अनुप्रयोग अनुप्रयोग समूह एंटाइटेलमेंट (उदा। ~/लाइब्रेरी/समूह कंटेनर/टीम-आईडी के साथ नामित समूह कंटेनर फ़ोल्डर तक पहुंच साझा करेंगे।myApp), अगर आपको इसकी आवश्यकता होगी तो आपको मैन्युअल रूप से बनाना होगा।

+0

तक पहुंचने नहीं देगा, मैंने आपकी प्रतिक्रिया को समस्या के सही प्रतिक्रिया के रूप में चिह्नित किया है। हालांकि मेरे प्रयास मुझे एक ही खोज में ले जाते हैं, आपने इसे बहुत अच्छी तरह से समझाया है। एकमात्र समस्या यह है कि एक्सकोड 5.0 के साथ यह मेरे सहायक ऐप को कोड नहीं करेगा और शिकायत करेगा कि TEAM-ID.com.mycompany.myapp 'com.mycompany.myapp' प्रावधान प्रोफ़ाइल से मेल नहीं खाता है। कैसे इसे ठीक करूँ मेरे पास कोई विचार नहीं है? – strange

+0

मैं थोड़ा और आगे हूं, मैं कोड को एक्सकोड 5 में सहायक पर हस्ताक्षर कर सकता हूं, और यह लॉन्च करता है और मैं XPC के माध्यम से संवाद कर सकता हूं, लेकिन निष्पादन योग्य पर वैध हस्ताक्षर दिखाते हुए कोडिन के बावजूद कर्नेल पोस्ट कोड त्रुटियों को पोस्ट करता है। इसके अलावा, सहायक दुर्घटना एक्सकोड से संलग्न करने का प्रयास (पहले से ही बग्रेपोर्टर को सूचित किया गया है) – ctpenrose

4

ठीक है इसलिए मैंने कड़ी मेहनत सीखी है - सैंडबॉक्सिंग और एक्सपीसी के साथ कई समस्याएं हैं जो तथाकथित 'साझा समूह निर्देशिका' का उपयोग करके सहायक ऐप्स और साझाकरण डेटाबेस का उल्लेख नहीं करती हैं, जो न तो स्वचालित रूप से बनाई जाती हैं (दस्तावेज़ीकरण गलत तरीके से कहता है) और न ही NSURL दस्तावेज में दावा करने की विधि प्रदान करता है।

हालांकि प्रलेखन का कहना है कि पात्रता में आप प्रारूप <TEAM_ID>.whatever में 'साझा एप्लिकेशन पहचानकर्ता' के रूप में कोई भी स्ट्रिंग निर्दिष्ट कर सकते हैं, जाहिरा तौर पर यह केवल यदि आप प्रारूप का उपयोग काम करेंगे: और <TEAM_ID>.com.yourcompany

कुछ भी और यह जीता काम नहीं करता यह संकलित होगा, यह संग्रहित होगा, यह चलेगा लेकिन यह आपको अपने सहायक ऐप से बात करने नहीं देगा। लगभग 30 घंटों खर्च करने के बाद मैंने सोचा कि मैं उस आखिरी बदलाव की कोशिश करूंगा और जाहिर है कि यह था! भयानक लिखित सैंडबॉक्सिंग दस्तावेज (जो ऐप्पल के डेवलपर फोरम पर बहुत कुछ शिकायत कर रहे हैं) पर एक रडार दायर करना ...

+2

नीचे वर्णित एक्सपीसी कनेक्शन के बारे में जानकारी का एक मूल्यवान स्रोत मैन पेज है (टाइप टर्म एक्सपीसी_कोननेक्शन_क्रेट अपने टर्मिनल में) – Samir

+0

@स्ट्रेंज क्या आप इस मुद्दे पर SO पर मेरे प्रश्न को देख सकते हैं और देख सकते हैं कि क्या आप मेरी मदद कर सकते हैं - देखें: AVPlayer मुझे यूआरएल –

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