Как стать автором
Обновить

Комментарии 20

спасибо за статью)

а что за утилита nscurl?
спасибо)
Может кто подскажет — есть ли возможно сделать эту же проверку не с El Capitan (более ранние версии либо не OS X)?
LSApplicationQueriesSchemes бред какой-то. В упор не понимаю, зачем задавать список схем, которые будет открывать твоё приложение.
что бы Apple знали что Вы планируете открывать в своей апе и, если этот список не будет соответствовать логике приложения, не допустить его в стор. *моё личное предположение*
Перед тем как открыть стороннее приложение вы должны убедиться что оно установлено, с помощью вызова метода `canOpenURL:`. В iOS9 этот метод будет всегда возвращать `NO` (плюс сообщение об ошибке в консоль) до тех пор, пока вы не объявите схему стороннего приложения в `LSApplicationQueriesSchemes`. Это сделано для того, чтобы вы не могли узнать какие приложения установлены на девайсе пользователя (так делает твиттер например).
Возможно для того, чтобы приложение не перебирало все возможные схемы (приложения), чтобы понять какие установлены. Таким образом нарушалась конф. инф.
Если читать описание LSApplicationQueriesSchemes, то получается, что разработчик приложения указывает типы ссылок, с которыми может работать приложение (Specifies the URL schemes you want the app to be able to use), тем самым «не позволяет» другим приложением через canOpenURL открывать через своё приложение иные типы ссылок (URL schemes (http, ftp, and so on)), чем это было разработчиком предусмотрено/задумано.

Ссылки
LSApplicationQueriesSchemes — https://developer.apple.com/library/prerelease/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW26

Specifies the URL schemes you want the app to be able to use — https://developer.apple.com/library/prerelease/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW26

URL schemes (http, ftp, and so on) — https://developer.apple.com/library/prerelease/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-102207



сейчас всякие сдк могут трэкать, какие аппы стоят на телефоне по схемам

тупо качают аппы из стора платные-бесплатные, достают список схем из ipa так набивают базу «приложение — его схемы»
затем на девайсах юзера проверяют какие аппы стоят
за несколько секунд можно проверить десятки тысяч апп таким образом + делать это можно не в основном потоке, так что никто ничего не заметит

потом полученный список передают на сервак вместе с advert ID
смотрят какие аппы стоят, определяют интересы юзера и делают более качественный таргетинг по рекламе

К примеру трэкают юзера и у него постоянно новые платные аппы из стора появляются, какой-то направленности, => это нормальный платящий юзер который покупает и не грузится

Вот и сейчас эппл эту лавочку прикрывает практически запретить они не могут поэтому вводят такого рода ограничения
Со сторонними SDK — в точку. Самому же разработчику никто не мешает прописать там бесконечный список приложений и самому отсматривать список установленных приложений.
С большей вероятностью это просто реджектнут, или попросят объяснить в чем необходимость делать столько проверок
максимум 50 схем, который можно проверить. после 50 схемы canOpenURL будет всегда возвращать NO. этож все написано в доках
Как обойтись без этого ключа (NSAllowsArbitraryLoads), если приложение использует webView и заранее не контролируешь какие url будут использованы?
никак не обойтись, только `NSAllowsArbitraryLoads=YES`, чтобы разрешить все коннекты + `NSExceptionDomains`, чтобы обезопасить коннекты к API
Что-то вот этот способ не работает «Отключить PFS для всех поддоменов», а «Отключить ATS» — работает.
Так как Apple расcказывает в сессии про ATS совсем не работает. Что тут не так?
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <false/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>yourdomain.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionAllowInsecureHTTPLoads</key>
                <true/>
            </dict>
        </dict>
    </dict>
А вот это уже работает, хотя я не понимаю принципиальной разницы. Похоже, что в документации Apple есть ошибка ( href=«http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/ ).
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <false/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>yourdomain.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
            </dict>
        </dict>
    </dict>
Вы забыли отметить требования к приложениям для iPad, а именно, требования для поддержки multitasking.
1. Build your app with iOS9 SDK
2. Support all orientations
3. Use Launch Storyboards

Если Ваше приложение по каким-то причинам не может выполнить эти требования, то Apple советуют отказаться от поддержки Slide Over и Split View , заставив его работать только в fullScreen режиме. Для этого нужно добавить в Info.plist ключ UIRequiresFullScreen типа Boolean и установить значение Yes.

Opting out of using Slide Over and Split View renders your app ineligible to appear in the Slide Over area. Nonetheless, your app runs in a multitasking environment. Test your app, on the hardware you want to support, to ensure it behaves well alongside other apps presented in Slide Over and with a Picture in Picture video, from a third app, playing.

Согласно документации .

P.S. Почему-то в документации советуют добавление ключа в Info.plist, хотя для этого есть отдельный checkbox во вкладке General!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий