React-native-onesignal: OneSignal OneSignalNotificationExtension-Build schlägt auf Xcode 12 im Zusammenhang mit Cocoapods- / Architektur- / Simulator-Problemen fehl

Erstellt am 31. Aug. 2020  ·  32Kommentare  ·  Quelle: OneSignal/react-native-onesignal

Beschreibung:

Gerade von Xcode 10 auf Xcode 12 aktualisiert, bevor dieses Projekt auf v10 erfolgreich erstellt und ausgeführt wurde.

Fehler beim Erstellen des OneSignalNotificationExtension-Ziels:

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


und 100 Fehler mehr

Ich kenne mich mit Xcode und Mac nicht so gut aus, daher tut es mir leid, wenn es nicht klar oder irreführend ist.

Dankeschön

Umfeld

reaktiv 0.63.2
onesignal-react-native 3.9.1
Xcode 12
Über npm installiert und mit Pods verknüpft

Schritte zum Reproduzieren des Problems:

  • Bauen

  • Help Wanted

    Hilfreichster Kommentar

    Ich habe auch einige Probleme mit Xcode 12

    Ich kann das Projekt erfolgreich auf Xcode 11 erstellen. Sobald ich jedoch den Xcode12 öffne und das Projekt baue, erhalte ich die folgende Fehlermeldung:

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

    Dies scheint kein Fehler von OneSignal-Seite zu sein. Sieht so aus, als wäre etwas mit Cache oder so etwas komisch,
    Dinge die ich probiert habe:

    • Von Xcode abgeleitete Daten löschen - rm -rf ~/Library/Developer/Xcode/DerivedData/
    • Löschen Sie Reaktiv-native, Garn-Cache und installieren Sie Abhängigkeiten neu.
    • Simulatordaten und Inhalte zurücksetzen
    • Computer neu gestartet

    Ich weiß nicht, was ich noch versuchen soll, ich würde sagen, dass alles richtig verlinkt ist, da die Anwendung in der Produktion gut funktioniert und der Build mit Xcode 11 funktioniert.

    Ich habe die Bibliothek manuell mit der OneSignal-Anleitung verknüpft. Haben Sie eine Idee, wie Sie dies beheben können? 🙏🏼

    Als ich dieses Problem bekam, wurde es normalerweise durch Reinigen der DerivedData gelöst, aber ich kann den Fehler nicht beseitigen 😞

    Alle 32 Kommentare

    Hallo,
    Wie sieht Ihre NotificationService.swift Datei aus? Es sollte etwa so sein:

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

    Sehen Sie sich Schritt 4.3.6 in den Einrichtungsanweisungen an und fahren Sie von dort aus fort, um sicherzustellen, dass Sie alles richtig eingerichtet haben.

    Hoffe das hilft. Danke schön

    Danke für die Rückmeldung.

    Ich verwende die Objective-C-Datei. Soll ich den schnellen verwenden?

    Ich dachte, Sie benutzen Swift. Wenn Sie Obj-C verwenden, verwenden Sie das Objective C. Genießen!

    Ich habe auch einige Probleme mit Xcode 12

    Ich kann das Projekt erfolgreich auf Xcode 11 erstellen. Sobald ich jedoch den Xcode12 öffne und das Projekt baue, erhalte ich die folgende Fehlermeldung:

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

    Dies scheint kein Fehler von OneSignal-Seite zu sein. Sieht so aus, als wäre etwas mit Cache oder so etwas komisch,
    Dinge die ich probiert habe:

    • Von Xcode abgeleitete Daten löschen - rm -rf ~/Library/Developer/Xcode/DerivedData/
    • Löschen Sie Reaktiv-native, Garn-Cache und installieren Sie Abhängigkeiten neu.
    • Simulatordaten und Inhalte zurücksetzen
    • Computer neu gestartet

    Ich weiß nicht, was ich noch versuchen soll, ich würde sagen, dass alles richtig verlinkt ist, da die Anwendung in der Produktion gut funktioniert und der Build mit Xcode 11 funktioniert.

    Ich habe die Bibliothek manuell mit der OneSignal-Anleitung verknüpft. Haben Sie eine Idee, wie Sie dies beheben können? 🙏🏼

    Als ich dieses Problem bekam, wurde es normalerweise durch Reinigen der DerivedData gelöst, aber ich kann den Fehler nicht beseitigen 😞

    Ich habe etwas Seltsames entdeckt,

    Wenn ich versuche, die Anwendung mit Xcode 12 zu erstellen, schlägt es immer fehl. Wenn ich die Anwendung jedoch zuerst mit Xcode 11 baue und dann Xcode 12 öffne und die App baue, funktioniert es

    Sobald ich jedoch den Build bereinige und versuche, mit Xcode 12 erneut zu erstellen, schlägt es wieder mit dem gleichen Fehler fehl 😖

    Gleicher Fehler hier mit Xcode 12 und onesignal-react-native 3.9.1 :-(
    Projekte funktionierten vor dem Update.

    Gleicher Fehler.
    Onesignal-SDK -> 2.15.2
    reagieren-native-einssignal -> 3.9.1
    Hat gut auf xCode 11 funktioniert.

    Hallo,
    Das ist seltsam @carloscuesta . Haben Sie versucht, einen Unterschied zwischen dem Projekt auf Xcode 11 und 12 zu sehen? Vielleicht ändert 12 aus irgendeinem Grund einige wichtige Build-Einstellungen.

    Habe ein ähnliches Problem, als ich meinen Xcode von 11 auf 12 aktualisiert habe.

    Hey @rgomezp

    Ich kann bestätigen, dass es keine Änderungen von Xcode 11 zu Xcode 12 gibt. Das git status des Repos ist unverändert.

    Ich kann jedoch immer noch den fehlgeschlagenen Build reproduzieren. Und immer wenn ich zum ersten Mal auf Xcode 11 und Xcode 12 nach der Arbeit baue 😕

    Screenshot 2020-09-25 at 12 12 40

    Screenshot 2020-09-25 at 12 18 39

    Hallo,
    Ich glaube , dass dies mit dem laufenden Cocoapods - Problem zusammenhängt , über das zuvor hier berichtet

    Dies könnte funktionieren, indem Sie x86_64 zu VALID_ARCH hinzufügen, wenn Sie die App auf dem Simulator ausführen müssen, z. B. x86_64 arm64 arm64e

    Dieser Stapelüberlauf enthält möglicherweise die von Ihnen benötigte Lösung.

    Hey! Danke für deine Hilfe @rgomezp

    Ich werde Ihnen die Ergebnisse meiner Experimente mitteilen!

    Ausgeschlossene Architekturen hinzufügen

    Ich habe arm64 wie im StackOverflow-Beitrag unter Project > Architectures > Excluded Architectures .

    Screenshot 2020-09-28 at 13 40 32

    Dies hat das Problem nicht behoben. Ich habe den gleichen Fehler, wenn ich mich über x86_64 beschwere.

    Screenshot 2020-09-28 at 13 39 50

    Also habe ich x86_64 zu Excluded Architectures hinzugefügt.

    Screenshot 2020-09-28 at 13 41 12

    Nach der folgenden Änderung scheint der folgende Fehler behoben zu sein. Ich habe jedoch einen weiteren Fehler bezüglich des 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.
    

    Ich habe jedoch nichts im Zusammenhang mit CodeSign geändert 🤔 – Der Xcode11-Build funktioniert einwandfrei

    Screenshot 2020-09-28 at 11 36 29

    Nach dem Bereinigen des DerivedData Builds und starten Sie den Computer neu. Ich sehe einen weiteren Fehler: Link app (i386) .

    Wenn ich den Fehler öffne, sehe ich, dass viele Dateien im Ordner DerivedData nicht gefunden werden. Keiner von ihnen hat mit OneSignal zu tun. Ich weiß jedoch nicht, warum dies fehlschlägt, wenn es auf Xcode 11 richtig funktioniert. Ich bin gerade so verwirrt 😅

    Verwenden Sie VALID_ARCHS

    Das hat bei mir auch nicht funktioniert. Ich habe auch gelesen, dass dies auf Xcode 12 veraltet ist und stattdessen Excluded Architectures verwendet werden sollte.

    Ich hatte keine User-Defined Setting dafür. Da ich keine CocoaPods verwende und das Modul manuell verlinkt habe.

    Ich habe einen interessanten Link gefunden, der über den Fehler "gleiches Zertifikat" mit Xcode spricht, nachdem arm64 .

    Es besagt, dass die Erweiterungen diese Architekturen nicht ausschließen sollten . Leider gleicher Fehler :(

    Für heute habe ich keine Ideen mehr

    Ich kann bestätigen, dass das Erstellen und Ausführen der Anwendung auf einem echten Gerät ohne die Änderungen "Ausgeschlossene Architekturen" keine Fehler auslöst.

    Es hängt also zu 100% mit der Architektur des Simulators selbst zusammen

    Screenshot 2020-09-29 at 09 17 24

    Hola Carlos,
    Vielen Dank für die ausführliche Untersuchung. Aus Gründen der Übersichtlichkeit habe ich auch diesen Stapelüberlaufthread gefunden.

    Um das @carloscuesta- Problem zusammenzufassen,

    1. Der Embedded binary is not signed with the same certificate as the parent app... Fehler wird behoben, indem arm64 und x86_64 zu den ausgeschlossenen Architekturen hinzugefügt werden, gemäß der Anleitung, dies über VALID ARCHS zu verwenden.
    2. Die im Cocoapods-Repository veröffentlichte Problemumgehung hat bei Ihnen nicht funktioniert, da Sie die Bibliothek manuell verknüpft haben.

    Carlos, an dieser Stelle bin ich mir nicht sicher, was sonst noch gemacht werden kann, da dies nach einem Nicht-OneSignal-Problem klingt.

    Können andere Leute bitte bestätigen, dass der oben verlinkte Cocoapods-Workaround für sie funktioniert, wenn sie Cocoapods _benutzen_?

    Hey @rgomezp

    Vielen Dank für all die Hilfe, die Sie bereitgestellt haben.

    Carlos, an dieser Stelle bin ich mir nicht sicher, was sonst noch gemacht werden kann, da dies nach einem Nicht-OneSignal-Problem klingt.

    Ich bin mir mit dieser Aussage nicht 100% sicher, da Wenn ich die Verknüpfung der gesamten OneSignal-Bibliothek aufhebe und die OneSignalNotificationServiceExtension entferne, baut das Projekt auf Xcode12 auf. Ich weiß nicht, woher der Fehler kommt, das ist sicher und vielleicht ist dies ein besonderer Fall, da die Bibliothek manuell verknüpft ist. Und ich muss nichts anfassen, was mit Architekturen zu tun hat

    Aber ja, mal sehen ob wir noch andere Anwendungsfälle finden 👍🏼

    Es scheint, dass Xcode 12 für den Simulator mit Architektur erstellt wurde - arm64, i386, x86_64 .

    Meine Workaround-Lösung ist also

    1. Fügen Sie arm64 in der Einstellung " Ausgeschlossene Architekturen der Projekterstellung" hinzu
    2. Entfernen Sie VALID ARCHS aus der Build-Einstellung des RCTOneSignal-Teilprojekts.
      (VAILD ARCHS wurde in Xcode 12 in die benutzerdefinierte Build-Einstellung verschoben)

    In meinem Projekt funktioniert es gut.

    @stanleyctcl Deine Lösung funktioniert! :tada:

    Ich habe das RCTOneSignal Ziel in der RCTOneSignal Bibliothek nicht gesehen, in der VALID_ARCHS als User-Defined Einstellung definiert war. Dies ist etwas, das wir von der Bibliotheksseite entfernen sollten! Ich werde eine PR machen, um das Problem zu beheben!

    Screenshot 2020-10-07 at 10 22 44

    Deshalb haben alle meine Änderungen nicht funktioniert. Weil die OneSignal-Bibliothek diese Benutzereinstellung definiert hat.

    Hey, danke @stanleyctcl
    Deine Lösung hat bei mir funktioniert.

    Zuvor war mein Build-On-Release-Modus für den iOS-Simulator fehlgeschlagen. Ich habe einen building for iOS Simulator, but linking in object file built for iOS, file onesignal Fehler. Aber ich kann den Release-Modus auf einem echten Gerät erstellen, ohne dass Fehler aufgetreten sind. Die obige Lösung hat dieses Problem gelöst.

    Nachdem ich Ihre Lösung implementiert habe, konnte ich meine App leider nicht archivieren. Ich habe diesen Fehler.

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

    irgendeine Ahnung?

    @abdullahizzuddiin Stellen Sie sicher, dass Sie nur die Architektur für iOS-Simulatoren ausgeschlossen haben

    Ach, mein Fehler. Ich habe das kleine Detail vergessen. Danke @carloscuesta für den Hinweis. Es stellte sich heraus, dass ich nur Excluded Architecture ohne VALID ARCHS aus der RCTOneSignal Unterprojekt-Build-Einstellung zu entfernen. 🤔

    = = =
    Ich glaube, ich habe einen Differenzfehler. Ich habe erfolgreich archiviert. Aber nachdem ich "Signierung automatisch verwalten" gewählt hatte, bekam ich diesen Fehler
    image

    Ich kann eine App problemlos in einer früheren Version von Xcode im Appstore bereitstellen. Bisher habe ich 11.7 verwendet. Jetzt habe ich 12.0 verwendet und diesen Fehler sofort erhalten, ohne dass mein Repository geändert wurde.

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

    Irgendeine Ahnung? oder sollte ich ein separates Problem erstellen?

    ps:
    Ich habe mein Problem auch an das Apple Developer Forum gesendet, nur für den Fall, dass dies nicht das Problem dieser Bibliothek ist.

    Ich verwende React-native-Onesignal 3.9.1 auf der React native 0.60.0-Version ... Ich kann dieses Problem beheben, indem ich x86_64 in die benutzerdefinierten Einstellungen einfüge (VALID_ARCHS)

    Hallo zusammen,
    Ich denke, dieses Problem kann sicher geschlossen werden, da es sich nicht um ein OneSignal-Problem zu handeln scheint.


    @abdullahizzuddiin
    (Anderes Problem, erwägen Sie, ein separates Ticket zu eröffnen)

    Aus Gründen der Sichtbarkeit werde ich eine der Antworten auf den Apple Dev Forum-Thread posten:

    PROBLEM:
    Der Versuch, den Build auf dem tatsächlichen Gerät auszuführen, ist fehlgeschlagen, obwohl der Build auf meinem MacBook Pro erfolgreich ist.
    Bei dieser Meldung ist folgender Fehler aufgetreten:
    Das Bereitstellungsprofil "iOS Team-Bereitstellungsprofil: com.xxxxxxxxxxxx.Name der -App" enthält nicht das aktuell ausgewählte Gerät "iPhone" (Kennung 0000xxxx-000xxxxxxxxxxxxxxxxxx).

    Xcode-Hilfe-Online-Handbuch

    Kontoeinstellungen
    Verwenden Sie die Konteneinstellungen, um Entwicklerkonto-Assets zu verwalten (Zertifikate und Bereitstellungsprofile zu signieren), Repositorys hinzuzufügen und Server hinzuzufügen.

    Um die Kontoeinstellungen zu öffnen, wählen Sie Xcode > Einstellungen und klicken Sie auf Konten.
    I Dann habe ich auf Zertifikate verwalten geklickt und mit einem Klick auf das Plus-Symbol ein neues Zertifikat hinzugefügt.

    PROBLEM GELÖST:
    Ich habe dann meinen Build ausgeführt und mein Signaturfehler behoben, die App wurde auf meinem iPhone 11 Pro Max installiert.
    Hoffentlich hilft Ihnen diese Lösung.

    Hey @rgomezp

    Dieses Problem war eine Mischung aus verschiedenen Problemen. Das, auf das Sie zeigen, hat nichts mit dem Simulator-Problem selbst zu tun, das hat mit RCTOneSignal zu tun, weil die Verwendung von VALID_ARCHS

    Ich weiß nicht, ob wir dieses Problem vollständig schließen sollten, bis das Simulatorproblem gelöst ist.

    Hallo @rgomezp

    Ich habe den Vorschlag aus dem Apple Dev Forum befolgt, den Sie oben exzerpiert haben. Aber es hat mein Problem nicht gelöst.

    Vorübergehend habe ich die Xcode-Version auf 11.7 herabgestuft und konnte erfolgreich erstellen, ausführen und archivieren. Aber ich kann diese Handlungen immer noch in Xcode 12.0 ausführen

    Ich werde dies offen lassen, um automatisch von #1053 geschlossen zu werden

    Es scheint, dass Xcode 12 für den Simulator mit Architektur erstellt wurde - arm64, i386, x86_64 .

    Meine Workaround-Lösung ist also

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

    In meinem Projekt funktioniert es gut.

    Das funktioniert bei mir. Denken Sie daran, es zu löschen. Nicht einfach leer "" machen, da es nicht funktionieren würde

    bearbeiten:
    Mein Projekt verwendet manuelles Verknüpfen eines Signals 3.2.12.
    reaktiv 0.59.9
    xcode 12

    Ich habe die stanleyctcl-Lösung ausprobiert, die im Simulator für Debug- und Release-Builds funktioniert. Aber beim Build für generische Geräte/Archive hatte ich das gleiche Problem wie abdullahizzuddiin

    Keine Architekturen zum Kompilieren (ARCHS=arm64, VALID_ARCHS=arm64 arm64e armv7 armv7s, EXCLUDED_ARCHS=(
    arm64
    ))

    Die Lösung, die für mich funktioniert hat, ist
    Nur dieses anwenden

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

    Dadurch sollte das Archiv funktionieren, aber die Simulatorfreigabe schlägt fehl. Um das zu beheben. Sie müssen alle Projektziele und Pod-Ziele -> Build-Einstellungen -> Architektur -> Nur aktive Architektur erstellen -> Setzen Sie 'Ja' für den Freigabemodus

    Erklärung und Schritte auf: https://stackoverflow.com/a/64139830/9232424.
    Lesen Sie weiter: https://medium.com/macoclock/deep-drive-xcode-build-settings-827c3ce4811c.

    Ach, mein Fehler. Ich habe das kleine Detail vergessen. Danke @carloscuesta für den Hinweis. Es stellte sich heraus, dass ich nur Excluded Architecture ohne VALID ARCHS aus der RCTOneSignal Unterprojekt-Build-Einstellung zu entfernen. 🤔

    = = =
    Ich glaube, ich habe einen Differenzfehler. Ich habe erfolgreich archiviert. Aber nachdem ich "Signierung automatisch verwalten" gewählt hatte, bekam ich diesen Fehler
    image

    Ich kann eine App problemlos in einer früheren Version von Xcode im Appstore bereitstellen. Bisher habe ich 11.7 verwendet. Jetzt habe ich 12.0 verwendet und diesen Fehler sofort erhalten, ohne dass mein Repository geändert wurde.

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

    Irgendeine Ahnung? oder sollte ich ein separates Problem erstellen?

    ps:
    Ich habe mein Problem auch an das Apple Developer Forum gesendet, nur für den Fall, dass dies nicht das Problem dieser Bibliothek ist.

    Das gleiche Problem ist bei mir in xcode 12 aufgetreten. Haben Sie das Problem gelöst? @abdullahizzuddiin oder du stufen den xcode einfach auf 11.7 herunter

    Danke schön

    Um im Simulator laufen zu können, muss ich " arm64 " in " Ausgeschlossene Architekturen " hinzufügen.
    Aber um die Anwendung auf einem echten Gerät auszuführen, muss ich sie ohne die " Ausgeschlossene Architekturen "
    Also muss ich diese Änderung jedes Mal vornehmen, wenn ich laufe.

    Ich hoffe das hilft.

    Gleiches Problem hier, es kam zurück.

    Dasselbe

    Dasselbe

    War diese Seite hilfreich?
    0 / 5 - 0 Bewertungen