Как я могу добавить NSAppTransportSecurity в мой файл info.plist?

124

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

Кажется, я не могу добавить это в свой info.plist. В этом нет никакой ценности. Я использую бета-версию XCode версии 7.0 (7A121l) и тестирую на iOS9.

Поскольку я не могу конкретно указать, какой URL-адрес мне нужен, как показано в видео, я продолжаю получать сообщение «Безопасность транспорта приложений заблокировала загрузку ресурсов HTTP (http: //) в открытом виде, поскольку она небезопасна. Временные исключения могут быть настроены через приложение Файл Info.plist "ошибки.

Однако, похоже, я не могу его настроить. Любые идеи?

Крис П
источник
У вас действительно больше нет вопросов, вам нужно просто ответить на свой вопрос, а затем принять его после соответствующей задержки.
Norman H
что такое доменное имя? это базовый URL-адрес сервера или любой другой? а где найти доменное имя моего приложения?
Ник
Доменное имя - один из наиболее часто используемых терминов. Ну, это тот, который покупается, а затем после хостинга вы можете использовать его как базовый URL-адрес сервера, который вы используете для API. Нет ничего лучше доменного имени приложения. Таким образом, вы можете использовать доменное имя как то, где написаны API.
Ашиш

Ответы:

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, чтобы не было утечек конфиденциальности.

Ashish
источник
У меня есть XCode 7.2 (7C68), и я изменил (полностью отключив ATS) info.plist моего тестового проекта. Но это не работает. Есть подсказка?
Sanandrea
в общем, это работает ... вы можете вставить сюда свой код, и тогда мы увидим
Ашиш
А также, если у вас есть два или более домани, вы должны добавить. <key>NSAllowsArbitraryLoads</key> <true/><key>NSExceptionDomains</key> В противном случае для меня это не сработало для релизной версии по какой-то причине
П.Лоранд
90

Вам нужно добавить только ключ NSAllowsArbitraryLoads к YES в словаре NSAppTransportSecurity в вашем файле info.plist.

Например,

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

введите описание изображения здесь

Хирен Вару
источник
1
Это обходной путь. Настоящая проблема - смерть с ответом
@Ashish
45

Это не сработало для меня, но это помогло:

<key>NSAppTransportSecurity</key>  
     <dict>  
          <key>NSAllowsArbitraryLoads</key><true/>  
     </dict>  
Бобби
источник
Я думаю , что вы имеете в виду , <true/>а не<YES/>
Клифтон Labrum
1
С точки зрения безопасности это именно тот способ, как НЕ делать этого, потому что никто никогда не будет просматривать этот раздел кода и обновлять его до правильно указанных доменов.
igraczech
1
Это не очень хорошая практика. Скорее мы должны разрешить определенные домены.
Ашиш
1
Для других новичков , как я: Убедитесь в том , чтобы поместить это в правильном положении (в конце концов, заключенный между существующими </dict>и </plist>тегами:
Pwdr
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

Безопасность транспорта приложений или ATS - это функция, которую Apple представила в iOS 9. Когда ATS включен, она заставляет приложение подключаться к веб-службам через соединение HTTPS, а не через незащищенный HTTP.

Однако разработчики по-прежнему могут отключить ATS и разрешить своим приложениям отправлять данные через HTTP-соединение, как указано в ответах выше. В конце 2016 года Apple сделает ATS обязательной для всех разработчиков, которые надеются разместить свои приложения в App Store. ссылка на сайт

Паранитарана Сараванаперумала
источник
после конца этого года новое приложение или приложение обновления без использования https будут отклонены. как насчет существующего приложения с обходом? (нам нужно обновление сил?)
Паранитаран Сараванаперумал
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.

Subirdcom
источник
Спасибо за пример, показывающий, как добавить несколько доменов.
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

Для того, чтобы объяснить немного больше об ответе Парашаров: безопасность App Transport будет становиться обязательной и пытаемся превратить его может получить ваше приложение отвергается.

Как разработчик, вы можете отключить безопасность транспорта приложений, если ваш сетевой код не работает с ним, и вы хотите продолжить разработку, прежде чем исправлять какие-либо проблемы. Скажем, в команде из пяти человек четверо могут продолжать работать над другими делами, а один решает все проблемы. Вы также можете отключить безопасность транспорта приложений в качестве инструмента отладки, если у вас есть проблемы с сетью и вы хотите проверить, не вызваны ли они безопасностью транспорта приложений. Как только вы узнаете, вы должны немедленно включить его снова.

Решение, которое вы должны использовать в будущем, заключается в том, чтобы вообще не использовать http, если вы не используете сторонний сервер, который не поддерживает https. Если ваш собственный сервер не поддерживает https, у Apple с этим возникнут проблемы. Я бы не стал ставить на то, что Apple примет это даже со сторонними серверами.

То же самое с различными проверками безопасности сервера. В какой-то момент Apple будет принимать только оправданные исключения.

Но в основном учтите следующее: вы ставите под угрозу конфиденциальность своих клиентов. В моей книге это большой запрет. Не делай этого. Исправьте свой код, не спрашивайте разрешения на запуск небезопасного кода.

gnasher729
источник
1

В командной строке оболочки Mac используйте следующую команду:

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>
hungmi
источник