2013-06-23 8 views
7

के अंदर लॉन्चएजेंट का उपयोग करना आप सैंडबॉक्स के अंदर LaunchAgent का उपयोग कैसे करेंगे? मैं अपने मुख्य एप्लिकेशन के अंदर एक यूआई-कम लॉन्चएजेंट ऐप बंडल वितरित करना चाहता हूं जिसे मैं मांग पर लॉन्च कर सकता हूं। एक एक्सपीसी सेवा के बजाय मुझे यह कारण KeepAlive विकल्प के लिए है, जो launchd को निष्क्रिय होने पर मेरी प्रक्रिया को स्वचालित रूप से मारने से रोक देगा। यह विकल्प XPC सेवाओं पर मौजूद नहीं है।मैक ऐप सैंडबॉक्स

प्रलेखन का कहना है कि एक ऐसी प्लास्ट है जिसे ~/Library/LaunchAgents में कॉपी करने की आवश्यकता है, और यह स्पष्ट रूप से सैंडबॉक्स के अंदर संभव नहीं है। क्या कोई सिस्टम एपीआई है जो मेरे लिए प्लेलिस्ट कॉपी करेगा? मैंने ऐप्पल के SMJobBless नमूना कोड को देखा है, लेकिन ऐसा लगता है कि यह एक अप्रत्याशित LaunchAgent के बजाय एक विशेषाधिकार प्राप्त लॉन्चडेमॉन पंजीकृत करने के लिए है।

उत्तर

4

जो एपीआई आप खोज रहे हैं वह SMLoginItemSetEnabled() है। आपको अपने लंबे समय से चलने वाले एजेंट को नियमित .app बंडल के रूप में पैकेज करना होगा और इसे अपने मुख्य ऐप के बंडल में Content/Library/LoginItems पर रखना होगा।

फिर मुख्य एप्लिकेशन में रनटाइम पर आप अपने एजेंट को सक्षम और अक्षम करने के लिए एजेंट के बंडल पहचानकर्ता के साथ SMLoginItemSetEnabled() कॉल का उपयोग कर सकते हैं। यदि आपका मुख्य आवेदन छोड़ देता है, तो एजेंट जिंदा रहता है। उपयोगकर्ता लॉग आउट और पीठ में या रिबूट, तो OS आपका एजेंट लॉन्च हो जाएंगे, जब उपयोगकर्ता में वापस लॉग

अद्यतन। दिमित्री नोटों के रूप में, प्रलेखन नहीं रह गया है नमूना के साथ आता है मैं मूल रूप से उल्लेख किया है, लेकिन एक और ऐप्पल sample code project, ऐप सैंडबॉक्स के लिए, एक ही एपीआई प्रदर्शित करता है (फ़ाइल NSXPCConnection+LoginItem.m देखें)।

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