Saya menghadapi masalah ketika saya memperbarui Xcode saya ke 7.0 atau iOS 9.0. Entah bagaimana itu mulai memberi saya kesalahan Judul
"Sumber daya tidak dapat dimuat karena kebijakan Keamanan Transportasi Aplikasi mengharuskan penggunaan koneksi yang aman"
Metode layanan web:
-(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];
}
Layanan ini berjalan dengan baik untuk Xcode versi sebelumnya dan iOS versi sebelumnya Tapi ketika saya telah memperbarui ke Xcode 7.0 yang ada di iOS 9.0, itu mulai memberi saya Masalah seperti mengikuti ketika saya memanggil metode layanan web di atas. Kesalahan yang Saya Logged adalah:
Koneksi gagal: Domain Kesalahan = NSURLErrorDomain Code = -1022 "Sumber daya tidak dapat dimuat karena kebijakan Keamanan Transportasi Aplikasi memerlukan penggunaan koneksi yang aman." UserInfo = {NSUnderlyingError = 0x7fada0f31880 {Domain Kesalahan = kCFErrorDomainCFNetwork Code = -1022 "(null)"}, NSErrorFailingURLStringKey = MyServiceURL , NSErrorFailingURLKey = MyServiceURL dapat menggunakan kebijakan ini karena keamanan tidak dapat menggunakan kebijakan, sehingga tidak dapat menggunakan kebijakan sebagai tempat berlindung. koneksi.}
Saya telah mencoba Mengikuti Pertanyaan dan jawaban tetapi tidak mendapatkan hasil apa pun di sana, apakah ada gagasan sebelumnya bagaimana saya dapat menghapus kesalahan panggilan layanan itu?
sumber
Jawaban:
Saya telah menyelesaikannya dengan menambahkan beberapa kunci di info.plist. Langkah-langkah yang saya ikuti adalah:
Membuka
info.plist
file target Proyek sayaMenambahkan Kunci yang disebut
NSAppTransportSecurity
sebagai aDictionary
.NSAllowsArbitraryLoads
sebagaiBoolean
dan mengatur nilainyaYES
seperti gambar berikut.Bersihkan Proyek dan Sekarang Semuanya Berjalan Baik seperti sebelumnya.
Tautan Ref: https://stackoverflow.com/a/32609970
EDIT: ATAU Dalam kode sumber
info.plist
file kita dapat menambahkan bahwa:sumber
NSExceptionDomains
. Atau kalau tidak, pengecualianNSAllowArbitraryLoads
, maka Anda harus menggunakan https untuk mengunjungi iniexception
App Transport Security Settings
danAllow Arbitrary Loads
masingSadarilah, menggunakan
NSAllowsArbitraryLoads = true
dalam proyek iniinfo.plist
memungkinkan semua koneksi ke server apa pun menjadi tidak aman. Jika Anda ingin memastikan hanya domain tertentu yang dapat diakses melalui koneksi tidak aman, coba ini:Atau, sebagai kode sumber:
Proyek Bersihkan & Bangun setelah diedit.
sumber
Keamanan transportasi disediakan di iOS 9.0 atau lebih baru, dan di OS X v10.11 dan yang lebih baru.
Jadi secara default hanya https panggilan saja yang diizinkan di aplikasi. Untuk mematikan Keamanan Transport Aplikasi tambahkan baris berikut dalam file info.plist ...
Untuk info lebih lanjut:
https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33
sumber
Untuk iOS 10.x dan Swift 3.x [versi di bawah ini juga didukung] cukup tambahkan baris berikut di 'info.plist'
sumber
Di Swift 4 Anda bisa menggunakan
-> Go Info.plist
-> Klik plus daftar properti Informasi
-> Tambahkan Pengaturan Keamanan Transport Transport sebagai kamus
-> Klik ikon Plus Pengaturan Keamanan Transport Aplikasi
-> Tambah Izinkan Beban Sewenang-wenang, atur YA
Gambar di bawah ini terlihat seperti
sumber
Saya telah menyelesaikan sebagai file plist.
Tambahkan NSAppTransportSecurity: Kamus.
Tambahkan Subkey bernama "NSAllowsArbitraryLoads" sebagai Boolean: YES
sumber
Sumber daya tidak dapat dimuat karena kebijakan Keamanan Transportasi Aplikasi mengharuskan penggunaan koneksi aman yang bekerja di Swift 4.03.
Buka pList.info Anda sebagai kode sumber dan tempel:
sumber
Dari dokumentasi Apple
Jika Anda mengembangkan aplikasi baru, Anda harus menggunakan HTTPS secara eksklusif. Jika Anda memiliki aplikasi yang ada, Anda harus menggunakan HTTPS sebanyak yang Anda bisa saat ini, dan membuat rencana untuk memigrasikan sisa aplikasi Anda sesegera mungkin. Selain itu, komunikasi Anda melalui API tingkat tinggi perlu dienkripsi menggunakan TLS versi 1.2 dengan kerahasiaan ke depan. Jika Anda mencoba membuat koneksi yang tidak mengikuti persyaratan ini, kesalahan terjadi. Jika aplikasi Anda perlu membuat permintaan ke domain tidak aman, Anda harus menentukan domain ini dalam file Info.plist aplikasi Anda.
Untuk Memintas Keamanan Transportasi Aplikasi:
Untuk mengizinkan semua domain tidak aman
Baca selengkapnya: Mengkonfigurasi Pengecualian Keamanan Transport Aplikasi di iOS 9 dan OSX 10.11
sumber
Jika Anda menggunakan Xcode 8.0 dan swift 3.0 atau 2.2
sumber
Di Xcode 7.1 dan seterusnya (cepat 2.0)
sumber
Ini adalah cara Apple untuk memaksakan keamanan yang lebih ketat pada apis Anda (dipaksa untuk menggunakan https melalui http). Saya akan menjelaskan cara menghapus pengaturan keamanan ini.
Sebagian besar jawaban di sini menunjukkan menambahkan kunci ini ke info.plist Anda
Ini saja tidak menyelesaikan masalah ini untuk saya. Saya harus menambahkan kunci yang sama ke dalam
Project -> Targets -> Info -> Custom iOS Target Properties
Ini akan memungkinkan koneksi tidak aman terjadi dari siapa pun. Jika Anda hanya ingin mengizinkan domain tertentu untuk menggunakan koneksi yang tidak aman, Anda dapat menambahkan yang berikut ini ke info.plist Anda.
sumber
Anda hanya perlu menggunakan HTTPS dan bukan HTTP di URL Anda dan itu akan berfungsi
sumber
Jika Anda bukan penggemar XML, maka tambahkan saja tag di bawah ini dalam file plist Anda.
sumber
iOS 9 (mungkin) memaksa pengembang untuk menggunakan Keamanan Transport Aplikasi secara eksklusif. Saya mendengar ini di suatu tempat secara acak jadi saya tidak tahu apakah ini benar sendiri. Tapi saya curiga dan sampai pada kesimpulan ini:
Aplikasi yang berjalan di iOS 9 akan (mungkin) tidak lagi terhubung ke server Meteor tanpa SSL.
Ini berarti menjalankan meteor run ios atau meteor run ios-perangkat akan (mungkin?) Tidak lagi berfungsi.
Dalam info.plist aplikasi,
NSAppTransportSecurity [Dictionary]
perlu memiliki kunciNSAllowsArbitraryLoads [Boolean]
untuk diatur keYES
atau Meteor perlu menggunakanhttps
untuklocalhost server
segera.sumber
Jika Anda menggunakan Xcode 8.0 hingga 8.3.3 dan cepat 2.2 ke 3.0
sumber
Buka pList.info Anda sebagai Kode Sumber dan di bagian bawah sebelum
</dict>
menambahkan kode berikut,Dan akhirnya ganti
your.domain.com
dengan Url basis Anda. Terima kasih.sumber
Bagi Anda yang mengembangkan di localhost ikuti langkah-langkah ini:
Information Property List
dan tambahkanApp Transport Security Settings
dan tetapkan ituDictionary
TipeApp Transport Security Settings
entri yang baru dibuat dan tambahkanNSExceptionAllowsInsecureHTTPLoads
tipeBoolean
dan tetapkan nilainyaYES
.NSExceptionAllowsInsecureHTTPLoads
entri dan klik opsi "Shift Row Right" untuk menjadikannya anak dari entri di atas.NSExceptionAllowsInsecureHTTPLoads
entri dan tambahkanAllow Arbitrary Loads
tipeBoolean
dan tetapkan nilainyaYES
Catatan: Seharusnya pada akhirnya terlihat seperti disajikan pada gambar berikut
sumber
Saya berhasil menyelesaikan ini dengan kombinasi dari banyak opsi yang disebutkan. Saya akan menyertakan daftar periksa semua hal yang harus saya lakukan untuk menyelesaikannya.
Pendeknya:
NSAllowsArbitraryLoads
ke true untuk ekstensi arloji saya (bukan aplikasi arloji saya).https
dan tidakhttp
.Langkah pertama:
Pertama dan yang paling jelas saya harus menambahkan
NSAppTransportSecurity
kunci sebagai kamus di ekstensi arloji sayainfo.plist
dengan subkunci yang disebutNSAllowsArbitraryLoads
sebagai boolean yang disetel ke true. Hanya setel ini di ekstensi jam tangan dan bukan daftar aplikasi jam tangan. Meskipun perhatikan bahwa ini memungkinkan semua koneksi dan bisa jadi tidak aman.atau
Langkah dua:
Kemudian saya harus memastikan bahwa url yang saya coba muat adalah
https
dan bukan hanyahttp
. Untuk setiap url yang masih http saya gunakan:Cepat :
let newURLString = oldURLString.stringByReplacingOccurrencesOfString("http", withString: "https")
Obj-C:
NSString *newURLString = [oldURLString stringByReplacingOccurrencesOfString:@“http” withString:@“https”];
sumber
Pastikan Anda mengubah file info.plist yang tepat .
Ini adalah kedua kalinya saya membuang waktu untuk masalah ini, karena saya tidak melihat bahwa saya mengubah info. Daftar di bawah MyProjectNameUITests.
sumber
Jika Anda menggunakan firebase, itu akan menambah
NSAllowsArbitraryLoadsInWebContent = true
diNSAppTransportSecurity
bagian, danNSAllowsArbitraryLoads = true
tidak akan berfungsisumber
Saya telah memecahkan masalah ini dalam kasus server parse yang di-host sendiri menggunakan sertifikat yang ditandatangani satu tahun daripada opsi "NSAllowsArbitraryLoads"
Parse Server sebagai server node.js menyajikan url https publik yang harus Anda tentukan. Contohnya:
parse-server --appId --masterKey --publicServerURL https: //your.public.url/some_nodejs
Jangan ragu untuk melihat file konfigurasi saya
sumber