React-native-onesignal: Échec de la construction de OneSignal OneSignalNotificationExtension sur Xcode 12 en raison de problèmes de cacao / architecture / simulateur

Créé le 31 août 2020  ·  32Commentaires  ·  Source: OneSignal/react-native-onesignal

La description:

Juste mis à jour de Xcode 10 à Xcode 12, avant la v10, ce projet a été construit et exécuté avec succès.

Échec de la génération de la cible 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


et 100 erreurs de plus

Je ne suis pas très bon sur Xcode et Mac donc je suis désolé si ce n'est pas clair ou trompeur.

Merci

Environnement

natif de réaction 0,63.2
onesignal-react-native 3.9.1
Xcode 12
Installé via npm et lié aux pods

Étapes pour reproduire le problème :

  • Construire

  • Help Wanted

    Commentaire le plus utile

    J'ai aussi des problèmes avec Xcode 12

    Je peux réussir à construire le projet sur Xcode 11. Cependant, dès que j'ouvre le Xcode12 et que je construis le projet, j'obtiens l'erreur suivante :

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

    Cela ne semble pas être une erreur du côté de OneSignal. On dirait qu'il y a quelque chose de bizarre avec le cache ou quelque chose comme ça,
    choses que j'ai essayé:

    • Supprimer les données dérivées de Xcode - rm -rf ~/Library/Developer/Xcode/DerivedData/
    • Effacez le cache de fil natif et réinstallez les dépendances.
    • Réinitialiser les données et le contenu du simulateur
    • Redémarré l'ordinateur

    Je ne sais pas ce que je devrais essayer d'autre, je dirais que tout est correctement lié puisque l'application fonctionne bien sur Production et que la construction fonctionne avec Xcode 11.

    J'ai la bibliothèque liée manuellement à l'aide du guide OneSignal, une idée sur la façon de résoudre ce problème ? ??

    Généralement, lorsque j'ai eu ce problème, il a été résolu en nettoyant le DerivedData mais je ne peux pas me débarrasser de l'erreur 😞

    Tous les 32 commentaires

    Salut,
    À quoi ressemble votre fichier NotificationService.swift ? Cela devrait être quelque chose comme :

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

    Jetez un œil à l'étape 4.3.6 des instructions de configuration et continuez à partir de là pour vous assurer que vous avez tout configuré correctement.

    J'espère que cela t'aides. À votre santé

    Merci pour les commentaires.

    J'utilise le fichier Objective-C. Dois-je utiliser le rapide?

    Je pensais que vous utilisiez Swift. Si vous utilisez Obj-C, utilisez l'Objective C. Prendre plaisir!

    J'ai aussi des problèmes avec Xcode 12

    Je peux réussir à construire le projet sur Xcode 11. Cependant, dès que j'ouvre le Xcode12 et que je construis le projet, j'obtiens l'erreur suivante :

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

    Cela ne semble pas être une erreur du côté de OneSignal. On dirait qu'il y a quelque chose de bizarre avec le cache ou quelque chose comme ça,
    choses que j'ai essayé:

    • Supprimer les données dérivées de Xcode - rm -rf ~/Library/Developer/Xcode/DerivedData/
    • Effacez le cache de fil natif et réinstallez les dépendances.
    • Réinitialiser les données et le contenu du simulateur
    • Redémarré l'ordinateur

    Je ne sais pas ce que je devrais essayer d'autre, je dirais que tout est correctement lié puisque l'application fonctionne bien sur Production et que la construction fonctionne avec Xcode 11.

    J'ai la bibliothèque liée manuellement à l'aide du guide OneSignal, une idée sur la façon de résoudre ce problème ? ??

    Généralement, lorsque j'ai eu ce problème, il a été résolu en nettoyant le DerivedData mais je ne peux pas me débarrasser de l'erreur 😞

    J'ai découvert quelque chose de bizarre,

    Si j'essaie de créer l'application avec Xcode 12, cela échoue toujours. Cependant, si je crée d'abord l'application avec Xcode 11, puis ouvre Xcode 12 et crée l'application, cela fonctionne 🤯

    Cependant, dès que je nettoie la construction et essaie de reconstruire à nouveau avec Xcode 12, il recommence à échouer avec la même erreur 😖

    Même erreur ici avec Xcode 12 et onesignal-react-native 3.9.1 :-(
    Les projets fonctionnaient avant la mise à jour.

    Même erreur.
    SDK Onesignal -> 2.15.2
    réagir-natif-un-signal -> 3.9.1
    A bien fonctionné sur xCode 11.

    Salut,
    C'est étrange @carloscuesta . Avez-vous essayé de voir une différence entre le projet sur Xcode 11 et 12 ? Peut-être que 12 modifie certains paramètres de construction importants pour une raison quelconque.

    J'ai eu un problème similaire lorsque j'ai mis à jour mon Xcode de 11 à 12..

    Salut @rgomezp

    Je peux confirmer qu'il n'y a pas de changement de Xcode 11 à Xcode 12. Le git status du repo n'est pas modifié.

    Cependant, je peux toujours reproduire la construction échouée. Et chaque fois que je construis sur Xcode 11 et Xcode 12 après ça fonctionne pour la première fois 😕

    Screenshot 2020-09-25 at 12 12 40

    Screenshot 2020-09-25 at 12 18 39

    Salut,
    Je pense que cela est lié au problème actuel des ici .

    Cela pourrait fonctionner, ajoutez x86_64 à VALID_ARCH si vous devez exécuter l'application sur un simulateur, par exemple, x86_64 arm64 arm64e

    Ce débordement de pile peut contenir la solution dont vous avez besoin.

    Hey! Merci pour votre aide @rgomezp

    Je vais vous dire les résultats de mes expériences!

    Ajouter des architectures exclues

    J'ai présenté arm64 comme suggéré sur le post StackOverflow sur le Project > Architectures > Excluded Architectures .

    Screenshot 2020-09-28 at 13 40 32

    Cela n'a pas résolu le problème. J'ai la même erreur en me plaignant de x86_64 .

    Screenshot 2020-09-28 at 13 39 50

    J'ai donc ajouté x86_64 au Excluded Architectures .

    Screenshot 2020-09-28 at 13 41 12

    Après le changement suivant, l'erreur suivante semble être corrigée. Cependant, j'ai une autre erreur concernant le 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.
    

    Cependant, je n'ai rien changé en rapport avec CodeSign 🤔 - La version Xcode11 fonctionne bien

    Screenshot 2020-09-28 at 11 36 29

    Après avoir nettoyé le DerivedData build et redémarrez l'ordinateur. Je vois une autre erreur : Link app (i386) .

    Si j'ouvre l'erreur, je vois que beaucoup de fichiers ne sont pas trouvés dans le dossier DerivedData . Aucun d'entre eux n'est lié à OneSignal. Cependant, je ne sais pas pourquoi cela échoue si cela fonctionne correctement sur Xcode 11. Je suis tellement confus en ce moment 😅

    Utilisez VALID_ARCHS

    Cela n'a pas fonctionné pour moi non plus. J'ai également lu que cela est déconseillé sur Xcode 12 et que Excluded Architectures devrait être utilisé à la place.

    Je n'avais pas de User-Defined Setting pour ça. Comme je n'utilise pas CocoaPods et que j'ai le module lié manuellement.

    J'ai trouvé un lien intéressant qui parle de l'erreur "même certificat" avec Xcode après avoir exclu arm64 .

    Il dit que les extensions ne doivent pas exclure ces architectures . Même erreur malheureusement :(

    Je suis à court d'idées pour aujourd'hui

    Je peux confirmer que la construction et l'exécution de l'application sur un appareil réel ne génèrent aucune erreur sans les modifications "Architectures exclues".

    C'est donc quelque chose de 100% lié à l'architecture du simulateur lui-même

    Screenshot 2020-09-29 at 09 17 24

    Hola Carlos,
    Merci pour l'enquête détaillée. Pour plus de visibilité, j'ai également trouvé ce thread de débordement de pile .

    Pour résumer le problème @carloscuesta ,

    1. L'erreur Embedded binary is not signed with the same certificate as the parent app... est résolue en ajoutant arm64 et x86_64 aux architectures exclues , selon les conseils pour l'utiliser sur VALID ARCHS.
    2. La solution de contournement publiée dans le référentiel Cocoapods n'a pas fonctionné pour vous car la bibliothèque est liée manuellement.

    Carlos, à ce stade, je ne sais pas ce qui peut être fait d'autre car cela ressemble à un problème non lié à OneSignal.

    D'autres personnes peuvent-elles confirmer que la solution de contournement de Cocoapods liée ci-dessus fonctionne pour elles si elles _utilisent_ des Cocoapods ?

    Salut @rgomezp

    Merci pour toute l'aide que vous avez fournie.

    Carlos, à ce stade, je ne sais pas ce qui peut être fait d'autre car cela ressemble à un problème non lié à OneSignal.

    Je ne suis pas sûr à 100% de cette déclaration car si je dissocie toute la bibliothèque OneSignal et que je supprime les OneSignalNotificationServiceExtension le projet s'appuie sur Xcode12. Je ne sais pas d'où vient l'erreur, c'est sûr et c'est peut-être un cas particulier puisque la bibliothèque est liée manuellement. Et je n'ai rien à toucher avec les architectures

    Mais oui, voyons si nous pouvons trouver d'autres cas d'utilisation 👍🏼

    Il semble que Xcode 12 soit construit pour le simulateur avec l'architecture - arm64, i386, x86_64 .

    Ma solution de contournement est donc

    1. Ajouter arm64 dans le Architectures exclues de la génération de projet
    2. Supprimez VALID ARCHS du
      (VAILD ARCHS a été déplacé vers le paramètre de construction défini par l'utilisateur dans Xcode 12)

    Cela fonctionne bien dans mon projet.

    @stanleyctcl Votre solution fonctionne ! :tada:

    Je n'ai pas vu que la cible RCTOneSignal l'intérieur de la bibliothèque RCTOneSignal avait le VALID_ARCHS défini comme un paramètre User-Defined . C'est quelque chose que nous devrions supprimer du côté de la bibliothèque ! Je vais faire un PR pour résoudre le problème !

    Screenshot 2020-10-07 at 10 22 44

    C'est pourquoi tous mes changements n'ont pas fonctionné. Parce que la bibliothèque OneSignal a ce paramètre utilisateur défini.

    Hé, merci @stanleyctcl
    Votre solution a fonctionné pour moi.

    Auparavant, mon build sur le mode de publication sur iOS Simulator échouait. J'ai building for iOS Simulator, but linking in object file built for iOS, file onesignal erreur

    Malheureusement, après avoir mis en œuvre votre solution, je n'ai pas pu archiver mon application. J'ai cette erreur.

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

    une idée ?

    @abdullahizzuddiin Assurez-vous que vous n'avez exclu que l'architecture pour les simulateurs iOS

    Ah, mon mauvais. J'ai oublié le petit détail. Merci @carloscuesta de m'avoir signalé. Il s'est avéré que je n'avais besoin que de définir Excluded Architecture sans supprimer VALID ARCHS du paramètre de construction du sous-projet RCTOneSignal . ??

    = = =
    Je pense que j'ai une erreur de différence. J'ai archivé avec succès. Mais, après avoir choisi "Gérer automatiquement la signature", j'ai eu cette erreur
    image

    Je peux déployer une application sur Appstore sans aucun problème sur la version précédente de Xcode. Auparavant, j'utilisais 11.7. Maintenant, j'ai utilisé 12.0 et j'ai instantanément eu cette erreur sans aucun changement sur mon repo.

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

    Un indice ? ou dois-je créer un problème séparé ?

    ps :
    J'ai également soumis mon problème au Forum des développeurs Apple au cas où ce ne serait pas le problème de cette bibliothèque.

    j'utilise react-native-onesignal 3.9.1 sur la version react native 0.60.0... Je suis en mesure de résoudre ce problème en incluant x86_64 dans les paramètres définis par l'utilisateur (VALID_ARCHS)

    Salut à tous,
    Je pense que ce problème peut être fermé en toute sécurité car il ne semble pas être un problème OneSignal.


    @abdullahizzuddiin
    (Problème différent, pensez à ouvrir un ticket séparé)

    Pour plus de visibilité, je posterai une des réponses sur le fil Apple Dev Forum :

    PROBLÈME:
    La tentative d'exécution de la compilation sur le périphérique réel a échoué, même si la compilation a réussi sur mon MacBook Pro.
    L'erreur suivante s'est produite avec ce message :
    Le profil de provisionnement « iOS Team Provisioning Profile : com.xxxxxxxxxxxx.Name of -App » n'inclut pas l'appareil actuellement sélectionné « iPhone » (identifiant 0000xxxx-000xxxxxxxxxxxxxxxxxx).

    Manuel d'aide en ligne de Xcode

    Préférences des comptes
    Utilisez les préférences Comptes pour gérer les actifs des comptes de développeur (certificats de signature et profils d'approvisionnement), ajouter des référentiels et ajouter des serveurs.

    Pour ouvrir les préférences Comptes, choisissez Xcode > Préférences et cliquez sur Comptes.
    I Ensuite, j'ai cliqué sur, gérer les certificats, et ajouté un nouveau certificat en cliquant sur le signe plus.

    PROBLÈME RÉSOLU:
    J'ai ensuite exécuté ma version et mon erreur de signature a été effacée, l'application a été installée sur mon iPhone 11 Pro Max.
    Espérons que cette solution vous aide.

    Salut @rgomezp

    Cette question était un mélange de différents problèmes. Celui que vous indiquez n'a rien à voir avec le problème du simulateur lui-même, c'est quelque chose qui a à voir avec RCTOneSignal parce que l'utilisation de VALID_ARCHS

    Je ne sais pas si nous devrions fermer complètement ce problème jusqu'à ce que celui du simulateur soit résolu.

    Salut @rgomezp

    J'ai suivi la suggestion d'Apple Dev Forum que vous avez extraite ci-dessus. Mais, cela n'a pas résolu mon problème.

    Temporairement, j'ai rétrogradé la version Xcode à 11.7 et j'ai pu construire, exécuter et archiver avec succès. Mais, je peux toujours faire ces actes dans Xcode 12.0

    Je vais laisser cela ouvert pour être fermé automatiquement d'ici le #1053

    Il semble que Xcode 12 soit construit pour le simulateur avec l'architecture - arm64, i386, x86_64 .

    Ma solution de contournement est donc

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

    Cela fonctionne bien dans mon projet.

    Cela fonctionne pour moi. N'oubliez pas de le supprimer. Ne pas simplement le laisser vide "" car cela ne fonctionnerait pas

    Éditer:
    Mon projet utilise la liaison manuelle Un signal 3.2.12.
    réactif-natif 0.59.9
    xcode 12

    J'ai essayé la solution stanleyctcl qui fonctionne dans le simulateur pour le débogage et la version. Mais lors de la construction pour l'appareil générique/l'archive, j'ai rencontré le même problème qu'abdullahizzuddiin

    Aucune architecture pour compiler (ARCHS=arm64, VALID_ARCHS=arm64 arm64e armv7 armv7s, EXCLUDED_ARCHS=(
    bras64
    ))

    La solution qui a fonctionné pour moi est
    Appliquer ceci uniquement

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

    Cela devrait faire fonctionner Archive mais la version du simulateur échoue. Pour arranger ça. vous devez aller à la cible de toutes les cibles du projet et du pod -> Paramètres de génération -> Architecture -> Construire l'architecture active uniquement -> Définir 'Oui' pour le mode de publication

    Explication et étapes sur : https://stackoverflow.com/a/64139830/9232424.
    Pour en savoir plus : https://medium.com/macoclock/deep-drive-xcode-build-settings-827c3ce4811c.

    Ah, mon mauvais. J'ai oublié le petit détail. Merci @carloscuesta de m'avoir signalé. Il s'est avéré que je n'avais besoin que de définir Excluded Architecture sans supprimer VALID ARCHS du paramètre de construction du sous-projet RCTOneSignal . ??

    = = =
    Je pense que j'ai une erreur de différence. J'ai archivé avec succès. Mais, après avoir choisi "Gérer automatiquement la signature", j'ai eu cette erreur
    image

    Je peux déployer une application sur Appstore sans aucun problème sur la version précédente de Xcode. Auparavant, j'utilisais 11.7. Maintenant, j'ai utilisé 12.0 et j'ai instantanément eu cette erreur sans aucun changement sur mon repo.

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

    Un indice ? ou dois-je créer un problème séparé ?

    ps :
    J'ai également soumis mon problème au Forum des développeurs Apple au cas où ce ne serait pas le problème de cette bibliothèque.

    Le même problème s'est produit avec moi dans xcode 12, avez-vous résolu le problème ? @abdullahizzuddiin ou vous venez de rétrograder le xcode à 11.7

    Merci

    Pour fonctionner dans le simulateur, je dois ajouter " arm64 " dans " Architectures exclues ".
    Mais, pour exécuter l'application sur un appareil réel, je dois la laisser sans les modifications " Architectures exclues ".
    Je dois donc faire ce changement à chaque fois que je cours.

    J'espère que ça aide.

    Même problème ici, c'est revenu.

    Même

    Même

    Cette page vous a été utile?
    0 / 5 - 0 notes