Respostas:
Você pode continuar usando esquemas de URL ao criar seu aplicativo para iOS 9 e desejar chamar esquemas de URL. Agora, será necessário declará-los no Info.plist dos aplicativos. Existe uma nova chave, LSApplicationQueriesSchemes , e aqui você precisará adicionar a lista de esquemas em que você pode ativar o canOpenURL.
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbauth2</string>
</array>
Se você estiver usando o iOS9, é importante atualizar o arquivo info.plist. Você só precisa executar 3 etapas 1. Vá para info.plist 2. Adicione um campo chamado LSApplicationQueriesSchemes NSArray. 3. Adicione um item do tipo de dados NSString ao nome de fbauth2.
É isso aí. Apenas limpe e corra. o aviso não será exibido novamente.
Quanto à v4.6.0 do SDK do FaceBook, adicione a seguinte chave ao seu arquivo plist:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>
notdizer TODO isso, bom que você apontou-a para fora!
Basta seguir a explicação do Facebook: Preparando seus aplicativos para iOS9 A
Apple menciona isso em: Privacidade e seu App Keynote 2015
Por favor, não adicione isso aos seus CFBundleURLSchemes ... que realmente HIJACK a tentativa de qualquer aplicativo na autenticação do Facebook, fazendo com que um pop-up mostre a caixa de diálogo "O aplicativo X deseja abrir" ...
Você NÃO quer fazer isso.
cf:
https://developers.facebook.com/docs/applinks/ios
https://www.fireeye.com/blog/threat-research/2015/04/url_masques_on_apps.html
https://www.reddit.com/r/workflow/comments/2tlx29/get_url_scheme_of_any_app
Consegui isso ao executar meus testes de Kiwi, pois nosso alvo de teste não tinha acesso ao pacote principal. Então eu tive que adicionar uma condição isRegisteredCanOpenURLSchemenoFBSDKInternalUtility.m
+ (BOOL)isRegisteredCanOpenURLScheme:(NSString *)urlScheme
{
static dispatch_once_t fetchBundleOnce;
static NSArray *schemes = nil;
dispatch_once(&fetchBundleOnce, ^{
schemes = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"LSApplicationQueriesSchemes"];
if (!schemes) { // This is a work around for our Kiwi tests as the Specs target doesn't have access to main bundle
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
NSString *path = [bundle pathForResource:@"Info" ofType:@"plist"];
NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:path];
schemes = [dictionary valueForKey:@"LSApplicationQueriesSchemes"];
}
});
return [schemes containsObject:urlScheme];
}
Para criar seu aplicativo para iOS 9: (para compartilhamento no Facebook)
Info.plistarquivo, adicione outro campo LSApplicationQueriesSchemes em Information Property List e defina seu tipo de dados Arrayou NSArray.Stringou NSString.fbauth2, fbshareextension, fbapicomo valor do item.Siga esta foto :
Write the below code in your info.plist under the **LSApplicationQueriesScheme**
<string>fbapi</string>
<string>fbapi20130214</string>
<string>fbapi20130410</string>
<string>fbapi20130702</string>
<string>fbapi20131010</string>
<string>fbapi20131219</string>
<string>fbapi20140410</string>
<string>fbapi20140116</string>
<string>fbapi20150313</string>
<string>fbapi20150629</string>
<string>fbauth</string>
<string>fbauth2</string>
<string>fb-messenger-api20140430</string>
<string>fb-messenger-platform-20150128</string>
<string>fb-messenger-platform-20150218</string>
<string>fb-messenger-platform-20150305</string>
Você pode tentar com o código abaixo em swift 5.0
extension Bundle {
static let externalURLSchemes: [String] = {
guard let urlTypes = main.infoDictionary?["LSApplicationQueriesSchemes"]
as? [String] else {
return []
}
return urlTypes
}()
}
Você pode ligar usando Bundle
guard Bundle.externalURLSchemes.contains(URLScheme) else {
return
}