React-native-onesignal: Não foi possível encontrar libRCTOneSignal.a

Criado em 16 ago. 2018  ·  26Comentários  ·  Fonte: OneSignal/react-native-onesignal

Descrição:
Segui as instruções para React Native SDK daqui - https://documentation.onesignal.com/docs/react-native-sdk-setup

Eu adicionei o pacote npm, executei react-native link e também pod install . Tudo correu bem.

Em seguida, prossigo para a criação da extensão de notificação. Quando chego à parte em que sou instruído a adicionar libRCTOneSignal.a na configuração Link Binary with Libararies , não consigo encontrá-lo na lista que o Xcode mostra. Aqui está tudo o que vejo quando procuro por um sinal:

screen shot 2018-08-16 at 12 55 02 pm

Aqui está minha configuração de páginas de pesquisa de cabeçalho:
screen shot 2018-08-16 at 12 55 26 pm

Agora tentei adicionar libreact-native-onesignal.a , mas ao construir recebo este erro de vinculação:

ld: library not found for -lreact-native-onesignal
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Ambiente

  1. react-native-one-signal - 3.2.6
  2. RN - 0.55.4
  3. Xcode - 9.2
Help Wanted dependencies iOS

Comentários muito úteis

Acontece que react-native link não funcionou corretamente como de costume: DI apenas tinha que adicionar manualmente o projeto RCTOneSignal em Libraries e então fui capaz de adicionar libRCTOneSignal.a

Acho que seria bom se vocês pudessem adicionar as instruções para vinculação manual além de react-native link para que as pessoas possam verificar se o link funcionou corretamente :)

Todos 26 comentários

Acontece que react-native link não funcionou corretamente como de costume: DI apenas tinha que adicionar manualmente o projeto RCTOneSignal em Libraries e então fui capaz de adicionar libRCTOneSignal.a

Acho que seria bom se vocês pudessem adicionar as instruções para vinculação manual além de react-native link para que as pessoas possam verificar se o link funcionou corretamente :)

como você adicionou isso?

Também tentando descobrir exatamente como adicionar o projeto RCTOneSignal às bibliotecas

@nickyhajal @ abdul-elah-js @steverob Alguém pode explicar como adicionar manualmente o projeto RCTOneSignal em Libraries ?

Esse problema também deve estar na documentação.

@pacozaa você pode seguir as instruções do Facebook aqui: https://facebook.github.io/react-native/docs/linking-libraries-ios

Abra node_modules / react-native-onesignal / ios e arraste e solte RCTOneSignal.xcodeproj para a pasta do projeto XCode Bibliotecas, então libRCTOneSignal.a aparecerá na pesquisa.

screenshot at nov 30 16-21-30

Eu atualizei a documentação na configuração do React-Native para refletir isso. Obrigado por trazer isso à tona e ajudar a melhorar nossa documentação!

Nenhuma pasta Bibliotecas.

@rgomezp Desculpe, você poderia reabrir o problema? libRCTOneSignal.a não pode ser encontrado na extensão no Xcode 12. Mas funciona no Xcode 11.7

@MrAlekhin ,
Tente entrar no diretório ios e execute pod deintegrate && pod install

Isso está acontecendo comigo no Xcode 12. Não usando pods.

Olá,
Parece que isso é um problema para aqueles que estão usando o Xcode 12 e _não_ estão usando Cocoapods.

Reabrindo para rastrear este problema.

Outro usando o Xcode 12 sem usar pods com o mesmo problema. :(

Tive que mover a biblioteca para pods, mas não está funcionando no meu destino de teste😢 pessoal, revisem isso o mais rápido possível 🙏

@rgomezp , desculpe, alguma atualização sobre isso? tentou usar cocoapods, mas OneSignal não foi inicializado por algum motivo. usando React Native 0,59

Problemas com react-native-onesignal . Aqui está o exemplo do Pod:

# Uncomment the next line to define a global platform for your project
platform :ios, '10.0'



target 'example' do
  # Comment the next line if you don't want to use dynamic frameworks
  # Pods for example
  pod 'Branch', '0.28.1'
  pod 'react-native-onesignal', :path => '../node_modules/react-native-onesignal'
  pod 'React', :path => '../node_modules/react-native/'
end

target 'exampleDev' do
  # Comment the next line if you don't want to use dynamic frameworks
  # Pods for exampleDev
  pod 'Branch', '0.28.1'
  pod 'React', :path => '../node_modules/react-native/'
  pod 'react-native-onesignal', :path => '../node_modules/react-native-onesignal'
end

target 'OneSignalNotificationServiceExtension' do
  # Comment the next line if you don't want to use dynamic frameworks
  pod 'OneSignal', '>= 2.14.2', '< 3.0'
  # Pods for OneSignalNotificationServiceExtension
end

target 'DevOneSignalNotificationServiceExtension' do
  # Comment the next line if you don't want to use dynamic frameworks
  pod 'OneSignal', '>= 2.14.2', '< 3.0'
  # Pods for DevOneSignalNotificationServiceExtension
end

@rgomezp, alguém está investigando isso?

Nosso projeto usa 0,59 react-native (sem cocoapods) e não é baseado no XCode 12 por causa do problema aqui

@rgomezp, alguém está investigando isso?

Nosso projeto usa 0,59 react-native (sem cocoapods) e não é baseado no XCode 12 por causa do problema aqui

Mesmo aqui. react-native 0,59 e Xcode 12 após a última atualização, eu tenho o erro descrito. Tudo funcionando bem antes da atualização. Eu até removi e reinstalei o sinal nativo-reativo 3.9.2

clang: error: no such file or directory: '/Users/leonardo/Library/Developer/Xcode/DerivedData/xxxxx/Build/Products/Debug-iphonesimulator/libRCTOneSignal.a' Command Ld failed with a nonzero exit code

image

Atualização 1:
Se eu construir o aplicativo para produção ele funciona ... O problema é quando tento rodar no simulador (todos eles com iOS diferente)

Atualização 2:
Posso depurar até no dispositivo físico.

Atualização 3:
Posso depurar, mas o oneignal não solicita o consentimento do usuário, portanto as notificações não funcionam. Até atualizei a última versão 3.9.2.

A solução para mim foi fazer o downgrade do xcode para 11.7 e usar um backup da pasta ios. O problema parece estar relacionado ao xcode 12+

Tentei fazer downgrade do XCode, como disse @Tebrynn , mas continuo recebendo o mesmo problema.
Para mim, a única solução foi substituir a instalação manual pela instalação do Cocoapods.
Acabei de seguir as instruções da documentação (https://documentation.onesignal.com/docs/react-native-sdk-setup).

Alguma solução para isso?

Acabei de atualizar para o Xcode12 e estou enfrentando esse erro na compilação também.

Recentemente, atualizei para o Xcode 12. Estou tendo o mesmo problema por não encontrar libRCTOneSignal.a. Acredito que segui as etapas e soluções alternativas que outros tentaram. Estou perplexo.
Eu li vários artigos sobre a exclusão de arm64 para OneSignal. Tentei sem sorte até agora. No entanto, como isso afeta apenas o simulador, provavelmente não gastarei muito mais tempo com esse problema.

Mesmo problema, Xcode 12.4 e RN 0.59.10.

O mesmo problema aqui.

Olá,
Parece que as instalações manuais falharam de alguma forma. Precisamos cavar mais para investigar.

Obrigado pela sua paciência.

Enquanto isso, se possível, tente mudar para um método de instalação Cocoapods

Eu estou enfrentando o mesmo problema. Qualquer solução?

Olá, a partir do React-Native-OneSignal versão 4.0.0, o binário contido no RCTOneSignal.xcodeproj não foi atualizado, o que significa que você precisará usar Cocoapods para adicionar OneSignal ao NotificationServiceExtension.
Você pode fazer isso adicionando o seguinte ao seu Podfile:

target 'OneSignalNotificationServiceExtension' do
  pod 'OneSignal', '>= 3.0', '< 4.0'
end

Em seguida, atualize o arquivo NotificationService para o seguinte se você estiver usando Swift

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="10">@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)
        }
    }

}

Ou o seguinte se você estiver usando Objective-C

#import <OneSignal/OneSignal.h>

#import "NotificationService.h"

<strong i="14">@interface</strong> NotificationService ()

<strong i="15">@property</strong> (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver);
<strong i="16">@property</strong> (nonatomic, strong) UNNotificationRequest *receivedRequest;
<strong i="17">@property</strong> (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent;

<strong i="18">@end</strong>

<strong i="19">@implementation</strong> NotificationService

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
    self.receivedRequest = request;
    self.contentHandler = contentHandler;
    self.bestAttemptContent = [request.content mutableCopy];

    [OneSignal didReceiveNotificationExtensionRequest:self.receivedRequest withMutableNotificationContent:self.bestAttemptContent];

    // DEBUGGING: Uncomment the 2 lines below and comment out the one above to ensure this extension is excuting
    //            Note, this extension only runs when mutable-content is set
    //            Setting an attachment or action buttons automatically adds this
    // NSLog(@"Running NotificationServiceExtension");
    // self.bestAttemptContent.body = [@"[Modified] " stringByAppendingString:self.bestAttemptContent.body];

    self.contentHandler(self.bestAttemptContent);
}

- (void)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.

    [OneSignal serviceExtensionTimeWillExpireRequest:self.receivedRequest withMutableNotificationContent:self.bestAttemptContent];

    self.contentHandler(self.bestAttemptContent);
}

<strong i="20">@end</strong>

O guia de configuração completo pode ser encontrado aqui

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