2015-01-17 7 views
9

लॉन्च करने में चुपचाप विफल रहता है मेरे पास एक ऐप है जो सैंडबॉक्स किया गया है, और इसमें एक सहायक शामिल है जो कुछ यूआई प्रस्तुत करता है (एक पूर्ण स्क्रीन विंडो के रूप में, लेकिन एक स्टेटस आइटम या इसी तरह का भी हो सकता है)।SMLoginItemSetEnabled कभी-कभी सैंडबॉक्स किए गए यूआई सहायक

यह काम करता है ... ज्यादातर समय। लेकिन कभी-कभी यह नहीं करता; यह चुपचाप सहायक शुरू करने में विफल रहता है।

चूंकि सहायक के पास UI है, तो मैं इसे लोड करने के लिए SMLoginItemSetEnabled का उपयोग करता हूं, फिर NSXPCConnection इसके साथ संवाद करने के लिए। लेकिन कभी-कभी SMLoginItemSetEnabled इसे लॉन्च करने में विफल रहता है, जबकि अभी भी हाँ लौट रहा है।

ऐसा लगता है कि यह मशीन पर कहीं भी ऐप के पुराने निर्माण के कारण होता है; ऐसा लगता है कि लॉगिन तंत्र को भ्रमित कर रहा है। पुराने ऐप को हटाने से इसे ठीक किया जाता है, लेकिन मैं उचित रूप से उपयोगकर्ताओं को ऐसा करने की उम्मीद नहीं कर सकता (कुछ लोग पुराने संस्करणों को आसपास रखना चाहते हैं)।

मैं एप बंडल में सहायक के यूआरएल के साथ -[NSWorkspace URLForApplicationWithBundleIdentifier:] के परिणाम की तुलना करके इस स्थिति का पता लगा सकता हूं, लेकिन उपयोगकर्ता को अन्य ऐप को हटाने के लिए कहने के लिए एक बहुत ही सुरुचिपूर्ण समाधान नहीं है।

क्या SMLoginItemSetEnabled बनाने के लिए कोई तरीका है हमेशा डिस्क पर कुछ यादृच्छिक एक के बजाय वर्तमान ऐप बंडल से लॉगिन आइटम का उपयोग करें?

या यूआई के साथ मददगारों के लिए एक और अधिक सुरुचिपूर्ण तंत्र का समर्थन करने के लिए हाल ही में ओएस रिलीज़ में कुछ भी बदल गया है?

मैंने इस विषय पर और अन्य जगहों पर कई अन्य प्रश्न पढ़े हैं, और ऐसा लगता है कि यह गुंजाइश तंत्र अभी भी सबसे अच्छा समाधान है, लेकिन शायद मुझे कुछ याद आया।

उत्तर

7

क्या SMLoginItemSetEnabled हमेशा डिस्क पर कुछ यादृच्छिक एक के बजाय वर्तमान ऐप बंडल से लॉगिन आइटम का उपयोग करने का कोई तरीका है?

ऐसा लगता है कि SMLoginItemSetEnabled में एक बग है। जब मैं अपने एप्लिकेशन का परीक्षण करता हूं, निष्पादन योग्य एक्सकोड के DerivedData फ़ोल्डर में होता है।

जब मैं रिलीज का निर्माण करता हूं, तो मैंने एप्लिकेशन और एप्लिकेशन फ़ोल्डर में इसका सहायक रखा। लेकिन कुछ स्पष्ट कारणों से, लॉन्च किया गया सहायक हेल्पर है जो डेरिवडाटा फ़ोल्डर में है। यही कारण है कि मैं मुख्य एप्लिकेशन को/एप्लिकेशन में लॉन्च करने से पहले इस फ़ोल्डर में मौजूद सभी चीज़ों को हटाने के लिए उपयोग किया जाता हूं।

+0

इस प्रतिक्रिया के लिए धन्यवाद @Lionel_A! यह एक बड़ी मदद थी। मुझे मिली दूसरी बात यह थी कि कम से कम एक ट्यूटोरियल ने MainMenu.xib और ViewController.swift को हटाने का सुझाव दिया था। यह _bad_ विचार था क्योंकि मेरा सहायक ऐप बस क्रैश हो रहा था। एक्सकोड ने शिकायत नहीं की कि संकलन समय पर कोई xib नहीं था। – drootang

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

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