संसाधन को लोड नहीं किया जा सका क्योंकि ऐप ट्रांसपोर्ट सिक्योरिटी पॉलिसी को सुरक्षित कनेक्शन के उपयोग की आवश्यकता होती है


490

मैं उस समस्या का सामना कर रहा हूं जब मैंने अपने Xcode को 7.0 या iOS 9.0 में अपडेट किया है। किसी तरह यह मुझे शीर्षक त्रुटि दे शुरू कर दिया

"संसाधन लोड नहीं किया जा सका क्योंकि ऐप ट्रांसपोर्ट सिक्योरिटी पॉलिसी को सुरक्षित कनेक्शन के उपयोग की आवश्यकता है"

Webservice विधि:

-(void)ServiceCall:(NSString*)ServiceName :(NSString *)DataString
{
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
    [sessionConfiguration setAllowsCellularAccess:YES];
    [sessionConfiguration setHTTPAdditionalHeaders:@{ @"Accept" : @"application/json" }];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration];

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",ServiceURL]];
    NSLog(@"URl %@%@",url,DataString);
    // Configure the Request
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setValue:[NSString stringWithFormat:@"%@=%@", strSessName, strSessVal] forHTTPHeaderField:@"Cookie"];
    request.HTTPBody = [DataString dataUsingEncoding:NSUTF8StringEncoding];
    request.HTTPMethod = @"Post";

    // post the request and handle response
    NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
                                          {
                                              // Handle the Response
                                              if(error)
                                              {
                                                  NSLog(@"%@",[NSString stringWithFormat:@"Connection failed: %@", [error description]]);

                                                  // Update the View
                                                  dispatch_async(dispatch_get_main_queue(), ^{

                                                      // Hide the Loader
                                                      [MBProgressHUD hideHUDForView:[[UIApplication sharedApplication] delegate].window animated:YES];


                                                  });
                                                  return;
                                              }
                                              NSArray * cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:request.URL];
                                              for (NSHTTPCookie * cookie in cookies)
                                              {
                                                  NSLog(@"%@=%@", cookie.name, cookie.value);
                                                  strSessName=cookie.name;
                                                  strSessVal=cookie.value;

                                              }

                                              NSString *retVal = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}];
[postDataTask resume];

}

यह सेवा Xcode के पूर्व संस्करणों और iOS पिछले संस्करणों के लिए ठीक चल रही है लेकिन जब मैंने Xcode 7.0 जो iOS 9.0 पर है, को अपडेट किया है, तो यह मुझे इस तरह की समस्या का सामना करना शुरू कर दिया जब मैं उपरोक्त वेब सेवा पद्धति को कॉल कर रहा हूं। लॉग त्रुटि जो मुझे मिल रही है:

कनेक्शन विफल: त्रुटि डोमेन = NSURLErrorDomain कोड = -1022 "संसाधन लोड नहीं किया जा सका क्योंकि ऐप ट्रांसपोर्ट सुरक्षा नीति के लिए एक सुरक्षित कनेक्शन के उपयोग की आवश्यकता है।" UserInfo = {NSUnderlyingError = 0x7fada0f31880 {त्रुटि डोमेन = kCFErrorDomainCFNetwork कोड = -1022 "(शून्य)"}, NSErrorFailingURLStringKey = MyServiceURL , NSErrorFailingURLKey = MyServiceURL , क्योंकि एप्लिकेशन के परिवहन सुरक्षा नीति NSLocalizedDescription = संसाधन लोड नहीं किया जा सकता है एक सुरक्षित के उपयोग की आवश्यकता कनेक्शन।}

मैंने निम्नलिखित प्रश्नों और उत्तरों की कोशिश की है, लेकिन वहां कोई परिणाम नहीं मिला, क्या कोई अग्रिम विचार है कि मैं उस सेवा कॉल त्रुटि को कैसे निकाल सकता हूं?

  1. संसाधन लोड नहीं किया जा सका ios9
  2. ऐप ट्रांसपोर्ट सिक्योरिटी Xcode 7 बीटा 6
  3. https://stackoverflow.com/a/32609970

जवाबों:


935

मैंने इसे info.plist में कुछ कुंजी जोड़कर हल कर लिया है। मैंने जिन चरणों का पालन किया है वे हैं:

  1. मेरे प्रोजेक्ट लक्ष्य की info.plistफ़ाइल खोली

  2. एक कुंजी के NSAppTransportSecurityरूप में बुलाया एक जोड़ा गया Dictionary

  3. एक उपकुंजी के NSAllowsArbitraryLoadsरूप में जोड़ा गया Booleanऔर YESछवि के रूप में के रूप में इसके मूल्य निर्धारित किया है ।

यहाँ छवि विवरण दर्ज करें

प्रोजेक्ट को साफ करें और अब पहले की तरह सबकुछ ठीक चल रहा है।

Ref Link: https://stackoverflow.com/a/32609970

संपादित करें: या info.plistफ़ाइल के स्रोत कोड में हम इसे जोड़ सकते हैं:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>yourdomain.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
       </dict>
  </dict>

5
यह पहली बार में काम नहीं कर रहा है। आपको प्रोजेक्ट के अंदर कीज़ को जोड़ना होगा> लक्ष्य भी
orafaelreis

4
यहाँ कुछ उपयोगी एप्पल प्रलेखन है developer.apple.com/library/ios/documentation/General/Reference/...
LargeGlasses

1
@ मिहिरोजा: हां, परिवहन सुरक्षा आईओएस 9. की एक नई विशेषता है
डोमिनिक के

2
यदि आपके पास कोई अपवाद डोमेन नहीं है, तो बस किसी भी कुंजी को हटा दें NSExceptionDomains। या फिर यह एक अपवाद होगा NSAllowArbitraryLoads, तो आपको यह देखने के लिए https का उपयोग करना होगाexception
DawnSong

7
Xcode 8.3 / स्विफ्ट 3 के लिए यह है App Transport Security Settingsऔर Allow Arbitrary Loadsक्रमशः
स्वप्न लीक्षमान 13

279

जागरूक रहें, NSAllowsArbitraryLoads = trueपरियोजना के उपयोग info.plistसे किसी भी सर्वर के सभी कनेक्शन असुरक्षित हो सकते हैं। यदि आप यह सुनिश्चित करना चाहते हैं कि असुरक्षित कनेक्शन के माध्यम से केवल एक विशिष्ट डोमेन सुलभ हो, तो यह प्रयास करें:

यहाँ छवि विवरण दर्ज करें

या, स्रोत कोड के रूप में:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>domain.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

संपादन के बाद स्वच्छ और निर्माण परियोजना।


आपके उत्तर के लिए धन्यवाद बस NSAllowArbitaryLoads ने मेरे लिए काम नहीं किया NSExceptionAllowsInsecureHTTPLoads जोड़ने का काम किया
नीता

1
मैंने इन दोनों कुंजियों को भी जोड़ा: <! - HTTP अनुरोधों को अनुमति देने के लिए शामिल करें -> <key> NSTemporaryExceptionAllowsInsecureHTTPLoads </ key> <true /> <! - न्यूनतम TLS संस्करण निर्दिष्ट करने के लिए शामिल करें>> <key> NSTemporaryExceptionMinimumTLSVersion </ key! कुंजी> <string> TLSv1.1 </ string> इसने इसे बहुत जल्दी लोड किया।
सैंडी डी।

ध्यान दें: मैं अभी XCode 8 का उपयोग कर रहा हूं: यदि आप इसे मैन्युअल रूप से कर रहे हैं, तो डोमेन> वैल्यू टाइप> डिक्शनरी पर राइट क्लिक करके जोड़ना सुनिश्चित करें "..AllowsInsecure ..." और "... इसमें शामिल हैं"
ArielSD

यदि मैं domain.com के बाद पोर्ट नंबर निर्दिष्ट करता हूं तो काम नहीं कर रहा हूं। (domain.com:3001 उदाहरण के लिए)
शमसीद्दीन

43

IOS 9.0 या उसके बाद और OS X v10.11 और बाद में परिवहन सुरक्षा प्रदान की जाती है।

तो डिफ़ॉल्ट रूप से केवल https कॉल केवल ऐप्स में अनुमत हैं। अनुप्रयोग परिवहन सुरक्षा को बंद करने के लिए info.plist फ़ाइल में निम्न पंक्तियाँ जोड़ें ...

<key>NSAppTransportSecurity</key>
  <dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
  </dict>

अधिक जानकारी के लिए: https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple -ref/ doc / uid /
TP40009251-SW33


लेकिन, यह अभी भी मुझे किसी भी डोमेन पर HTTP कॉल करने की अनुमति नहीं दे रहा है। क्या कोई सुराग है कि ऐसा क्यों हो रहा है?
मृग

यहां तक ​​कि इसका एक HTTP URL, URL shoulb bverified होना चाहिए या इसके पास एक vlid SSL प्रमाणपत्र होना चाहिए।
तेजा कुमार बेथिना

35

IOS 10.x और Swift 3.x के लिए [नीचे के संस्करण भी समर्थित हैं] बस 'info.plist' में निम्न पंक्तियाँ जोड़ें।

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

1
10.x और स्विफ्ट 3.x के लिए, मैंने कहीं और देखा था कि चाबियां वास्तव में AppTransportSecurity और AllowArbiteathLoads थीं लेकिन वे गलत थीं। इन चाबियों के लिए NS उपसर्ग अभी भी आवश्यक है, यहां तक ​​कि स्विफ्ट 3.x के लिए भी। जब मैं इन कुंजियों के लिए NS उपसर्ग पर भरोसा करता हूं तो त्रुटि दूर हो जाती है।
जैजमीन जू

27

स्विफ्ट 4 में आप उपयोग कर सकते हैं

-> जाओ Info.plist

-> सूचना गुण सूची पर क्लिक करें

-> शब्दकोश के रूप में एप्लिकेशन परिवहन सुरक्षा सेटिंग्स जोड़ें

-> प्लस आइकन ऐप ट्रांसपोर्ट सिक्योरिटी सेटिंग्स पर क्लिक करें

-> अनुमति दें मनमाना लोड सेट हाँ

मधुर छवि दिखती है

यहाँ छवि विवरण दर्ज करें


23

मैंने प्लिस्ट फाइल के रूप में हल किया है।

एक NSAppTransportSecurity जोड़ें: शब्दकोश।

"NSAllowsArbiteathLoads" नाम उपकुंजी को बूलियन के रूप में जोड़ें: हाँ

यहाँ छवि विवरण दर्ज करें


18

संसाधन लोड नहीं किया जा सका क्योंकि ऐप ट्रांसपोर्ट सिक्योरिटी पॉलिसी को स्विफ्ट 4.03 में काम करने वाले एक सुरक्षित कनेक्शन के उपयोग की आवश्यकता है।

स्रोत कोड और पेस्ट के रूप में अपना pList.info खोलें:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

13

Apple प्रलेखन से

यदि आप एक नया ऐप विकसित कर रहे हैं, तो आपको विशेष रूप से HTTPS का उपयोग करना चाहिए। यदि आपके पास एक मौजूदा ऐप है, तो आपको HTTPS का उपयोग उतना ही करना चाहिए जितना आप अभी कर सकते हैं, और जितनी जल्दी हो सके अपने बाकी ऐप को माइग्रेट करने के लिए एक योजना बनाएं। इसके अलावा, उच्च-स्तरीय API के माध्यम से आपके संचार को आगे गोपनीयता के साथ TLS संस्करण 1.2 का उपयोग करके एन्क्रिप्ट किया जाना चाहिए। यदि आप एक कनेक्शन बनाने की कोशिश करते हैं जो इस आवश्यकता का पालन नहीं करता है, तो एक त्रुटि है। यदि आपके ऐप को असुरक्षित डोमेन के लिए अनुरोध करने की आवश्यकता है, तो आपको अपने ऐप की Info.plist फ़ाइल में इस डोमेन को निर्दिष्ट करना होगा।

बाईपास ऐप परिवहन सुरक्षा के लिए:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.com</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <!--Include to specify minimum TLS version-->
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.1</string>
    </dict>
  </dict>
</dict>

सभी असुरक्षित डोमेन की अनुमति देने के लिए

<key>NSAppTransportSecurity</key>
<dict>
  <!--Include to allow all connections (DANGER)-->
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

और पढ़ें: iOS 9 और OSX 10.11 में ऐप ट्रांसपोर्ट सुरक्षा अपवाद कॉन्फ़िगर करना




9

यह आपके एपिस पर सख्त सुरक्षा के लिए Apple का तरीका है (http पर http का उपयोग करने के लिए मजबूर)। मैं बताता हूँ कि इस सुरक्षा सेटिंग को कैसे निकालना है।


यहाँ पर अधिकांश उत्तर आपकी जानकारी के लिए इस कुंजी को जोड़ते हैं यहाँ छवि विवरण दर्ज करें

इस अकेले ने मेरे लिए इस समस्या को हल नहीं किया। मुझे उसी चाबी को अंदर जोड़ना था

Project -> Targets -> Info -> Custom iOS Target Properties यहाँ छवि विवरण दर्ज करें


यह असुरक्षित कनेक्शन को किसी से भी होने देगा। यदि आप असुरक्षित कनेक्शन बनाने के लिए केवल एक विशिष्ट डोमेन का उपयोग करना चाहते हैं, तो आप अपनी जानकारी में निम्नलिखित जोड़ सकते हैं।

यहाँ छवि विवरण दर्ज करें


धन्यवाद, यह मेरे लिए काम किया! मैंने केवल प्लिस्ट फाइल को एडिट किया था जिसके पहले काम नहीं किया था। इम आश्चर्यचकित कैसे अन्य लोगों को काम कर रहे है कि जिस तरह से समझ में आ गया
jones

8

आपको बस अपने URL में HTTPS और HTTP का उपयोग करने की आवश्यकता नहीं है और यह काम करेगा


3
जब तक, निश्चित रूप से, आप HTTPS का उपयोग नहीं कर सकते क्योंकि Apple को स्व-हस्ताक्षरित प्रमाण पत्र पसंद नहीं है। क्या आपको वह समस्या नहीं है?
टोनी बी

1
मेरे मामले में, यह पूरी तरह से काम करता है क्योंकि मैंने एचटीटीपीएस में बदल दिया है
पियर्स

1
लेकिन क्या आप स्व-हस्ताक्षरित या CA हस्ताक्षरित प्रमाण पत्र का उपयोग करते हैं? बस उत्सुक। एक अलग मुद्दे की तरह, ज़ाहिर है, लेकिन मुझे लगता है कि पूछना होगा।
टोनी बी

मैंने सर्वर साइड पर काम नहीं किया, मुझे ईमानदार होने का पता नहीं है :(
pierre23

कुछ सर्वर वातावरण (साझा होस्टिंग) पर HTTPS कनेक्शन सेट करना मुश्किल हो सकता है।
रैप्टर

7

यदि आप एक्सएमएल के बहुत बड़े प्रशंसक नहीं हैं, तो अपनी प्लास्ट फाइल में केवल नीचे टैग जोड़ें।

यहाँ छवि विवरण दर्ज करें


5

iOS 9 (मई) डेवलपर्स को ऐप ट्रांसपोर्ट सिक्योरिटी का विशेष रूप से उपयोग करने के लिए मजबूर करता है । मैं इसे कहीं बेतरतीब ढंग से सुनता हूं इसलिए मुझे नहीं पता कि यह खुद सच है या नहीं। लेकिन मुझे इस पर संदेह है और इस निष्कर्ष पर पहुंचे हैं:

IOS 9 पर चलने वाला ऐप (शायद) अब SSL के बिना Meteor सर्वर से कनेक्ट नहीं होगा।

इसका मतलब है कि अब चलने वाला उल्का रन ios या उल्कापिंड रन ios- डिवाइस (शायद?) अब काम नहीं करेगा।

एप्लिकेशन के info.plist में, इसके लिए जल्द ही उपयोग करने के लिए या Meteor सेट करने के लिए NSAppTransportSecurity [Dictionary]एक कुंजी की आवश्यकता है ।NSAllowsArbitraryLoads [Boolean]YEShttpslocalhost server


5

अगर आप Xcode 8.0 से 8.3.3 और स्विफ्ट 2.2 से 3.0 का उपयोग कर रहे हैं

मेरे मामले में URL http: // से https: // में बदलने की आवश्यकता है (अगर काम नहीं कर रहा है तो कोशिश करें)

Add an App Transport Security Setting: Dictionary.
Add a NSAppTransportSecurity: Dictionary.
Add a NSExceptionDomains: Dictionary.
Add a yourdomain.com: Dictionary.  (Ex: stackoverflow.com)

Add Subkey named " NSIncludesSubdomains" as Boolean: YES
Add Subkey named " NSExceptionAllowsInsecureHTTPLoads" as Boolean: YES

यहाँ छवि विवरण दर्ज करें


3

सोर्स कोड के रूप में अपना pList.info खोलें और नीचे दिए गए कोड को जोड़ने से ठीक पहले ,</dict>

 <!--By Passing-->
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>your.domain.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>1.0</string>
                <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
        </dict>
    </dict>
    <!--End Passing-->

और अंत your.domain.comमें अपने आधार Url के साथ बदलें । धन्यवाद।


3

आप में से जो लोकलहोस्ट पर विकास कर रहे हैं, वे इन चरणों का पालन करें:

  1. "+" बटन के बगल में टैप करें और इसे टाइप करें Information Property Listऔर जोड़ेंApp Transport Security SettingsDictionary
  2. नई बनाई गई App Transport Security Settingsप्रविष्टि के आगे "+" बटन टैप करें और NSExceptionAllowsInsecureHTTPLoadsप्रकार जोड़ें Booleanऔर इसके मान को सेट करें YES
  3. NSExceptionAllowsInsecureHTTPLoadsप्रविष्टि पर राइट क्लिक करें और "शिफ्ट रो राइट" विकल्प पर क्लिक करें ताकि यह उपरोक्त प्रविष्टि का बच्चा बन सके।
  4. NSExceptionAllowsInsecureHTTPLoadsप्रविष्टि के आगे "+" बटन टैप करें और Allow Arbitrary Loadsटाइप करें Booleanऔर इसका मान सेट करेंYES

नोट: यह अंत में निम्नलिखित चित्र में प्रस्तुत की तरह कुछ दिखना चाहिए

यहाँ छवि विवरण दर्ज करें


2

मैं उल्लेख किए गए विकल्पों में से कई के संयोजन के साथ इसे हल करने में कामयाब रहा। मैं उन सभी चीजों की एक चेकलिस्ट शामिल करूँगा जिन्हें मुझे काम करने के लिए करना था।

संक्षेप में:

  1. NSAllowsArbitraryLoadsमेरे वॉच एक्सटेंशन के लिए सही पर सेट करें (मेरा वॉच ऐप नहीं)।
  2. सुनिश्चित करें कि मैं उपयोग कर रहा था httpsऔर नहीं http

पहला कदम:

सबसे पहले और सबसे स्पष्ट रूप से मुझे NSAppTransportSecurityअपने वॉच एक्सटेंशन में एक शब्दकोश के रूप में एक कुंजी को जोड़ना पड़ा, info.plistएक उपकुंजी के साथ जिसे NSAllowsArbitraryLoadsबुलियन सेट टू सच कहा जाता है। इसे केवल वॉच एक्सटेंशन में सेट करें न कि वॉच ऐप के प्लिस्ट में। यद्यपि ध्यान दें कि यह सभी कनेक्शनों को अनुमति देता है और असुरक्षित हो सकता है।

यहाँ छवि विवरण दर्ज करें

या

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

दूसरा चरण:

तब मुझे यह सुनिश्चित करना था कि मैं जिस url को लोड करने की कोशिश कर रहा था, httpsवह सिर्फ था ही नहीं http। किसी भी यूआरएल के लिए जो अभी भी http मैं इस्तेमाल किया गया था:

स्विफ्ट :

let newURLString = oldURLString.stringByReplacingOccurrencesOfString("http", withString: "https")

Obj सी:

NSString *newURLString = [oldURLString stringByReplacingOccurrencesOfString:@“http” withString:@“https”];


2

सुनिश्चित करें कि आपने सही info.plist फ़ाइल को बदल दिया है

यह दूसरी बार है जब मैं इस मुद्दे पर समय बर्बाद कर रहा हूं, क्योंकि मैंने ध्यान नहीं दिया कि मैं MyProjectNameUITests के तहत info.plist को बदल रहा हूं।


1

यदि आप फायरबेस का उपयोग करते हैं, तो यह अनुभाग NSAllowsArbitraryLoadsInWebContent = trueमें जोड़ देगा NSAppTransportSecurity, और NSAllowsArbitraryLoads = trueकाम नहीं करेगा


इस जानकारी के लिए धन्यवाद। आपने मुझे घंटों समस्या निवारण किया।
pAkY88

0

मैंने "NSAllowsArbiteathLoads" विकल्प के बजाय एक वर्ष के हस्ताक्षरित प्रमाण पत्र का उपयोग करके एक स्व-होस्ट किए गए पार्स-सर्वर के मामले में इस मुद्दे को हल किया है।

किसी भी नोड.जेएस सर्वर के रूप में पार्स सर्वर एक सार्वजनिक https url प्रस्तुत करता है जिसे आपको निर्दिष्ट करना होगा। उदाहरण के लिए:

parse-server --appId --masterKey --publicServerURL https: //your.public.url/some_nodejs

मेरी कॉन्फ़िगरेशन फ़ाइलों को एक नज़र देने के लिए स्वतंत्र महसूस करें

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