Novos avisos no iOS 9: "todo o código de bit será descartado"

387

Eu tenho este novo aviso sobre o Google Framework no meu aplicativo:

(nulo): URGENTE: todo o código de bit será eliminado porque '/ Users / meunome / Biblioteca / Mobile Documents / com ~ apple ~ CloudDocs / nome da pasta / appname / GoogleMobileAds.framework / GoogleMobileAds (GADSlot + AdEvents.o)' foi criado sem código de bit . Você deve reconstruí-lo com o código de bits ativado (configuração ENABLE_BITCODE do Xcode), obter uma biblioteca atualizada do fornecedor ou desativar o código de bit para este destino. Nota: Este será um erro no futuro.

O Xcode 7 está me dando cerca de 204 avisos sobre esse mesmo conceito, e eu não pude contornar isso. Também tenho um problema ao acessar a rede do meu aplicativo. Este é o erro da área de depuração:

-canOpenURL: falha no URL: "kindle: // home" - erro: "Este aplicativo não tem permissão para consultar o esquema kindle"

Todos esses problemas não estavam presentes no iOS 8.

C.Farrugia
fonte
Então você ativou o código de bit no seu destino do Xcode?
Droppy
Desculpe, eu sou novo nisso, você pode me dizer como, por favor?
C.Farrugia
Eu nunca fiz isso, mas parece ser algo que você deve definir deliberadamente. Você parece ter feito isso.
Droppy
4
@Droppy AFAIK, a configuração está ativada por padrão, mas você pode desativá-la a qualquer momento nas configurações do seu projeto.
TEM
Eu os desliguei e todos os avisos foram embora. Pesquisei um pouco e o Google precisa atualizar sua estrutura para que esse erro seja desativado, até agora apenas desativá-lo funcionará. Alguém sabe sobre o -canOpenURL: falha no URL: "kindle: // home" - erro: "Este aplicativo não tem permissão para consultar o esquema kindle"? Isso não tenho idéia do que o Xcode está falando.
C.Farrugia

Respostas:

1023

Sua biblioteca foi compilada sem código de bits, mas a opção de código de bit está ativada nas configurações do seu projeto. Diga NOa Enable Bitcodeem suas configurações de compilação-alvo e as configurações de compilação da biblioteca para remover os avisos.

Para aqueles que se perguntam se é necessário ativar o código de bits:

Para aplicativos iOS, o código de bits é o padrão, mas opcional. Para aplicativos watchOS e tvOS, é necessário um código de bits. Se você fornecer código de bits, todos os aplicativos e estruturas no pacote de aplicativos (todos os destinos no projeto) precisarão incluir código de bits.

https://help.apple.com/xcode/mac/current/#/devbbdc5ce4f

Zia
fonte
@Centurion a analítica Google anteriores lib é obsoleto e não compilam com xcode 7 / ios9 quer
zonabi
11
@goelv sim, você poderá enviar aplicativos com o código de bit desativado. é opcional agora. pode ser necessário no futuro.
Zonabi 17/09/2015
2
NÃO funcionou para mim no arquivamento. O projeto anterior ao XCODE 7 estava funcionando bem, agora não é possível ARQUIVO, mesmo com Ativar código de bits definido como NÃO. Isso é para a biblioteca da AWS.
ort11
11
Ainda obtendo o erro após desativar o Bitcode em todos os destinos.
datWooWoo
110

Após o Xcode 7, a opção de código de bit será ativada por padrão. Se sua biblioteca foi compilada sem código de bits, mas a opção de código de bit está ativada nas configurações do seu projeto, você pode:

  1. Atualize sua biblioteca com código de bits,
  2. Diga NÃO para ativar o código de bit nas configurações de compilação de destino

Digite a descrição da imagem aqui

E as Configurações de compilação da biblioteca para remover os avisos.

Para obter mais informações, acesse a documentação do código de bits na biblioteca do desenvolvedor .

E WWDC 2015, Sessão 102: "Plataformas Estado da União"

Digite a descrição da imagem aqui

ElonChan
fonte
42

No meu caso, para evitar esse problema:

  1. Certifique-se de estar lidando com o Xcode 7 , NÃO com versões inferiores. Na versão inferior, esse sinalizador não existe.

  2. Configuração: Projeto> Configurações de Compilação> Todos> Opções de Compilação> Habilitar Código de Bit = NÃO

insira a descrição da imagem aqui

Javier Calatrava Llavería
fonte
2
Portanto, você precisará recompilar as bibliotecas incluídas no seu projeto com o XCode7 e com o EnableBitcode definido como YES. Bastante complicado se você estiver trabalhando com bibliotecas .a de terceiros.
Javier Calatrava Llavería
15

O método canOpenUrlestá no iOS 9 (devido à privacidade) alterado e não é mais livre para usar. Seu provedor de banners verifica aplicativos instalados para que eles não mostrem banners de um aplicativo que já esteja instalado.

Isso fornece todas as instruções de log como

-canOpenURL: falha no URL: "kindle: // home" - erro: "Este aplicativo não tem permissão para consultar o esquema kindle"

Os provedores devem atualizar sua lógica para isso.

Se você precisar consultar aplicativos instalados / esquemas disponíveis, precisará adicioná-los ao seu info.plistarquivo.

Adicione a chave 'LSApplicationQueriesSchemes' ao seu plist como uma matriz. Em seguida, adicione strings nessa matriz como 'kindle'.

Claro que isso não é realmente uma opção para os anúncios em banner (já que são dinâmicos), mas você ainda pode consultar seus próprios aplicativos ou outros aplicativos específicos, como o Twitter e o Facebook.

Documentação do método canOpenUrl: canOpenUrl:

Documentação sobre a chave LSApplicationQueriesSchemes

Saren Inden
fonte
Supondo que uma biblioteca estática verifique o aprofundamento de um aplicativo pai, como usar a exceção 'LSApplicationQueriesSchemes' na biblioteca estática? Normalmente você não tem um Info.plist para isso.
loretoparisi 15/09/2015
Não tenho muita certeza disso, se uma biblioteca precisar verificar aplicativos fora de seu pai, o pai deve definir os URLs em info.plist (portanto, documente-o para a estrutura). Se canOpenUrl também retorna nenhuma vai o aplicativo pai pode lidar com isso, que você deve (i assumir) também incluem aqueles no info.plist
Saren Inden
13

Se você estiver usando o CocoaPods e desejar desativar o Bitcode para todas as bibliotecas, use o seguinte comando no Podfile

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ENABLE_BITCODE'] = 'NO'
        end
    end
end
Eike
fonte
8

Isenção de responsabilidade: destina-se àqueles que oferecem suporte a um fluxo de trabalho de integração contínua que exige um processo automatizado. Caso contrário, use o Xcode como descrito na resposta de Javier .

Isso funcionou para mim definir ENABLE_BITCODE = NOatravés da linha de comando:

find . -name *project.pbxproj | xargs sed -i -e 's/\(GCC_VERSION = "";\)/\1\ ENABLE_BITCODE = NO;/g'

Observe que é provável que isso seja instável nas versões do Xcode. Foi testado com o Xcode 7.0.1 e como parte de um projeto do Cordova 4.0.

miraculixx
fonte
-2

Esse problema foi corrigido recentemente (novembro de 2010) pelo Google. Consulte https://code.google.com/p/analytics-issues/issues/detail?id=671 . Mas esteja ciente de que, como uma boa solução, traz mais bugs :)

Você também precisará seguir o método de inicialização listado aqui: https://developers.google.com/analytics/devguides/collection/ios/v2 .

As instruções mais recentes causam dor de cabeça porque faz referência a utilitários não incluídos no pod. Abaixo falhará com o cocoapod

// Configure tracker from GoogleService-Info.plist.
NSError *configureError;
[[GGLContext sharedInstance] configureWithError:&configureError];
NSAssert(!configureError, @"Error configuring Google services: %@", configureError);
user1119517
fonte