La description:
J'ai suivi les instructions pour React Native SDK à partir d'ici - https://documentation.onesignal.com/docs/react-native-sdk-setup
J'ai ajouté le package npm, effectué react-native link
et aussi pod install
. Tout s'est bien passé.
Ensuite, je crée l'extension de notification. Lorsque j'arrive à la partie où l'on me demande d'ajouter libRCTOneSignal.a
dans le paramètre Link Binary with Libararies
, je ne parviens pas à le trouver dans la liste affichée par Xcode. Voici tout ce que je vois lorsque je recherche One Signal :
Voici le paramètre de mes pages de recherche d'en-tête :
Maintenant, j'ai essayé d'ajouter le libreact-native-onesignal.a
, mais lors de la construction, j'obtiens cette erreur de liaison :
ld: library not found for -lreact-native-onesignal
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Environnement
3.2.6
0.55.4
9.2
Il s'avère que react-native link
n'a pas fonctionné correctement comme d'habitude :DI a juste dû ajouter manuellement le projet RCTOneSignal
dans Libraries
puis j'ai pu ajouter libRCTOneSignal.a
Je pense que ce serait bien si vous pouviez ajouter les instructions pour lier manuellement en plus de react-native link
afin que les gens puissent vérifier si le lien a fonctionné correctement :)
comment l'as tu ajouté ?
Essayer également de comprendre exactement comment ajouter le projet RCTOneSignal dans les bibliothèques
@nickyhajal @abdul-elah-js @steverob Quelqu'un peut-il expliquer comment ajouter manuellement le projet RCTOneSignal
dans Libraries
?
Ce problème devrait également figurer dans la documentation.
@pacozaa vous pouvez suivre les instructions de Facebook ici : https://facebook.github.io/react-native/docs/linking-libraries-ios
Ouvrez node_modules/react-native-onesignal/ios, puis faites glisser et déposez RCTOneSignal.xcodeproj dans le dossier du projet XCode Bibliothèques, puis libRCTOneSignal.a apparaîtra dans la recherche.
J'ai mis à jour la documentation dans la configuration React-Native pour refléter cela. Merci d'avoir soulevé cette question et d'avoir contribué à améliorer notre documentation !
Aucun dossier Bibliothèques.
@rgomezp Désolé, pourriez-vous s'il vous plaît rouvrir le problème ? libRCTOneSignal.a ne peut pas être trouvé dans l'extension dans Xcode 12. Mais fonctionne sur Xcode 11.7
@MrAlekhin ,
Essayez d'aller dans le répertoire ios
et d'exécuter pod deintegrate && pod install
Cela se produit pour moi dans Xcode 12. Ne pas utiliser de pods.
Salut,
Il semble que ce soit un problème pour ceux d'entre vous qui utilisent Xcode 12 et n'utilisent _pas_ Cocoapods.
Réouverture pour suivre ce problème.
Un autre utilisant Xcode 12 sans utiliser de pods qui a le même problème. :(
J'ai dû déplacer la bibliothèque vers les pods, mais cela ne fonctionne pas sur ma cible de mise en scène😢 les gars, veuillez vérifier cela dès que possible 🙏
@rgomezp désolé, des mises à jour à ce sujet ? essayé d'utiliser des cocopods mais OneSignal n'est pas initialisé pour une raison quelconque. en utilisant React Native 0.59
Avoir des problèmes avec react-native-onesignal
. Voici l'exemple du 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 est-ce que quelqu'un se penche sur cela?
Notre projet utilise react-native 0.59 (pas de cocopodes) et il ne s'appuie pas sur XCode 12 à cause du problème ici
@rgomezp est-ce que quelqu'un se penche sur cela?
Notre projet utilise react-native 0.59 (pas de cocopodes) et il ne s'appuie pas sur XCode 12 à cause du problème ici
Pareil ici. react-native 0.59 et Xcode 12 après la dernière mise à jour, j'ai l'erreur décrite. Tout fonctionnait bien avant la mise à jour. J'ai même supprimé et réinstallé react-native-onesignal 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
Mise à jour 1 :
Si je crée l'application pour la production, cela fonctionne ... Le problème est lorsque j'essaie de l'exécuter sur un simulateur (tous avec un iOS différent)
Mise à jour 2 :
Je peux déboguer même sur un appareil physique.
Mise à jour 3 :
Je peux déboguer mais onesignal ne demande pas le consentement de l'utilisateur, donc les notifications ne fonctionnent pas. J'ai même mis à jour la dernière version 3.9.2.
La solution pour moi était de rétrograder xcode à 11.7 et d'utiliser une sauvegarde du dossier ios. Le problème semble être lié à xcode 12+
J'ai essayé de rétrograder le XCode, comme l' a dit
Pour moi, la seule solution était de remplacer l'installation manuelle par l'installation Cocoapods.
Je viens de suivre les instructions de la documentation (https://documentation.onesignal.com/docs/react-native-sdk-setup).
Une solution pour cela ?
Je viens de mettre à jour vers Xcode12 et je suis également confronté à cette erreur lors de la construction.
J'ai récemment mis à jour vers Xcode 12. J'ai le même problème de ne pas trouver libRCTOneSignal.a. Je crois que j'ai suivi les étapes et les solutions de contournement que d'autres ont essayées. Je suis perplexe.
J'ai lu plusieurs articles sur l'exclusion d'arm64 pour OneSignal. J'ai essayé ces derniers sans succès jusqu'à présent. Cependant, comme cela n'affecte que le simulateur, je ne passerai probablement pas beaucoup plus de temps sur cette question.
Même problème, Xcode 12.4 et RN 0.59.10.
Même problème ici.
Salut,
On dirait que les installations manuelles se sont cassées d'une manière ou d'une autre. Nous devrons creuser davantage pour enquêter.
Merci pour votre patience.
En attendant, si possible, essayez de passer à une méthode d'installation Cocoapods
Je suis confronté au même problème. Toute solution?
Bonjour, à partir de la version 4.0.0 de React-Native-OneSignal, le binaire contenu dans RCTOneSignal.xcodeproj n'est pas mis à jour, ce qui signifie que vous devrez utiliser Cocoapods pour ajouter OneSignal à NotificationServiceExtension.
Vous pouvez le faire en ajoutant les éléments suivants à votre fichier Podfile :
target 'OneSignalNotificationServiceExtension' do
pod 'OneSignal', '>= 3.0', '< 4.0'
end
Ensuite, mettez à jour le fichier NotificationService comme suit si vous utilisez 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 ce qui suit si vous utilisez 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>
Le guide d'installation complet est disponible ici
Commentaire le plus utile
Il s'avère que
react-native link
n'a pas fonctionné correctement comme d'habitude :DI a juste dû ajouter manuellement le projetRCTOneSignal
dansLibraries
puis j'ai pu ajouterlibRCTOneSignal.a
Je pense que ce serait bien si vous pouviez ajouter les instructions pour lier manuellement en plus de
react-native link
afin que les gens puissent vérifier si le lien a fonctionné correctement :)