ios ios9 url-scheme app-transport-security

"Esta aplicación no tiene permiso para consultar el esquema de Cydia" Error de IOS9



url-scheme app-transport-security (3)

Tengo una aplicación donde encuentro una solicitud HTTP

<NSURLConnection: 0x12d755110> { request: <NSMutableURLRequest: 0x12d754e10> { URL: http://XX.XX.XX.XXX/webService/dataService.svc/SearchLocation } }

Ahora, cuando se realiza la solicitud anterior, aparece el siguiente error y no se reciben datos en la respuesta. Después de 60 seg, aparece " Time Out error ". Está funcionando bien en IOS8 e inferior, pero no funciona con la ginebra IOS9. ¿Podría alguien decirme qué más tengo que hacer con este problema? Además, he realizado los siguientes cambios con respecto a ATS para iOS9 en info.plist, pero aún enfrentando el problema. ¿Por favor hazme saber como arreglar esto? Gracias por adelantado.

Info.plist

<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.1</string> </dict>

Error

2015-09-22 22:19:58.333 App[751:139449] regionDidChangeAnimated>>>>>>>>>>>>>>>>>: = 40.844278,-74.130561 2015-09-22 22:19:58.344 App[751:139449] Reachability Flag Status: -R ------- networkStatusForFlags 2015-09-22 22:19:58.350 App[751:139449] request:< SearchLocation ><DeviceKeyUDID>My Device UDID</DeviceKeyUDID><SecretKey>SecretKey/SecretKey><ListingType>LOCATION</ListingType><PageIndex>1</PageIndex><MaxNoOfRecords>20</MaxNoOfRecords><Latitude>40.844276</Latitude><Longitude>-74.130562</Longitude><Distance>25</Distance><Address></Address><SearchText></SearchText></SearchLocation > 2015-09-22 22:19:58.357 App[751:139449] -canOpenURL: failed for URL: "cydia://package/com.fake.package" - error: "This app is not allowed to query for scheme cydia" 2015-09-22 22:19:58.945 App[751:139449] theXML contains: 2015-09-22 22:19:58.959 App[751:139449] refreshLocationList maxRecordsSelected:::::::::::::20 2015-09-22 22:19:58.960 App[751:139449] refreshLocationList maxNumOfRecords:::::::::::::20 2015-09-22 22:19:58.960 App[751:139449] refreshLocationList LocationCount::::::::::::::0 2015-09-22 22:19:58.960 App[751:139449] isTempleMaxRecordChanged :::::::::::::0


Elimine el marco Splunk Mint si lo ha agregado en el proyecto porque Xcode 7 no es compatible con el marco.

También agregue esta clave a su .plist:

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


Este problema solo ocurre en iOS 9 desde que Apple realizó algunos cambios que impactaron los esquemas de URL.

Creo que una de tus bibliotecas está comprobando si estás ejecutando en un dispositivo con jailbreak comprobando si puede abrir el directorio cydia: // URL ...

"Hasta que iOS 9, las aplicaciones han podido llamar a estos métodos en cualquier URL arbitraria. A partir de iOS 9, las aplicaciones deberán declarar qué esquemas de URL les gustaría poder verificar y abrir en los archivos de configuración de la aplicación. Como se presenta a Apple "

Enlace: http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes


Primera solución: simplemente agregue el código de abajo en su info.plist

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

Segunda solución: -

Cualquier aplicación creada con SDK 9 debe proporcionar una entrada LSApplicationQueriesSchemes en su archivo plist, declarando qué esquemas intenta consultar.

<key>LSApplicationQueriesSchemes</key> <array> <string>urlscheme</string> <string>urlscheme2</string> <string>urlscheme3</string> <string>urlscheme4</string> </array>

Suponiendo dos aplicaciones TestA y TestB. TestB quiere consultar si TestA está instalado. "TestA" define el siguiente esquema de URL en su archivo info.plist:

<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>testA</string> </array> </dict> </array>

La segunda aplicación "TestB" intenta averiguar si "TestA" está instalado llamando a:

[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"TestA://"]];

Pero esto normalmente devolverá NO en iOS9 porque se debe agregar "TestA" a la entrada LSApplicationQueriesSchemes en el archivo info.plist de TestB. Esto se hace agregando el siguiente código al archivo info.plist de TestB:

<key>LSApplicationQueriesSchemes</key> <array> <string>TestA</string> </array>