2015-10-05 13 views
9

Tôi đã có một ứng dụng đang hoạt động tải xuống một số thông tin từ một miền http. Nhưng sau khi cập nhật Swift 2.0 và Xcode 7, ứng dụng của tôi không thể kết nối với máy chủ và tải xuống dữ liệu json, tôi nhận được "App Transport Security đã chặn tải tài nguyên HTTP (http: //) rõ ràng vì nó không an toàn. Các ngoại lệ tạm thời có thể được định cấu hình thông qua tệp Info.plist của ứng dụng của bạn. " lỗi.NSAllowsArbitraryLoads không hoạt động

Tôi đã cố gắng đưa dòng này trong info.plist của tôi:

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

Nhưng tôi nhận được lỗi tương tự, nó không làm việc. Tôi luôn nhận được dữ liệu nil từ các phương thức tải xuống. Có ai có lỗi này không? Cảm ơn!

EDIT: Đây là một hình ảnh từ file info.plist của tôi:

Info.plist file

+0

Có vẻ lạ, bạn đã thử làm sạch dự án, xây dựng thư mục và dữ liệu có nguồn gốc chưa? –

Trả lời

13

Tôi cảm thấy thật ngu ngốc. Tôi đã thêm các phím để vô hiệu hóa ATS trên Info.plist sai. Thay vì thêm nó vào tệp Supporting Files/Info.plist, tôi đã thêm nó vào tệp MyAppTests/Supporting Files/Info.plist. Không thực sự là một lỗi trong Xcode, nhưng là một lỗi trong bộ não của tôi. Cảm ơn tất cả các câu trả lời của bạn!

+6

Tôi cảm thấy quá ngu ngốc vì cùng một vấn đề. Rất cảm ơn! –

+2

Tương tự cũng xảy ra với tôi! – tim

+0

Tôi cảm thấy rất ngu ngốc và nhẹ nhõm. Cảm ơn bạn. – Chucky

0

Bạn đã thử thêm tên miền của bạn như? Bạn nên thêm nó vào NSAppTransportSecurity từ điển.

<key>NSExceptionDomains</key> 
     <dict> 
      <key>abcde.com</key> 
      <dict> 
       <key>NSExceptionRequiresForwardSecrecy</key> 
       <true/> 
       <key>NSIncludesSubdomains</key> 
       <true/> 
       <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> 
       <true/> 
      </dict> 
     </dict> 
+0

Tôi đã thử mã của bạn nhưng tôi vẫn gặp lỗi tương tự ... –

+0

Bạn đã cập nhật tên miền chưa? @ PabloQuemé – ridvankucuk

+0

Vâng, đây là hình ảnh của info.plist của tôi: –

6

Bạn có thể thử sử dụng

nscurl --ats-diagnostics <your-URL> 

tại nhà ga. Điều này có thể giúp bạn tìm các cài đặt cho phép ứng dụng của bạn kết nối với URL của bạn. Điều này chỉ hoạt động trên OSX El Capitan. Kiểm tra quả táo technote.

Nhưng nếu bạn đã thử NSArbitraryLoads trong tệp info.plist của mình, công cụ chẩn đoán này có thể sẽ không giúp bạn. Tôi nghĩ rằng bạn có thể đã tìm thấy một lỗi.

3

Tôi gặp vấn đề tương tự, tôi đã thử thêm NSExceptionMinimumTLSVersion và nó hoạt động.

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSExceptionMinimumTLSVersion</key> 
    <string>TLSv1.0</string> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
</dict> 

Tôi không chắc tại sao điều này lại hữu ích, nhưng ... Tôi hy vọng sẽ hữu ích nếu có ai đó ở ngoài đó quá

1

Không có giải pháp nào trước đây làm việc cho tôi, tôi đã đặt NSAllowsArbitraryLoads thành true, nhưng HTP vẫn không hoạt động, sau khi nhìn xung quanh, tôi nhận thấy tệp info.plist có phần NSExceptionDomains, vì vậy tôi đã xóa nó để thử nghiệm và mọi thứ đã làm việc.

Vì vậy, có vẻ như việc NSExceptionDomains hủy NSAllowsArbitraryLoads, hy vọng điều này hữu ích.

0

Tôi gặp sự cố tương tự và sau một thời gian tôi đã phát hiện ra rằng tệp info.plist bị hỏng. Tôi chỉ có thể tư vấn để kiểm tra xml trực tiếp không chỉ trình soạn thảo plist trong xcode.

0

Nếu bạn chỉ cần tải một tài nguyên http:// trong web (UIWebView/WKWebView/SafariViewController) thì điều kiện sau là đủ.

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoadsInWebContent</key> 
    <true/> 
</dict> 
2

Trong trường hợp của tôi, tôi cần thiết để loại bỏ tất cả các phím khác như "Cho phép tải Arbitrary trong Web Content" hoặc "Tên miền Exception" để có được "Allow Arbitrary Load" để làm việc vì nó thiết lập là true dưới " Cài đặt bảo mật giao thông ứng dụng "trong Info.plist.

Được thử nghiệm bằng XCode 8.2.1, iOS 10.2.

0

Tôi gặp sự cố tương tự trong Phiên bản XCode 8.3.2 (8E2002) với iOS 10.3. Sau khi xóa tất cả các khóa như "Cho phép tải trọng tùy ý trong nội dung web" hoặc "Tên miền ngoại lệ", khóa "Cho phép tải trọng tùy ý" hoạt động như mong đợi. Cảm ơn @dariukas.