"This app is not allowed to query for scheme cydia" IOS9 错误

"This app is not allowed to query for scheme cydia" IOS9 error

我有一个应用程序,我点击了 HTTP 请求

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

现在,每当发出上述请求时,我都会收到以下错误消息,并且在响应中未收到任何数据。 60 秒后我得到“Time Out error”。它在 IOS8 及以下工作正常,但在杜松子酒 IOS9 上不起作用。任何人都可以让我知道我与这个问题还有什么关系。 此外,我在 info.plist 中对 iOS9 的 ATS 进行了以下更改,但仍然面临问题。请让我知道如何解决这个问题?提前致谢。

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>

错误

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

此问题仅在 iOS 9 中发生,因为 Apple 进行了一些影响 URL 方案的更改。

我认为您的某个库正在通过检查是否可以打开 cydia://URL... 运行 来检查您是否在越狱设备上

"Up until iOS 9, apps have been able to call these methods on any arbitrary URLs. Starting on iOS 9, apps will have to declare what URL schemes they would like to be able to check for and open in the configuration files of the app as it is submitted to Apple"

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

第一个方案:- 只需在 info.plist

中添加以下代码
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

第二种方案:-

任何使用 SDK 9 构建的应用程序都需要在其 plist 文件中提供一个 LSApplicationQueriesSchemes 条目,声明它尝试查询的方案。

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

假设有两个应用 TestA 和 TestB。 TestB 想查询是否安装了 TestA。 "TestA" 在其 info.plist 文件中定义了以下 URL 方案:

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

第二个应用程序 "TestB" 尝试通过调用以下方法查明是否安装了 "TestA":

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

但这在 iOS9 中通常 return 否,因为 "TestA" 需要添加到 TestB 的 info.plist 文件中的 LSApplicationQueriesSchemes 条目中。这是通过将以下代码添加到 TestB 的 info.plist 文件来完成的:

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

如果项目中添加了 Splunk Mint 框架,请将其删除,因为 Xcode7 不支持该框架。

同时将此密钥添加到您的 .plist 中:

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