React-native-onesignal: Невозможно найти libRCTOneSignal.a

Созданный на 16 авг. 2018  ·  26Комментарии  ·  Источник: OneSignal/react-native-onesignal

Описание:
Я выполнил инструкции для 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:

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

Вот моя настройка страниц поиска в заголовке:
screen shot 2018-08-16 at 12 55 26 pm

Теперь я попытался добавить 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)

Среда

  1. реагировать-родной-один-сигнал - 3.2.6
  2. RN - 0.55.4
  3. Xcode - 9.2
Help Wanted dependencies iOS

Самый полезный комментарий

Оказывается, react-native link не работал как обычно: Д. Мне просто пришлось вручную добавить проект RCTOneSignal в Libraries а затем я смог добавить libRCTOneSignal.a

Я думаю, было бы неплохо, если бы вы, ребята, могли добавить инструкции по ручному связыванию в дополнение к react-native link чтобы люди могли проверить, правильно ли работает ссылка :)

Все 26 Комментарий

Оказывается, 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.

screenshot at nov 30 16-21-30

Я обновил документацию в настройке 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

image

Обновление 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>

Полное руководство по установке можно найти здесь

Была ли эта страница полезной?
0 / 5 - 0 рейтинги