React-native-onesignal: Falha de compilação de OneSignal OneSignalNotificationExtension no Xcode 12 relacionada a problemas de cocoapods / arquitetura / simulador

Criado em 31 ago. 2020  ·  32Comentários  ·  Fonte: OneSignal/react-native-onesignal

Descrição:

Acabei de atualizar do Xcode 10 para o Xcode 12, antes na v10 este projeto foi construído e executado com sucesso.

Falha na compilação do destino OneSignalNotificationExtension:

Undefined symbol: _swift_getObjCClassMetadata

Undefined symbol: type metadata accessor for Foundation.UUID

Undefined symbol: Swift._bridgeAnythingToObjectiveC<A>(A) -> Swift.AnyObject

Undefined symbol: protocol descriptor for Swift.ExpressibleByFloatLiteral

Undefined symbol: associated conformance descriptor for Swift.ExpressibleByFloatLiteral.Swift.ExpressibleByFloatLiteral.FloatLiteralType: Swift._ExpressibleByBuiltinFloatLiteral

Undefined symbol: associated type descriptor for Swift.ExpressibleByFloatLiteral.FloatLiteralType

Undefined symbol: protocol descriptor for Swift.ExpressibleByIntegerLiteral

Undefined symbol: associated type descriptor for Swift.ExpressibleByIntegerLiteral.IntegerLiteralType

Undefined symbol: method descriptor for Swift.ExpressibleByIntegerLiteral.init(integerLiteral: A.IntegerLiteralType) -> A

Undefined symbol: static Foundation.UUID._unconditionallyBridgeFromObjectiveC(__C.NSUUID?) -> Foundation.UUID

Undefined symbol: value witness table for Builtin.Int32

Undefined symbol: protocol witness table for Swift.Int : Swift._ExpressibleByBuiltinIntegerLiteral in Swift


e mais 100 erros

Não sou tão bom no Xcode e no Mac, então lamento se não for claro ou enganoso.

Obrigado

Ambiente

reagente nativo 0.63.2
Onesinal-reagente-nativo 3.9.1
Xcode 12
Instalado via npm e vinculado a pods

Etapas para reproduzir o problema:

  • Construir

  • Help Wanted

    Comentários muito úteis

    Também estou tendo alguns problemas com o Xcode 12

    Posso construir o projeto com sucesso no Xcode 11. No entanto, assim que eu abro o Xcode12 e construo o projeto, recebo o seguinte erro:

    ▸ Linking OneSignalNotificationServiceExtension
    
    ❌  clang: error: no such file or directory: '/Users/carloscuesta/project-folder/ios/build/project/Build/Products/Debug-iphonesimulator/libRCTOneSignal.a'
    

    Isso não parece um erro do lado do OneSignal. Parece que há algo estranho com cache ou algo parecido,
    coisas que tentei:

    • Excluir dados derivados do Xcode - rm -rf ~/Library/Developer/Xcode/DerivedData/
    • Limpe o react-native, o yarn cache e reinstale as dependências.
    • Reinicializar dados e conteúdos do simulador
    • Reiniciou o computador

    Não sei o que mais devo tentar, diria que tudo está vinculado corretamente, pois o aplicativo está funcionando bem na produção e a compilação funciona com o Xcode 11.

    Eu tenho a biblioteca vinculada manualmente usando o guia OneSignal, alguma ideia de como consertar isso? 🙏🏼

    Normalmente, quando eu recebia esse problema, ele era resolvido com a limpeza de DerivedData mas não consigo me livrar do erro 😞

    Todos 32 comentários

    Olá,
    Qual é a aparência do seu arquivo NotificationService.swift ? Deve ser algo como:

    import UserNotifications
    
    import OneSignal
    
    class NotificationService: UNNotificationServiceExtension {
    
        var contentHandler: ((UNNotificationContent) -> Void)?
        var receivedRequest: UNNotificationRequest!
        var bestAttemptContent: UNMutableNotificationContent?
    
        override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: <strong i="8">@escaping</strong> (UNNotificationContent) -> Void) {
            self.receivedRequest = request;
            self.contentHandler = contentHandler
            bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
    
            if let bestAttemptContent = bestAttemptContent {
                OneSignal.didReceiveNotificationExtensionRequest(self.receivedRequest, with: self.bestAttemptContent)
                contentHandler(bestAttemptContent)
            }
        }
    
        override func serviceExtensionTimeWillExpire() {
            // Called just before the extension will be terminated by the system.
            // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
            if let contentHandler = contentHandler, let bestAttemptContent =  bestAttemptContent {
                OneSignal.serviceExtensionTimeWillExpireRequest(self.receivedRequest, with: self.bestAttemptContent)
                contentHandler(bestAttemptContent)
            }
        }
    
    }
    

    Dê uma olhada na etapa 4.3.6 nas instruções de configuração e continue a partir daí para garantir que configurou tudo corretamente.

    Espero que isto ajude. Saúde

    Obrigado pelo feedback.

    Estou usando o arquivo Objective-C. Devo usar o rápido?

    Achei que você estava usando o Swift. Se você estiver usando Obj-C, use o Objective C. Aproveitar!

    Também estou tendo alguns problemas com o Xcode 12

    Posso construir o projeto com sucesso no Xcode 11. No entanto, assim que eu abro o Xcode12 e construo o projeto, recebo o seguinte erro:

    ▸ Linking OneSignalNotificationServiceExtension
    
    ❌  clang: error: no such file or directory: '/Users/carloscuesta/project-folder/ios/build/project/Build/Products/Debug-iphonesimulator/libRCTOneSignal.a'
    

    Isso não parece um erro do lado do OneSignal. Parece que há algo estranho com cache ou algo parecido,
    coisas que tentei:

    • Excluir dados derivados do Xcode - rm -rf ~/Library/Developer/Xcode/DerivedData/
    • Limpe o react-native, o yarn cache e reinstale as dependências.
    • Reinicializar dados e conteúdos do simulador
    • Reiniciou o computador

    Não sei o que mais devo tentar, diria que tudo está vinculado corretamente, pois o aplicativo está funcionando bem na produção e a compilação funciona com o Xcode 11.

    Eu tenho a biblioteca vinculada manualmente usando o guia OneSignal, alguma ideia de como consertar isso? 🙏🏼

    Normalmente, quando eu recebia esse problema, ele era resolvido com a limpeza de DerivedData mas não consigo me livrar do erro 😞

    Eu descobri algo estranho,

    Se tento construir o aplicativo com o Xcode 12, sempre falha. No entanto, se eu construir o aplicativo primeiro com o Xcode 11 e depois abrir o Xcode 12 e construir o aplicativo, ele funcionará 🤯

    No entanto, assim que eu limpo o build e tento reconstruir novamente com o Xcode 12, ele começa a falhar com o mesmo erro novamente 😖

    Mesmo erro aqui com com Xcode 12 e onesignal-react-native 3.9.1 :-(
    Os projetos estavam funcionando antes da atualização.

    Mesmo erro.
    Onesignal SDK -> 2.15.2
    sinal-reativo-nativo -> 3.9.1
    Funcionou bem no xCode 11.

    Olá,
    Isso é estranho @carloscuesta . Você já tentou ver uma diferença entre o projeto no Xcode 11 vs 12? Talvez o 12 esteja alterando algumas configurações de construção importantes por algum motivo.

    Tive um problema semelhante quando atualizei meu Xcode de 11 para 12 ..

    Ei @rgomezp

    Posso confirmar que não há alterações do Xcode 11 para o Xcode 12. O git status do repo não foi modificado.

    No entanto, ainda consigo reproduzir a versão que falhou. E sempre que eu construo no Xcode 11 e Xcode 12 depois de trabalhar pela primeira vez 😕

    Screenshot 2020-09-25 at 12 12 40

    Screenshot 2020-09-25 at 12 18 39

    Olá,
    Acredito que isso esteja relacionado ao problema contínuo dos aqui .

    Isso pode funcionar para adicionar x86_64 a VALID_ARCH se for necessário executar o aplicativo no simulador, por exemplo, x86_64 arm64 arm64e

    Esse estouro de pilha pode conter a solução de que você precisa.

    Ei! Obrigado pela sua ajuda @rgomezp

    Vou te contar os resultados dos meus experimentos!

    Adicionar arquiteturas excluídas

    Apresentei arm64 conforme sugerido na postagem StackOverflow em Project > Architectures > Excluded Architectures .

    Screenshot 2020-09-28 at 13 40 32

    Isso não resolveu o problema. Eu tenho o mesmo erro ao reclamar de x86_64 .

    Screenshot 2020-09-28 at 13 39 50

    Então fui em frente e adicionei x86_64 a Excluded Architectures .

    Screenshot 2020-09-28 at 13 41 12

    Após a seguinte alteração, o seguinte erro parece ter sido corrigido. No entanto, tenho outro erro em relação a OneSignalNotificationServiceExtension.appex .

    Embedded binary is not signed with the same certificate as the parent app. Verify the embedded binary target's code sign settings match the parent app's.
    

    No entanto, eu não mudei nada relacionado com CodeSign 🤔 - A construção do Xcode11 funciona bem

    Screenshot 2020-09-28 at 11 36 29

    Depois de limpar a compilação DerivedData e reinicie o computador. Estou vendo outro erro: Link app (i386) .

    Se eu abrir o erro, vejo que muitos arquivos não foram encontrados na pasta DerivedData . Nenhum deles está relacionado com OneSignal. No entanto, não sei por que isso está falhando se funciona corretamente no Xcode 11. Estou tão confuso agora 😅

    Use VALID_ARCHS

    Isso também não funcionou para mim. Eu também li que isso está obsoleto no Xcode 12 e Excluded Architectures deve ser usado em seu lugar.

    Eu não tinha User-Defined Setting para isso. Já que não estou usando CocoaPods e tenho o módulo vinculado manualmente.

    Achei um link interessante que fala sobre o erro "mesmo certificado" com o Xcode após excluir arm64 .

    Ele diz que as extensões não devem excluir essas arquiteturas . Mesmo erro, infelizmente :(

    Estou sem ideias para hoje 😅

    Posso confirmar que construir e executar o aplicativo em um dispositivo real não gera nenhum erro sem as modificações de "Arquiteturas excluídas".

    Então é algo 100% relacionado com a arquitetura do próprio simulador

    Screenshot 2020-09-29 at 09 17 24

    Olá Carlos,
    Obrigado pela investigação detalhada. Para visibilidade, também encontrei este thread de estouro de pilha .

    Para resumir o problema @carloscuesta ,

    1. O erro Embedded binary is not signed with the same certificate as the parent app... é resolvido adicionando arm64 e x86_64 às arquiteturas excluídas , de acordo com a orientação de uso sobre ARCHS VÁLIDOS.
    2. A solução alternativa postada no repositório Cocoapods não funcionou para você porque a biblioteca foi vinculada manualmente.

    Carlos, neste ponto não tenho certeza do que mais pode ser feito, pois isso parece um problema não-OneSignal.

    Outras pessoas podem confirmar se a solução alternativa do Cocoapods vinculada acima funciona para eles se eles _estiverem_ usando Cocoapods?

    Ei @rgomezp

    Obrigado por toda a ajuda que você forneceu.

    Carlos, neste ponto não tenho certeza do que mais pode ser feito, pois isso parece um problema não-OneSignal.

    Não tenho 100% de certeza com essa declaração, pois se eu desvincular toda a biblioteca OneSignal e remover o OneSignalNotificationServiceExtension o projeto se baseia no Xcode12. Não sei de onde vem o erro com certeza e talvez seja um caso específico, já que a biblioteca está vinculada manualmente. E não preciso mexer em nada relacionado a arquiteturas

    Mas sim, vamos ver se podemos encontrar outros casos de uso 👍🏼

    Parece que o Xcode 12 foi construído para o simulador com arquitetura - arm64, i386, x86_64 .

    Então, minha solução alternativa é

    1. Adicionar arm64 na Arquiteturas excluídas de construção do projeto
    2. Remova VALID ARCHS da configuração de construção do subprojeto RCTOneSignal.
      (VAILD ARCHS foi movido para Definido pelo usuário da configuração de construção no Xcode 12)

    Funciona bem no meu projeto.

    @stanleyctcl Sua solução funciona! : tada:

    Eu não vi o destino RCTOneSignal dentro da biblioteca RCTOneSignal tinha VALID_ARCHS definido como uma configuração User-Defined . Isso é algo que devemos remover do lado da Biblioteca! Vou fazer um PR para corrigir o problema!

    Screenshot 2020-10-07 at 10 22 44

    É por isso que todas as minhas alterações não funcionaram. Porque a biblioteca OneSignal tem essa configuração do usuário definida.

    Ei, obrigado @stanleyctcl
    Sua solução funcionou para mim.

    Anteriormente, meu modo de versão no build para iOS Simulator falhou. Recebi o erro building for iOS Simulator, but linking in object file built for iOS, file onesignal . Mas posso construir o modo de liberação no dispositivo real sem que nenhum erro apareça. A solução acima resolveu esse problema.

    Infelizmente, depois de implementar sua solução, não consegui arquivar meu aplicativo. Eu tenho esse erro.

    No architectures to compile for (ARCHS=arm64, VALID_ARCHS=arm64 arm64e armv7 armv7s, EXCLUDED_ARCHS=(
        arm64
    ))
    

    qualquer pista?

    @abdullahizzuddiin Certifique-se de que você

    Ah, que pena. Eu esqueci o pequeno detalhe. Obrigado @carloscuesta por me apontar. Acontece que eu só preciso definir Excluded Architecture sem remover VALID ARCHS da configuração de construção do subprojeto RCTOneSignal . 🤔

    = = =
    Eu acho que tenho erro de diferença. Eu arquivei com sucesso. Mas, depois de escolher "Gerenciar automaticamente a assinatura", recebo este erro
    image

    Posso implantar um aplicativo na Appstore sem nenhum problema na versão anterior do Xcode. Anteriormente, eu usei 11.7. Agora, usei o 12.0 e recebi instantaneamente este erro sem nenhuma alteração no meu repo.

    //package.json
    react-native-onesignal: 3.8.1
    
    //Podfile
    pod 'OneSignal', '>= 2.14.2', '< 3.0'
    ...
    target 'OneSignalNotificationServiceExtension' do
      pod 'OneSignal', '>= 2.14.2', '< 3.0'
    end
    

    Qualquer pista? ou devo criar um problema separado?

    ps:
    Também enviei meu problema para o Apple Developer Forum, apenas para o caso de não ser o problema desta biblioteca.

    Estou usando o react-native-onesignal 3.9.1 na versão do react nativo 0.60.0 ... Sou capaz de resolver esse problema incluindo x86_64 nas configurações definidas pelo usuário (VALID_ARCHS)

    Olá a todos,
    Acho que esse problema pode ser fechado com segurança, pois não parece ser um problema do OneSignal.


    @abdullahizzuddiin
    (Problema diferente, considere abrir um tíquete separado)

    Para visibilidade, postarei uma das respostas no tópico do

    PROBLEMA:
    Falha ao tentar executar a compilação no dispositivo real, embora a compilação seja bem-sucedida no meu MacBook Pro.
    O seguinte erro ocorreu com esta mensagem:
    O perfil de provisionamento "Perfil de provisionamento da equipe iOS: com.xxxxxxxxxxxx.Name of -App" não inclui o dispositivo atualmente selecionado "iPhone" (identificador 0000xxxx-000xxxxxxxxxxxxxxxxxx).

    Manual online de ajuda do Xcode

    Preferências de contas
    Use as preferências de contas para gerenciar ativos de conta de desenvolvedor (certificados de assinatura e perfis de provisionamento), adicionar repositórios e adicionar servidores.

    Para abrir as preferências de contas, escolha Xcode> Preferências e clique em Contas.
    I Em seguida, cliquei em, gerenciar certificados e adicionei um novo certificado clicando no símbolo de mais.

    PROBLEMA RESOLVIDO:
    Em seguida, executei minha compilação e meu erro de assinatura foi limpo, o aplicativo foi instalado no meu iPhone 11 Pro Max.
    Esperançosamente, esta solução ajuda você.

    Ei @rgomezp

    Esse problema era uma mistura de problemas diferentes. Aquele que você está apontando não tem nada a ver com o problema do Simulador em si, que tem a ver com RCTOneSignal porque o uso de VALID_ARCHS

    Não sei se devemos encerrar este problema completamente até que o do simulador seja resolvido.

    Oi @rgomezp

    Segui a sugestão do Apple Dev Forum que você extraiu acima. Mas isso não resolveu meu problema.

    Temporariamente, fiz o downgrade da versão do Xcode para 11.7 e consegui construir, executar e arquivar com sucesso. Mas, eu ainda posso fazer isso no Xcode 12.0

    Vou deixar isso aberto para ser fechado automaticamente até # 1053

    Parece que o Xcode 12 foi construído para o simulador com arquitetura - arm64, i386, x86_64 .

    Então, minha solução alternativa é

    1. Add **arm64** in  **Excluded Architectures** of Project Build setting
    
    2. Remove **VALID ARCHS** from RCTOneSignal subproject build setting.
       **(VAILD ARCHS was moved to User-Defined of build setting in Xcode 12)**
    

    Funciona bem no meu projeto.

    Isso funciona para mim. Lembre-se de excluí-lo. Não apenas deixe em branco "", pois não funcionaria

    editar:
    Meu projeto usa link manual One signal 3.2.12.
    reagente nativo 0,59,9
    xcode 12

    Eu tentei a solução stanleyctcl que funciona no simulador para depuração e versão de compilação. Mas, ao construir para dispositivo / arquivo genérico, enfrentei o mesmo problema que abdullahizzuddiin

    Nenhuma arquitetura para compilar (ARCHS = arm64, VALID_ARCHS = arm64 arm64e armv7 armv7s, EXCLUDED_ARCHS = (
    arm64
    ))

    A solução que funcionou para mim é
    Aplicar somente isto

    2. Remove **VALID ARCHS** from RCTOneSignal subproject build setting.
       **(VAILD ARCHS was moved to User-Defined of build setting in Xcode 12)**
    

    Isso deve fazer o Archive funcionar, mas a liberação do simulador falhará. Para consertar isso. você precisa ir para Todos os alvos do projeto e alvos do pod -> Configurações de construção -> Arquitetura -> Construir apenas arquitetura ativa -> Definir 'Sim' para o modo de liberação

    Explicação e etapas em: https://stackoverflow.com/a/64139830/9232424.
    Leia mais: https://medium.com/macoclock/deep-drive-xcode-build-settings-827c3ce4811c.

    Ah, que pena. Eu esqueci o pequeno detalhe. Obrigado @carloscuesta por me apontar. Acontece que eu só preciso definir Excluded Architecture sem remover VALID ARCHS da configuração de construção do subprojeto RCTOneSignal . 🤔

    = = =
    Eu acho que tenho erro de diferença. Eu arquivei com sucesso. Mas, depois de escolher "Gerenciar automaticamente a assinatura", recebo este erro
    image

    Posso implantar um aplicativo na Appstore sem nenhum problema na versão anterior do Xcode. Anteriormente, eu usei 11.7. Agora, usei o 12.0 e recebi instantaneamente este erro sem nenhuma alteração no meu repo.

    //package.json
    react-native-onesignal: 3.8.1
    
    //Podfile
    pod 'OneSignal', '>= 2.14.2', '< 3.0'
    ...
    target 'OneSignalNotificationServiceExtension' do
      pod 'OneSignal', '>= 2.14.2', '< 3.0'
    end
    

    Qualquer pista? ou devo criar um problema separado?

    ps:
    Também enviei meu problema para o Apple Developer Forum, apenas para o caso de não ser o problema desta biblioteca.

    O mesmo problema aconteceu comigo no xcode 12, você resolveu o problema? @abdullahizzuddiin ou u apenas downgrade o xcode para 11.7

    obrigada

    Para rodar no simulador, tenho que adicionar " arm64 " em " Arquiteturas excluídas ".
    Mas, para executar o aplicativo em um dispositivo real, tenho que deixá-lo sem as modificações de " Arquiteturas excluídas ".
    Portanto, tenho que fazer essa alteração toda vez que corro.

    Eu espero que isso ajude.

    O mesmo problema aqui, voltou.

    Mesmo

    Mesmo

    Esta página foi útil?
    0 / 5 - 0 avaliações