Xcode में कार्य-अनुमति-क्या मिलता है?


95

इसलिए जब मैं अपने iPhone ऐप प्रोजेक्ट में अपनी एंटाइटेलमेंट सेट करता हूं, तो मैं एक नया Entitlements.plist बनाता हूं, और गेट-टास्क-अनुमति के मूल्य को गलत पर सेट करता हूं। पर क्यों? यह कुंजी क्या दर्शाती है?

संपादित करें

ध्यान दें कि यह इस सवाल से संबंधित है - मैंने पाया कि इस कुंजी के मूल्य को सही करने के लिए मुझे अपने डिवाइस पर एप्लिकेशन इंस्टॉल करने की अनुमति दी गई है)

जवाबों:


165

एडीसी पर इस सूत्र से :

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


2
तो क्या प्रोजेक्ट्स के लिए दो एंटाइटेलमेंट.प्लेस्ट फाइल की आवश्यकता होती है, एक जहां यह मान YES के लिए सेट होता है जो डिबग प्रोफाइल को लक्षित करता है, और दूसरा जो NO को निर्दिष्ट करता है, वितरण प्रोफाइल को लक्षित करता है?
ग्रेग मैलिक

2
कोई बात नहीं, मेरा अपना सवाल हल कर दिया। यदि आप Entitlements.plist को अपने डीबग बिल्ड सेटिंग्स से बाहर छोड़ते हैं, तो आपको कोई समस्या नहीं है।
ग्रेग मैलिक

1
लेकिन, मैं एंटाइटेलमेंट के बाद भी डिबग कर सकता था। डेवलपर को डिबग मोड में डेवलपर प्रोफ़ाइल के साथ प्रोजेक्ट में शामिल नहीं किया गया था। क्या कोई मुझे यह समझा सकता है?
एसपीडी

1
डिबग के लिए डिफ़ॉल्ट सही है, रिलीज के लिए डिफ़ॉल्ट गलत है। इसे झूठा करने से डिबग अक्षम हो जाएगा।
आलसी कोडर

1
लेकिन वितरण विन्यास आमतौर पर 'रिलीज' से लिया जाता है। इसका मतलब यह नहीं होना चाहिए कि आपको एडहॉक के लिए FALSE निर्दिष्ट करने की आवश्यकता नहीं है? (या उस मामलों के लिए, सब पर एक
एंटिटेलमेंट

13

IPhone पर आपके एप्लिकेशन को डीबग करने की क्षमता।


1
दिलचस्प! यदि यह सब ऐसा होता है, तो मुझे आश्चर्य है कि झूठे मूल्य को फ़्लिप करना मुझे अपने डिवाइस पर एप्लिकेशन इंस्टॉल करने से रोकता है? (संबंधित एसओ सवाल: stackoverflow.com/questions/997884/… )
कोडबीफ

यह वही करता है ... लेकिन यह क्या करता है जो आपको ऐसा करने की अनुमति देता है?
रेयान डेटेल 20

1
यदि यह कोडबीफ़ जैसी अधिक जानकारी शामिल है तो इस उत्तर में बहुत सुधार किया जा सकता है।
जदर

@Codebeef मेरा मानना ​​है कि यह एक प्रतिबंध है जो एक्सकोड एक अंतर्निहित के बजाय लगाता है।
सागरजी २५'१

7

जबकि आपका उत्तर सही है, मैं सिर्फ इस पर और अधिक विशिष्ट होना चाहता हूं ताकि लोग जानना चाहते हैं कि वास्तव में क्या get_task_allowमतलब है, क्या कर सकते हैं।

get_task_allowएक एंटाइटेलमेंट है जो अन्य ऐप्स को आपके ऐप के कार्य पोर्ट को प्राप्त करने की अनुमति देता है। इसका मतलब यह है कि यदि कोई अन्य ऐप task_for_pid()आपके ऐप प्रोसेस आईडी के साथ चलता है तो उन्हें आपके ऐप का टास्क पोर्ट मिल जाएगा, इसलिए वे मेमोरी पर चीजों को लिखने और पढ़ने जैसे काम कर सकते हैं, इसलिए चीजों को पैच करना और व्यवहार को संशोधित करना आपका ऐप।

यदि आप एक नज़र डालते हैं कि एक जेलब्रेक कैसे काम करता है, तो आप पहली चीज़ जो वे कर रहे हैं, उस पर ध्यान देंगे task_for_pid(mach_task_self(),0,&kernel_task);जो कि kernel_taskएक mach_port_tमूल्य के साथ है 0, इसलिए वे कर्नेल की मेमोरी को छूने में सक्षम हैं।

चूंकि कर्नेल एंटाइटेलमेंट में एंटाइटेलमेंट नहीं है get_task_allow, और Apple ने भी करने की संभावना को हटा दिया है tfp0( task_for_pid 0), उन्हें एक पैच की आवश्यकता है।

तो मूल रूप से Xcode को आपके ऐप की मेमोरी को छूने और इसे डीबग करने के लिए इसके साथ काम करने की आवश्यकता है, आपको इसे डीबगिंग के लिए सक्षम करने की आवश्यकता होगी, लेकिन आपको अपने ऐप को वितरित करने के लिए इसे अक्षम करने की आवश्यकता होगी या फिर कोई भी ऐप आपको प्राप्त करने में सक्षम होगा कार्य बंदरगाह।


-7

Xcode 4 के लिए: आपको नई फ़ाइल से Entitlements.plist फ़ाइल बनानी होगी। और लक्ष्य-> सेटिंग सेट करें-> कोड साइनिंग एंटाइटेलमेंट आपको यहां लिखना होगा "एंटाइटेलमेंट.प्लिस्ट"

मैंने ऐसा किया और xcode डॉन को अब त्रुटि नहीं मिली

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.