ios - संसाधन लोड नहीं किया जा सका क्योंकि ऐप ट्रांसपोर्ट सिक्योरिटी पॉलिसी के लिए सुरक्षित कनेक्शन के उपयोग की आवश्यकता होती है
nsurlconnection nsurlsession (12)
मैं उस समस्या का सामना कर रहा हूं जब मैंने अपने 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 "(null)"}, NSErrorFailingURLStringKey = MyServiceURL , NSErrorFailingURLKey = MyService = MyService = MyService = My Service कनेक्शन।}
मैंने निम्नलिखित प्रश्नों और उत्तरों की कोशिश की है, लेकिन वहां कोई परिणाम नहीं मिला, क्या कोई अग्रिम विचार है कि मैं उस सेवा कॉल त्रुटि को कैसे निकाल सकता हूं?
- संसाधन लोड नहीं किया जा सका ios9 है
- ऐप ट्रांसपोर्ट सिक्योरिटी Xcode 7 बीटा 6
- https://stackoverflow.com/a/32609970
IOS 10.x और Swift 3.x के लिए [नीचे के संस्करण भी समर्थित हैं] बस 'info.plist' में निम्नलिखित पंक्तियाँ जोड़ें।
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
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
iOS 9 (मई) डेवलपर्स को ऐप ट्रांसपोर्ट सिक्योरिटी का विशेष रूप से उपयोग करने के लिए मजबूर करता है। मैं इसे कहीं बेतरतीब ढंग से सुनता हूं इसलिए मुझे नहीं पता कि यह खुद सच है या नहीं। लेकिन मुझे इस पर संदेह है और इस निष्कर्ष पर पहुंचे हैं:
IOS 9 पर चलने वाला ऐप (शायद) अब SSL के बिना Meteor सर्वर से कनेक्ट नहीं होगा।
इसका मतलब है कि अब चलने वाला उल्का रन ios या उल्का चलाने वाला ios- उपकरण (शायद?) अब काम नहीं करेगा।
एप्लिकेशन के info.plist में,
NSAppTransportSecurity [Dictionary]
लिए एक प्रमुख
NSAllowsArbitraryLoads [Boolean]
YES
या Meteor पर सेट होने की आवश्यकता है जो जल्द ही अपने
localhost server
लिए
https
का उपयोग करने की आवश्यकता है।
आपको बस अपने URL में HTTPS और HTTP का उपयोग करने की आवश्यकता नहीं है और यह काम करेगा
मैं उल्लेख किए गए विकल्पों में से कई के संयोजन के साथ इसे हल करने में कामयाब रहा। मैं उन सभी चीजों की एक चेकलिस्ट शामिल करूंगा जिन्हें मुझे काम करने के लिए करना था।
संक्षेप में:
-
मेरे वॉच एक्सटेंशन (मेरी वॉच ऐप नहीं) के लिए
NSAllowsArbitraryLoads
सेट करें। -
सुनिश्चित करें कि मैं
https
का उपयोग कर रहा था न किhttp
।
पहला कदम:
सबसे पहले और सबसे स्पष्ट रूप से मुझे अपने वॉच एक्सटेंशन की जानकारी में एक
NSAppTransportSecurity
कुंजी को एक शब्दकोश के रूप में जोड़ना था। एक उपकुंजी के साथ एक उपकुंजी जिसे
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”];
मैंने "NSAllowsArbiteathLoads" विकल्प के बजाय एक वर्ष के हस्ताक्षरित प्रमाण पत्र का उपयोग करके एक स्व-होस्ट किए गए पार्स-सर्वर के मामले में इस मुद्दे को हल किया है।
किसी भी नोड.जेएस सर्वर के रूप में पार्स सर्वर एक सार्वजनिक https url प्रस्तुत करता है जिसे आपको निर्दिष्ट करना होगा। उदाहरण के लिए:
parse-server --appId --masterKey --publicServerURL https://your.public.url/some_nodejs
मेरी कॉन्फ़िगरेशन फ़ाइलों को एक नज़र देने के लिए स्वतंत्र महसूस करें
संसाधन लोड नहीं किया जा सका क्योंकि ऐप ट्रांसपोर्ट सिक्योरिटी पॉलिसी को स्विफ्ट 4.03 में काम करने वाले एक सुरक्षित कनेक्शन के उपयोग की आवश्यकता है।
स्रोत कोड और पेस्ट के रूप में अपना pList.info खोलें:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
अगर आप 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: .com)
Add Subkey named " NSIncludesSubdomains" as Boolean: YES
Add Subkey named " NSExceptionAllowsInsecureHTTPLoads" as Boolean: YES
सुनिश्चित करें कि आपने सही info.plist फ़ाइल को बदल दिया है ।
यह दूसरी बार है जब मैं इस मुद्दे पर समय बर्बाद कर रहा हूं, क्योंकि मैंने ध्यान नहीं दिया कि मैं MyProjectNameUITests के तहत info.plist बदल रहा हूं।