2011-08-09 12 views
6

पर "एप्लिकेशन एजेंट (UIElement)" सेट करने के लिए Info.plist को संशोधित करें। मान लें कि मुझे उपयोगकर्ता को प्राथमिकता पैनल द्वारा चुनने की क्षमता देने की आवश्यकता है कि ऐप को "मानक" के रूप में उपयोग करना है (डॉक आइकन और मेनू के साथ) या एक एजेंट ऐप के रूप में (केवल स्टेटस बार मेनू के साथ)।रनटाइम

मुझे लगता है कि मुझे निष्पादन के दौरान ऐप की "Info.plist" प्रोग्रामेटिक रूप से संशोधित करने की आवश्यकता है, पैरामीटर "एप्लिकेशन एजेंट है" को YES/NO में बदलना है।

क्या यह सही तरीका है?

पीएस आप इस व्यवहार को "स्पैरो" में पा सकते हैं।

उत्तर

13

आपको रनटाइम पर अपने ऐप की Info.plist फ़ाइल (या अपने ऐप के बंडल में कुछ भी) संशोधित नहीं करना चाहिए। यह खराब अभ्यास है और यदि यह कोड हस्ताक्षरित है तो भी आपके ऐप को तोड़ देगा। यह आजकल अधिक महत्वपूर्ण है क्योंकि ऐप स्टोर पर सभी ऐप्स कोड पर हस्ताक्षर किए जाने चाहिए।

एक बेहतर विकल्प एप्लिकेशन सेवा फ़ंक्शन TransformProcessType() का उपयोग करना है ताकि आपके ऐप को पृष्ठभूमि से अग्रभूमि ऐप पर ले जाया जा सके।

पहले, में LSUIElement कुंजी सेट को अपने ऐप्लिकेशन के Info.plistYES के लिए और फिर लॉन्च पर एक उपयोगकर्ता डिफ़ॉल्ट जाँच निर्धारित करने के लिए कि आपके ऐप में एक एजेंट है या नहीं के रूप में चल जाना चाहिए: सुनिश्चित करें कि आप डॉन 'बनाने

#import <ApplicationServices/ApplicationServices.h> 

@implementation AppDelegate 

- (void)applicationDidFinishLaunching:(NSNotification *)notification 
{ 
    if (![[NSUserDefaults standardUserDefaults] boolForKey:@"LaunchAsAgentApp"]) 
    { 
     ProcessSerialNumber psn = { 0, kCurrentProcess }; 
     TransformProcessType(&psn, kProcessTransformToForegroundApplication); 
     SetFrontProcess(&psn); 
    } 
} 

@end 

अपनी परियोजना में एप्लिकेशन सेवा ढांचे को जोड़ना न भूलें।

+0

प्लस, 'Info.plist' को बदलना अपर्याप्त विशेषाधिकारों और केवल पढ़ने योग्य वॉल्यूम (डिस्क छवियों की तरह) में भी असफल हो जाएगा। – gcbrueckmann

+1

धन्यवाद रॉब Keniger.its मेरे लिए ठीक काम कर रहे हैं – sp309