2015-09-04 12 views
15

मैं एचटीटीपीएस सेटअप के बिना विकास पर्यावरण पर काम कर रहा हूं। क्या विकास (डीबग) मोड के लिए स्वचालित रूप से एटीएस को अक्षम करना संभव है?क्या डीबग पर्यावरण के लिए आईओएस 9 में एटीएस को अक्षम करना संभव है?

+0

यह तो जवाब है असमर्थ (http://stackoverflow.com/a/30836686/3395008) आप मदद कर सकते हैं एटीएस से निपटने के तरीके के बारे में। – ElonChan

उत्तर

35

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

#Disables ATS in debug builds. 
INFOPLIST="${TARGET_BUILD_DIR}"/"${INFOPLIST_PATH}" 
case "${CONFIGURATION}" in 
"Release"|"Adhoc") 
/usr/libexec/PlistBuddy -c "Set :NSAppTransportSecurity:NSAllowsArbitraryLoads NO" "${INFOPLIST}" 
;; 
"Debug") 
/usr/libexec/PlistBuddy -c "Set :NSAppTransportSecurity:NSAllowsArbitraryLoads YES" "${INFOPLIST}" 
;; 
esac 
+0

यह @ MaciekCzarnik के उत्तर से बेहतर है, क्योंकि आप अन्य सभी सेटिंग्स को कॉपी नहीं करते हैं साथ ही दूसरी .plist फ़ाइल में। –

+1

हाय वहाँ, मैंने आपके सुझाव की कोशिश की है और यह उपकरणों पर बहुत अच्छा काम करता है, लेकिन ऐसा लगता है कि यह सिम्युलेटर पर काम नहीं करता है। यह अजीब बात है क्योंकि जब मैं बिल्ड फ़ोल्डर में आउटपुट Info.plist फ़ाइल की जांच करता हूं, तो NSAllowArbitraryLoads सेटिंग सही ढंग से YES पर सेट होती है। कोई सुराग? – Andree

+0

@Andree हम बिना सिम्युलेटर में इसका उपयोग कर रहे हैं – nobre

2

हां, आप अपनी परियोजना सेटिंग्स को डीबग, रिलीज या जो भी कॉन्फ़िगरेशन आप अपने प्रोजेक्ट में उपयोग करते हैं (प्रोविजनिंग प्रोफाइल सेट के तरीके के समान) के लिए अलग-अलग Info.plist फ़ाइल का उपयोग करने के लिए कॉन्फ़िगर कर सकते हैं, इसलिए आपके डीबग प्लिस्ट में आप अक्षम कर सकते हैं एटीएस पूरी तरह से।

जाओ को परियोजना -> आपका लक्ष्य -> ​​सेटिंग्स बनाएँ -> Info.plist फ़ाइल

+0

इस तरह, मुझे इन्फो.प्लिस्ट फ़ाइल की कई प्रतियों की आवश्यकता होगी, जिनकी सामग्री एटीएस से संबंधित सेटिंग्स को छोड़कर बहुत समान है। क्या कोई तरीका है कि मैं इस डुप्लिकेशंस को कम कर सकता हूं? – Andree

+1

हमम, मुझे पता है:) आप एक शेल स्क्रिप्ट बना सकते हैं जिसे प्रत्येक बिल्ड (रन स्क्रिप्ट बिल्ड चरण) के साथ बुलाया जाएगा। क्या यह करने के लिए की जरूरत है: 1. 2. हटाएँ 'से प्रति 3. जोड़ें' NSAppTransportSecurity' NSAppTransportSecurity' कुंजी 'NSAllowsArbitraryLoads' उपयोग PlistBuddy के साथ एक प्रतिलिपि मूल plist फ़ाइल बनाएँ, और मेरे जवाब को अद्यतन करने के लिए स्वतंत्र महसूस:) –

+0

अरे यह दिलचस्प है, मैं इसे आज़माउंगा। इस बीच, मैं सिर्फ आपका जवाब स्वीकार करूंगा। धन्यवाद! – Andree

5

एक अन्य समाधान:

enter image description here

यह स्क्रिप्ट है। INFOPLIST_PREPROCESS = YES और INFOPLIST_PREPROCESSOR_DEFINITIONS = DEBUG=1,

enter image description here

का उपयोग करके यह सी कोड Info.plist में सीधे #ifdef या #if का उपयोग कर की तरह सशर्त preprocess हो सकता है।

<key>UIMainStoryboardFile</key> 
<string>Main</string> 
#if DEBUG 
<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
</dict> 
#endif 
<key>UIRequiredDeviceCapabilities</key> 
<array> 

विपक्ष: Xcode की संपत्ति सूची संपादक खोलने के लिए है, क्योंकि यह नहीं अच्छी तरह से गठित XML :(

+1

मुझे वास्तव में इस दृष्टिकोण को पसंद है, भले ही यह (पूर्व-संसाधित) अच्छी तरह से गठित एक्सएमएल न हो। –

+0

यह एक बुरा विचारधारा है जब एक बार एक्सकोड इसे खोलने और इसे ठीक से प्रस्तुत करने में सक्षम नहीं होगा। यदि आपको भविष्य में एक और बदलाव करने की ज़रूरत है, तो आप केवल यह देखेंगे कि संकलन समय में कुछ गलत है। @ नोब्रे का बेहतर दृष्टिकोण है। – Salmo

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