React-native-onesignal: OneSignal Сбой сборки OneSignalNotificationExtension в Xcode 12, связанный с проблемами cocoapods / архитектуры / симулятора

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

Описание:

Только что обновлен с Xcode 10 до Xcode 12, до того, как на v10 этот проект был построен и успешно запущен.

Ошибка построения цели 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


и еще 100 ошибок

Я не очень хорошо разбираюсь в Xcode и Mac, поэтому извиняюсь, если это не ясно или вводит в заблуждение.

Спасибо

Среда

реагировать-родной 0.63.2
oneSignal-реагировать-родной 3.9.1
Xcode 12
Установлен через npm и связан с модулями

Шаги по воспроизведению проблемы:

  • Строить

  • Help Wanted

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

    У меня тоже проблемы с Xcode 12

    Я могу успешно построить проект на Xcode 11. Однако, как только я открываю Xcode12 и создаю проект, я получаю следующую ошибку:

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

    Это не похоже на ошибку со стороны OneSignal. Похоже, что-то странное с кешем или что-то в этом роде,
    вещи, которые я пробовал:

    • Удалить производные данные Xcode - rm -rf ~/Library/Developer/Xcode/DerivedData/
    • Очистите react-native, yarn cache и переустановите зависимости.
    • Сбросить данные и содержимое симулятора
    • Перезагрузили компьютер

    Я не знаю, что еще мне попробовать, я бы сказал, что все правильно связано, так как приложение хорошо работает на производстве, а сборка работает с Xcode 11.

    У меня есть библиотека, связанная вручную с помощью руководства OneSignal, есть идеи, как это исправить? 🙏🏼

    Обычно, когда у меня возникает эта проблема, она решается очисткой DerivedData но я не могу избавиться от ошибки 😞

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

    Привет,
    Как выглядит ваш файл 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="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)
            }
        }
    
    }
    

    Взгляните на шаг 4.3.6 в инструкциях по

    Надеюсь это поможет. Ваше здоровье

    Спасибо за ответ.

    Я использую файл Objective-C. Стоит ли мне использовать быстрый?

    Я думал, вы используете Swift. Если вы используете Obj-C, используйте Objective C. Наслаждаться!

    У меня тоже проблемы с Xcode 12

    Я могу успешно построить проект на Xcode 11. Однако, как только я открываю Xcode12 и создаю проект, я получаю следующую ошибку:

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

    Это не похоже на ошибку со стороны OneSignal. Похоже, что-то странное с кешем или что-то в этом роде,
    вещи, которые я пробовал:

    • Удалить производные данные Xcode - rm -rf ~/Library/Developer/Xcode/DerivedData/
    • Очистите react-native, yarn cache и переустановите зависимости.
    • Сбросить данные и содержимое симулятора
    • Перезагрузили компьютер

    Я не знаю, что еще мне попробовать, я бы сказал, что все правильно связано, так как приложение хорошо работает на производстве, а сборка работает с Xcode 11.

    У меня есть библиотека, связанная вручную с помощью руководства OneSignal, есть идеи, как это исправить? 🙏🏼

    Обычно, когда у меня возникает эта проблема, она решается очисткой DerivedData но я не могу избавиться от ошибки 😞

    Я обнаружил кое-что странное,

    Если я пытаюсь создать приложение с Xcode 12, это всегда терпит неудачу. Однако, если я сначала создаю приложение с Xcode 11, а затем открываю Xcode 12 и создаю приложение, оно работает 🤯

    Однако как только я очищаю сборку и снова пытаюсь перестроить ее с помощью Xcode 12, она снова начинает давать сбои с той же ошибкой 😖

    Такая же ошибка здесь с Xcode 12 и onesignal-react-native 3.9.1 :-(
    До обновления проекты работали.

    Та же ошибка.
    Onesignal SDK -> 2.15.2
    реагировать-родной-одинсигнал -> 3.9.1
    Хорошо работал на xCode 11.

    Привет,
    Странно @carloscuesta . Вы пробовали увидеть разницу между проектом Xcode 11 и 12? Возможно, 12 по какой-то причине меняет некоторые важные настройки сборки.

    Получил аналогичную проблему, когда я обновил свой Xcode с 11 до 12 ..

    Привет @rgomezp

    Я могу подтвердить, что нет никаких изменений с Xcode 11 на Xcode 12. git status репо не изменено.

    Однако я все еще могу воспроизвести сборку. И всякий раз, когда я использую Xcode 11 и Xcode 12 после работы в первый раз 😕

    Screenshot 2020-09-25 at 12 12 40

    Screenshot 2020-09-25 at 12 18 39

    Привет,
    Я считаю, что это связано с продолжающейся проблемой Cocoapods, о которой ранее сообщалось здесь .

    Это может сработать, добавьте x86_64 в VALID_ARCH если необходимо запустить приложение на симуляторе, например, x86_64 arm64 arm64e

    Это переполнение стека может содержать нужное вам решение.

    Привет! Спасибо за помощь @rgomezp

    Расскажу результаты своих экспериментов!

    Добавить исключенные архитектуры

    Я представил arm64 как это было предложено в сообщении StackOverflow в Project > Architectures > Excluded Architectures .

    Screenshot 2020-09-28 at 13 40 32

    Это не устранило проблему. У меня такая же ошибка с жалобой на x86_64 .

    Screenshot 2020-09-28 at 13 39 50

    Итак, я пошел дальше и добавил x86_64 к Excluded Architectures .

    Screenshot 2020-09-28 at 13 41 12

    После следующего изменения, похоже, исправлена ​​следующая ошибка. Однако у меня есть еще одна ошибка относительно 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.
    

    Однако я не менял ничего, связанного с CodeSign 🤔 - Сборка Xcode11 работает нормально.

    Screenshot 2020-09-28 at 11 36 29

    После очистки DerivedData сборка Link app (i386) .

    Если я открываю сообщение об ошибке, я вижу, что в папке DerivedData не найдено много файлов. Ни один из них не имел отношения к OneSignal. Однако я не знаю, почему это не работает, если он правильно работает в Xcode 11. Я сейчас в замешательстве 😅

    Используйте VALID_ARCHS

    У меня это тоже не сработало. Я также читал, что это устарело в Xcode 12 и вместо него следует использовать Excluded Architectures .

    У меня на это не было User-Defined Setting . Поскольку я не использую CocoaPods, и у меня есть модуль, связанный вручную.

    Я нашел интересную ссылку, в которой говорится об ошибке «того же сертификата» с Xcode после исключения arm64 .

    В нем говорится, что расширения не должны исключать эти архитектуры . К сожалению, та же ошибка :(

    У меня на сегодня нет идей 😅

    Я могу подтвердить, что сборка и запуск приложения на реальном устройстве не вызывает никаких ошибок без модификаций «Исключенные архитектуры».

    Так что это на 100% связано с архитектурой самого симулятора.

    Screenshot 2020-09-29 at 09 17 24

    Хола Карлос,
    Спасибо за подробное расследование. Для наглядности я также нашел этот поток переполнения стека .

    Подводя итог проблеме @carloscuesta ,

    1. Ошибка Embedded binary is not signed with the same certificate as the parent app... устраняется путем добавления arm64 и x86_64 в Исключенные архитектуры , в соответствии с инструкциями по использованию этого над ДЕЙСТВИТЕЛЬНЫМИ ARCHS.
    2. Обходной путь, опубликованный в репозитории Cocoapods, не сработал для вас, потому что у вас есть библиотека, связанная вручную.

    Карлос, на данный момент я не уверен, что еще можно сделать, поскольку это звучит как проблема, не связанная с OneSignal.

    Могут ли другие люди подтвердить, что указанный выше обходной путь Cocoapods работает для них, если они _are_ используют Cocoapods?

    Привет @rgomezp

    Спасибо за помощь, которую вы оказали.

    Карлос, на данный момент я не уверен, что еще можно сделать, поскольку это звучит как проблема, не связанная с OneSignal.

    Я не уверен на 100% в этом утверждении, поскольку если я отключу всю библиотеку OneSignal и удалю OneSignalNotificationServiceExtension проект будет построен на Xcode12. Я не знаю, откуда взялась ошибка, это наверняка, и, возможно, это конкретный случай, поскольку библиотека связана вручную. И мне не нужно трогать что-либо, связанное с архитектурой

    Но да, давайте посмотрим, сможем ли мы найти другие варианты использования 👍🏼

    Похоже, сборка Xcode 12 для симулятора с архитектурой - arm64, i386, x86_64 .

    Итак, мое обходное решение

    1. Добавить arm64 в настройках Excluded Architectures of Project Build
    2. Удалите VALID ARCHS из настройки сборки подпроекта RCTOneSignal.
      (VAILD ARCHS был перемещен в пользовательский параметр сборки в Xcode 12)

    Это хорошо работает в моем проекте.

    @stanleyctcl Ваше решение работает! : тада:

    Я не видел, чтобы цель RCTOneSignal внутри библиотеки RCTOneSignal имела значение VALID_ARCHS определенное как параметр User-Defined . Это то, что мы должны удалить со стороны библиотеки! Я сделаю пиар, чтобы исправить проблему!

    Screenshot 2020-10-07 at 10 22 44

    Вот почему все мои изменения не сработали. Поскольку в библиотеке OneSignal определены эти пользовательские настройки.

    Привет спасибо @stanleyctcl
    Ваше решение сработало для меня.

    Раньше моя сборка в режиме выпуска для iOS Simulator не удалась. Я получил ошибку building for iOS Simulator, but linking in object file built for iOS, file onesignal . Но я могу создать режим выпуска на реальном устройстве без каких-либо ошибок. Вышеупомянутое решение решило эту проблему.

    К сожалению, после того, как я реализовал ваше решение, мне не удалось заархивировать свое приложение. Я получил эту ошибку.

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

    какая-нибудь подсказка?

    @abdullahizzuddiin Убедитесь, что вы

    Ах, моя беда. Я забыл маленькую деталь. Спасибо @carloscuesta за то, что указал на меня. Оказалось, что мне нужно всего лишь установить Excluded Architecture без удаления VALID ARCHS из RCTOneSignal настройки сборки подпроекта. 🤔

    = = =
    Думаю, у меня ошибка разницы. Я успешно заархивирован. Но после того, как я выбрал «Автоматически управлять подписью», я получил эту ошибку
    image

    Я могу без проблем развернуть приложение в Appstore в предыдущей версии Xcode. Раньше я использовал 11.7. Теперь я использовал 12.0 и сразу получил эту ошибку без каких-либо изменений в моем репо.

    //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
    

    Есть подсказка? или я должен создать отдельный выпуск?

    пс:
    Я также отправил свою проблему на форум разработчиков Apple на всякий случай, если проблема не в этой библиотеке.

    Я использую response-native-onesignal 3.9.1 для реакции на родную версию 0.60.0 ... Я могу решить эту проблему, включив x86_64 в пользовательские настройки (VALID_ARCHS)

    Привет всем,
    Я думаю, что эту проблему можно безопасно закрыть, поскольку она не связана с OneSignal.


    @abdullahizzuddiin
    (Другой вопрос, рассмотрите возможность открытия отдельного билета)

    Для наглядности я опубликую один из ответов в ветке форума Apple Dev :

    ПРОБЛЕМА:
    Попытка запустить сборку на реальном устройстве не удалась, даже если сборка прошла успешно на моем MacBook Pro.
    С этим сообщением произошла следующая ошибка:
    Профиль обеспечения «Профиль обеспечения группы iOS: com.xxxxxxxxxxxx. Имя -App» не включает в себя текущее выбранное устройство «iPhone» (идентификатор 0000xxxx-000xxxxxxxxxxxxxxxxxx).

    Справочное руководство по Xcode

    Настройки учетных записей
    Используйте настройки учетных записей для управления активами учетной записи разработчика (подписывание сертификатов и профилей обеспечения), добавления репозиториев и серверов.

    Чтобы открыть настройки «Учетные записи», выберите «Xcode»> «Настройки» и нажмите «Учетные записи».
    I Затем я нажал «Управление сертификатами» и добавил новый сертификат, щелкнув значок «плюс».

    ЗАДАЧА РЕШЕНА:
    Затем я запустил свою сборку, и моя ошибка подписи исчезла, приложение было установлено на моем iPhone 11 Pro Max.
    Надеюсь, это решение вам поможет.

    Привет @rgomezp

    Эта проблема была смесью разных проблем. Тот, который вы указываете, не имеет ничего общего с самой проблемой симулятора, это то, что связано с RCTOneSignal потому что использование VALID_ARCHS

    Я не знаю, следует ли нам полностью закрывать эту проблему, пока не будет решена проблема симулятора.

    Привет @rgomezp

    Я последовал предложению с форума Apple Dev Forum, которое вы привели выше. Но это не решило мою проблему.

    Временно я понизил версию Xcode до 11.7 и смог успешно собирать, запускать и архивировать. Но я все еще могу делать это в Xcode 12.0

    Я оставлю это открытым, чтобы оно было закрыто автоматически # 1053

    Похоже, сборка Xcode 12 для симулятора с архитектурой - arm64, i386, x86_64 .

    Итак, мое обходное решение

    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)**
    

    Это хорошо работает в моем проекте.

    У меня это работает. Не забудьте удалить его. Не просто делайте это пустым "", так как это не сработает

    редактировать:
    В моем проекте используется ручное связывание. Один сигнал 3.2.12.
    реагировать-родной 0.59.9
    xcode 12

    Я попробовал решение stanleyctcl, которое работает в симуляторе для отладки и выпуска сборки. Но при сборке для универсального устройства / архива я столкнулся с той же проблемой, что и abdullahizzuddiin.

    Нет архитектур для компиляции (ARCHS = arm64, VALID_ARCHS = arm64 arm64e armv7 armv7s, EXCLUDED_ARCHS = (
    рука64
    ))

    Решение, которое сработало для меня,
    Применить только это

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

    Это должно заставить архив работать, но выпуск симулятора не удастся. Чтобы это исправить. вам нужно перейти во все целевые объекты проекта и пода -> Параметры сборки -> Архитектура -> Создать только активную архитектуру -> Установить 'Да' для режима выпуска

    Объяснение и шаги: https://stackoverflow.com/a/64139830/9232424.
    Прочтите также: https://medium.com/macoclock/deep-drive-xcode-build-settings-827c3ce4811c.

    Ах, моя беда. Я забыл маленькую деталь. Спасибо @carloscuesta за то, что указал на меня. Оказалось, что мне нужно всего лишь установить Excluded Architecture без удаления VALID ARCHS из RCTOneSignal настройки сборки подпроекта. 🤔

    = = =
    Думаю, у меня ошибка разницы. Я успешно заархивирован. Но после того, как я выбрал «Автоматически управлять подписью», я получил эту ошибку
    image

    Я могу без проблем развернуть приложение в Appstore в предыдущей версии Xcode. Раньше я использовал 11.7. Теперь я использовал 12.0 и сразу получил эту ошибку без каких-либо изменений в моем репо.

    //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
    

    Есть подсказка? или я должен создать отдельный выпуск?

    пс:
    Я также отправил свою проблему на форум разработчиков Apple на всякий случай, если проблема не в этой библиотеке.

    Та же проблема произошла со мной в xcode 12. Вы решили проблему? @abdullahizzuddiin или вы просто понизили xcode до 11.7

    Спасибо

    Для запуска в симуляторе мне нужно добавить « arm64 » в « Исключенные архитектуры ».
    Но, чтобы запустить приложение на реальном устройстве, я должен оставить его без модификаций « Исключенные архитектуры ».
    Так что мне приходится вносить это изменение каждый раз, когда я бегу.

    Надеюсь, это поможет.

    Та же проблема здесь, она вернулась.

    Тем же

    Тем же

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