내 info.plist 파일에 NSAppTransportSecurity를 ​​어떻게 추가 할 수 있습니까?


124

https://developer.apple.com/videos/wwdc/2015/?id=711 @ 5 : 55

내 info.plist에 이것을 추가 할 수없는 것 같습니다. 가치가 없습니다. XCode 버전 7.0 베타 (7A121l)를 실행 중이며 iOS9에서 테스트 중입니다.

비디오에서 볼 수 있듯이 원하는 URL을 구체적으로 선언 할 수 없기 때문에 계속 "앱 전송 보안이 안전하지 않기 때문에 일반 텍스트 HTTP (http : //) 리소스로드를 차단했습니다. 임시 예외는 앱을 통해 구성 할 수 있습니다. Info.plist file "오류.

그러나 구성 할 수없는 것 같습니다. 어떤 아이디어?


더 이상 질문이 없습니다. 계속해서 자신의 질문에 답한 다음 적절한 시간 지연 후에 수락해야합니다.
Norman H

도메인 이름은 무엇입니까? 이것은 서버 기본 URL 또는 기타입니까? 내 앱 도메인 이름은 어디에서 찾을 수 있습니까?

도메인 이름은 가장 일반적으로 사용되는 용어 중 하나입니다. 글쎄 이것은 구매 한 다음 호스팅 후 API에 사용하는 서버 기본 URL로 사용할 수 있습니다. 앱 도메인 이름과 같은 것은 없습니다. 따라서 API가 작성된 도메인 이름을 사용할 수 있습니다.
Ashish

답변:


131

이것을 시도하십시오 --- Xcode-beta 4 7.0에서 나를 위해 일했습니다.

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>yourdomain.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>

또한 ATS를 비활성화하려면 다음을 사용할 수 있습니다.

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

그러나 이것은 전혀 권장되지 않습니다. 서버에는 SSL 인증서가 있어야하며 프라이버시 유출이 없어야합니다.


XCode 7.2 (7C68)가 있고 테스트 프로젝트의 info.plist를 수정했습니다 (완전히 ATS를 비활성화하여). 그러나 작동하지 않습니다. 단서가 있습니까?
Sanandrea는

일반적으로 작동합니다 ... 여기에 ur 코드를 붙여 넣으면 볼 수 있습니다
Ashish

또한 두 경우 이상의 추가해야 domanis <key>NSAllowsArbitraryLoads</key> <true/><key>NSExceptionDomains</key> 은 어떤 이유로 릴리스 버전에 대한 작동하지 않았다 나를 위해 그렇지 않으면
P.Lorand

90

info.plist 파일의 NSAppTransportSecurity 사전에서 NSAllowsArbitraryLoads 키만 YES에 추가해야합니다.

예를 들면

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

여기에 이미지 설명 입력


1
이것은 해결 방법입니다. 진짜 문제는 인 Ashish의 대답 @의 죽음이다
judepereira

45

그것은 나를 위해 작동하지 않았지만 이것은 트릭을했습니다.

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

난 당신이 의미하는 생각 <true/>대신에<YES/>
클리프 턴 관절 순

1
보안의 관점에서 볼 때, 이것은 코드의이 섹션을 검토하고 적절하게 지정된 도메인으로 업데이트하는 사람이 없기 때문에이를 수행하지 않는 방법입니다.
igraczech 2015 년

1
이것은 좋은 습관이 아닙니다. 오히려 특정 도메인을 허용해야합니다.
Ashish

1
저와 같은 다른 초보자를 위해 : 올바른 위치에 놓아야합니다 (마지막에 기존 </dict></plist>태그로
묶음

21

명확히하기 위해 ... 항상 httpS를 사용해야합니다.

그러나 예외를 추가하여 우회 할 수 있습니다.

여기에 이미지 설명 입력


9

Xcode 8.2, iOS 10

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

4

업데이트 답변 (WWDC 2016 이후) :

IOS apps will require secure HTTPS connections by the end of 2016

App Transport Security 또는 ATS는 Apple이 iOS 9에서 도입 한 기능입니다. ATS가 활성화되면 앱이 비보안 HTTP가 아닌 HTTPS 연결을 통해 웹 서비스에 연결됩니다.

그러나 개발자는 여전히 ATS를 끄고 앱이 위 답변에서 언급 한대로 HTTP 연결을 통해 데이터를 전송하도록 허용 할 수 있습니다. 2016 년 말에 Apple은 App Store에 앱을 제출하고자하는 모든 개발자에게 ATS를 의무화 할 것입니다. 링크


올해 말 이후 https를 사용하지 않는 새로운 앱 또는 업데이트 앱은 거부됩니다. 우회가있는 기존 앱은 어떻습니까? (강제 업데이트가 필요합니까?)
Paraneetharan Saravanaperumal

2
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>com</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>net</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>org</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

이렇게하면 .com .net .org에 연결할 수 있습니다.


여러 도메인을 추가하는 방법을 보여주는 예를 들어 주셔서 감사합니다.
AtheistP3ace

2
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>uservoice.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
        </dict>
    </dict>

1

ParaSara의 답변에 대해 좀 더 설명하려면 : 앱 전송 보안 이 필수 될 이를 끄려고하면 앱이 거부 될 수 있습니다.

개발자는 네트워킹 코드가 작동하지 않고 문제를 해결하기 전에 다른 개발을 계속하려는 경우 앱 전송 보안을 끌 수 있습니다. 다섯 명으로 구성된 팀에서 네 명은 다른 일을 계속할 수 있고 한 팀은 모든 문제를 해결할 수 있습니다. 네트워킹 문제가 있고 앱 전송 보안으로 인한 것인지 확인하려는 경우 디버깅 도구로 앱 전송 보안을 끌 수도 있습니다. 아는 즉시 다시 켜야합니다.

당신이 해야 할 솔루션앞으로 하는 https를 지원하지 않는 타사 서버를 사용하지 않는 한 http를 전혀 사용하지 않는 것입니다. 자신의 서버가 https를 지원하지 않는 경우 Apple에 문제가있을 것입니다. 타사 서버를 사용하더라도 Apple이이를 받아 들일 것이라고 장담하지 않습니다.

서버 보안에 대한 다양한 검사와 동일합니다. 어느 시점에서 Apple은 정당한 예외 만 허용합니다.

그러나 대부분 다음 사항을 고려하십시오. 고객의 개인 정보를 위험에 빠뜨리고 있습니다. 그것은 내 책에서 큰 금지입니다. 그러지 마. 코드를 수정하고 안전하지 않은 코드를 실행할 권한을 요청하지 마세요.



1

mac shell command line 에서 다음 명령을 사용합니다.

plutil -insert NSAppTransportSecurity -xml "<array><string> hidden </string></array>" [location of your xcode project]/Info.plist 

이 명령은 필요한 모든 값을 plist 파일에 추가합니다.


1

XCODE 8, Swift 3 : 행을 추가해야합니다. **

"앱 전송 보안 설정"

** info.plist 내부 정보 속성 목록에 있습니다.


0

Xcode 9.2, Swift 4, 이것은 나를 위해 작동합니다.

<key>App Transport Security Settings</key>
<dict>
    <key>Allow Arbitrary Loads</key>
    <true/>
</dict>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.