Описание:
Я выполнил инструкции для React Native SDK отсюда - https://documentation.onesignal.com/docs/react-native-sdk-setup
Я добавил пакет npm, выполнил react-native link
а также pod install
. Все прошло гладко.
Затем я приступаю к созданию расширения для уведомлений. Когда я перехожу к той части, где мне велят добавить libRCTOneSignal.a
в параметр Link Binary with Libararies
, я не могу найти его в списке, который показывает Xcode. Вот все, что я вижу, когда ищу One Signal:
Вот моя настройка страниц поиска в заголовке:
Теперь я попытался добавить libreact-native-onesignal.a
, но при сборке получаю эту ошибку связывания:
ld: library not found for -lreact-native-onesignal
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Среда
3.2.6
0.55.4
9.2
Оказывается, react-native link
не работал как обычно: Д. Мне просто пришлось вручную добавить проект RCTOneSignal
в Libraries
а затем я смог добавить libRCTOneSignal.a
Я думаю, было бы неплохо, если бы вы, ребята, могли добавить инструкции по ручному связыванию в дополнение к react-native link
чтобы люди могли проверить, правильно ли работает ссылка :)
как ты это добавил?
Также пытаюсь понять, как именно добавить проект RCTOneSignal в библиотеки.
@nickyhajal @ @steverob Может кто-нибудь объяснить, как вручную добавить проект RCTOneSignal
в Libraries
?
Эта проблема также должна быть в документации.
@pacozaa, вы можете следовать инструкциям Facebook здесь: https://facebook.github.io/react-native/docs/linking-libraries-ios
Откройте node_modules / response-native-onesignal / ios, затем перетащите RCTOneSignal.xcodeproj в папку Libraries проекта XCode, после чего в результатах поиска появится libRCTOneSignal.a.
Я обновил документацию в настройке React-Native, чтобы отразить это. Спасибо, что подняли этот вопрос и помогли улучшить нашу документацию!
Нет папки библиотек.
@rgomezp Извините, не могли бы вы повторно открыть проблему? libRCTOneSignal.a не может быть найден в расширении в Xcode 12. Но работает в Xcode 11.7.
@ Г-н Алехин ,
Попробуйте зайти в каталог ios
и запустить pod deintegrate && pod install
Это происходит у меня в Xcode 12. Я не использую модули.
Привет,
Похоже, это проблема для тех из вас, кто использует Xcode 12 и _не_ использует Cocoapods.
Повторное открытие для отслеживания этой проблемы.
Другой использует Xcode 12 без использования модулей, которые имеют ту же проблему. :(
Пришлось переместить библиотеку в поды, но она не работает на моей промежуточной цели😢 ребята, пожалуйста, просмотрите это как можно скорее 🙏
@rgomezp извините, есть обновления по этому
Возникли проблемы с react-native-onesignal
. Вот пример 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 кто-нибудь изучает это?
В нашем проекте используется react-native 0.59 (без cocoapods), и он не основан на XCode 12 из-за проблемы здесь
@rgomezp кто-нибудь изучает это?
В нашем проекте используется react-native 0.59 (без cocoapods), и он не основан на XCode 12 из-за проблемы здесь
То же самое. response-native 0.59 и Xcode 12 после последнего обновления у меня есть описанная ошибка. Все работает нормально до обновления. Я даже удалил и переустановил 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
Обновление 1:
Если я создаю приложение для производства, оно работает ... Проблема в том, что я пытаюсь запустить симулятор (все они с разными iOS)
Обновление 2:
Я могу отлаживать даже на физическом устройстве.
Обновление 3:
Я могу отлаживать, но onesignal не запрашивает согласие пользователя, поэтому уведомления не работают. Я даже обновил последнюю версию 3.9.2.
Решением для меня было понизить версию xcode до 11.7 и использовать резервную копию папки ios. Проблема, похоже, связана с xcode 12+
Я попытался понизить версию XCode, как сказал возникает та же проблема.
Для меня единственным решением было заменить ручную установку установкой Cocoapods.
Я просто выполнил инструкции в документации (https://documentation.onesignal.com/docs/react-native-sdk-setup).
Любое решение для этого?
Я только что обновился до Xcode12, и я тоже столкнулся с этой ошибкой при сборке.
Недавно я обновился до Xcode 12. У меня такая же проблема, когда я не могу найти libRCTOneSignal.a. Я считаю, что следовал инструкциям и обходным путям, которые пытались найти другие. Я в тупике.
Я прочитал несколько статей об исключении arm64 для OneSignal. Я пробовал их пока безуспешно. Однако, поскольку это влияет только на симулятор, я, вероятно, не буду уделять этому вопросу больше времени.
Та же проблема, Xcode 12.4 и RN 0.59.10.
Здесь та же проблема.
Привет,
Похоже, ручная установка как-то сломалась. Нам нужно будет копать дальше, чтобы разобраться.
Спасибо за ваше терпение.
А пока, если возможно, попробуйте переключиться на метод установки Cocoapods.
Я столкнулся с той же проблемой. Любое решение?
Здравствуйте, начиная с React-Native-OneSignal версии 4.0.0 двоичный файл, содержащийся в RCTOneSignal.xcodeproj, не обновляется, что означает, что вам нужно будет использовать Cocoapods для добавления OneSignal в NotificationServiceExtension.
Вы можете сделать это, добавив в свой подфайл следующее:
target 'OneSignalNotificationServiceExtension' do
pod 'OneSignal', '>= 3.0', '< 4.0'
end
Затем обновите файл NotificationService следующим образом, если вы используете 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)
}
}
}
Или следующее, если вы используете 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>
Полное руководство по установке можно найти здесь
Самый полезный комментарий
Оказывается,
react-native link
не работал как обычно: Д. Мне просто пришлось вручную добавить проектRCTOneSignal
вLibraries
а затем я смог добавитьlibRCTOneSignal.a
Я думаю, было бы неплохо, если бы вы, ребята, могли добавить инструкции по ручному связыванию в дополнение к
react-native link
чтобы люди могли проверить, правильно ли работает ссылка :)