2015-09-22 21 views
20

Mam app gdzie uderzę żądanie HTTP„Ta aplikacja nie może zapytać o schemacie Cydia” błąd IOS9

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

Teraz, gdy powyższy wniosek został złożony pojawia się następujący błąd i żadne dane nie są odbierane w odpowiedzi. Po 60 s otrzymuję "Time Out error". Działa dobrze na IOS8 i poniżej, ale nie działa dżin IOS9. Czy ktokolwiek mógłby mi powiedzieć, co jeszcze mogę zrobić z tym problemem. Wprowadziłem również następujące zmiany dotyczące ATS dla iOS9 w pliku info.plist, ale nadal napotykam problem. Daj mi znać, jak to naprawić? Z góry dziękuję.

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> 

Błąd

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 
+0

Mam ten problem tylko po uruchomieniu aplikacji na emulatorze. Czy rozwiązałeś to? –

Odpowiedz

10

Ten problem występuje tylko w iOS 9 od firmy Apple wprowadziła pewne zmiany, które mają wpływ schematów URL.

Myślę, że jedną z bibliotek jest sprawdzanie, jeśli działa na jailbroken urządzenia poprzez sprawdzenie, czy można go otworzyć Cydia: // URL ...

„Aż iOS 9, aplikacje zostały mogą wywoływać te metody na dowolnych dowolnych adresach URL. Zaczynając od systemu iOS 9, aplikacje będą musiały zadeklarować, jakie schematy adresów URL będą w stanie sprawdzić i otworzyć w plikach konfiguracyjnych aplikacji, ponieważ są one przesyłane do Apple "

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

+3

Czy Apple odrzuci zgłoszenie, jeśli "cydia" zostanie dodana do białej listy w plist aplikacji? – frankish

+0

@frankish - Czy Apple odrzuci zgłoszenie, jeśli "cydia" zostanie dodana do białej listy w plist aplikacji? – Vijay

21

pierwsze rozwiązanie: - wystarczy dodać kod miech w Info.plist

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

Drugie rozwiązanie: -

dowolną aplikację zbudowaną z SDK 9 potrzeby, aby zapewnić wejście LSApplicationQueriesSchemes w swoim pliku plist, stwierdzającą, który próbuje schematy pytanie.

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

Zakładając dwie aplikacje TestA i TestB. TestB chce zapytać, czy TestA jest zainstalowany. "Testa" określa następujący schemat URL w Info.plist pliku:

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

Druga aplikacja "testb" próbuje dowiedzieć się, czy jest zainstalowany "Testa" przez wywołanie:

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

ale to zwykle zwróci NO w iOS9, ponieważ "TestA" musi zostać dodany do wpisu LSApplicationQueriesSchemes w pliku info.plist TestB. Odbywa się to poprzez dodanie następującego kodu do pliku info.plist testb za:

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

Usuń ramy Splunk Mint jeśli masz go dodać w projekcie, ponieważ Xcode 7 nie obsługuje ramy.

Dodaj również ten klucz do swojego.plist:

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