2015-12-30 11 views
1

Возможно, вы думаете, что это дублированный вопрос, но это не так, я полностью знаю все ответы на SO о canOpenURL и его оговорках на iOS 9, но вот моя проблема:Это приложение не разрешено запрашивать по схеме XYZ: //

Я пытаюсь проверить, установлено ли на моем устройстве определенное приложение (оба разработанные мной). я объявил схему на AppA как:

<key>CFBundleURLTypes</key> 
<array> 
    <dict> 
     <key>CFBundleURLName</key> 
     <string>com.my.company.id</string> 
     <key>CFBundleURLSchemes</key> 
     <array> 
      <string>XYZ</string> 
     </array> 
    </dict> 
</array> 

и на другое приложение, AppB я добавил в info.plist:

<key>LSApplicationQueriesSchemes</key> 
<array> 
<string>XYZ</string> 
</array> 

Теперь в AppB я пытаюсь выяснить, если я AppA установлен так:

 internal static let appAScheme = "XYZ://" 

static func AppAInstalled() -> Bool { 

    let appAURL = NSURL(string: appAScheme) 

    return UIApplication.sharedApplication().canOpenURL(appAURL!) 


} 

Он всегда возвращает

-canOpenURL: failed for URL: "XYZ://" - error: "This app is not allowed to query for scheme XYZ"

Как всегда, если я попытаюсь открыть AppA от AppB, это сработает без проблем!

// Works alright 
UIApplication.sharedApplication().openURL(appAURL!) 

Я не могу понять, почему!

ответ

0

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

Проблема в том, что я пытаюсь разработать структуру для других разработчиков, у меня есть тестовое приложение, которое я использую, чтобы проверить, все ли в порядке с моей картой. Я устанавливал значения LSApplicationQueriesSchemes внутри целевой рамки, а не фактическое тестовое приложение. SO:

You need to set the whitelist values in your app target's info.plist