Xcode 9 gibt Fehler aus, die "erfordern" enthalten

8

Beim Aktualisieren von Code zum Erstellen unter Xcode 9 sehe ich Kompilierungsfehler im Code mit require und require_noerr :

%Vor%

Der erste Fehler ist: error: implicit declaration of function 'require' is invalid in C99

Ich bekomme auch eine Menge error: use of undeclared identifier 'outLabel' . Dies ist in RRTransactionVerifier.m, das ist Apple-Code für den Umgang mit Empfangsbestätigung.

Wie behebe ich diese Fehler?

    
Danny Parker 14.09.2017, 14:09
quelle

2 Antworten

20

require und require_noerr sind Makros, die in AssertMacros.h definiert wurden. Ab Xcode 9 haben sich diese Makros geändert.

Die Gründe sind in dieser Header-Datei dokumentiert:

  

Seit jeher definiert Mac OS X die meisten dieser Versionen   Makros ohne das Präfix __, das mit ähnlich bezeichneten kollidieren könnte   Funktionen oder Makros im Benutzercode, einschließlich neuer Funktionen in Boost   und die C ++ - Standardbibliothek.

     

macOS High Sierra und iOS 11 erfordern nun, dass Clients in die   neue Makros wie oben definiert.

     

Wenn Sie die Makros für die Verwendung in Ihren eigenen aktivieren möchten   Projekt können Sie das definieren   __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES Makro über eine Xcode-Build-Konfiguration. Siehe "Hinzufügen einer Build-Konfigurationsdatei (xcconfig)"   in der Xcode-Hilfe.

Um das Problem zu beheben, können Sie das definieren oder Ihren Code ändern, um die neuen Makros zu verwenden. require ist jetzt __Require , require_noerr ist jetzt __Require_noErr und so weiter. Sie stellen ein Skript in der Header-Datei zur Verfügung, um zu erfahren, wie Sie Ihren Code über ein Skript ändern können:

BEARBEITEN: Am Ende der ersten Zeile des Skripts wurde ein Backslash hinzugefügt, andernfalls würde Terminal den Befehl in zwei Teile zerlegen.

%Vor%     
Danny Parker 14.09.2017, 14:09
quelle
3

In /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ MacOSX10.11.sdk / usr / include / AssertMacros.h erfordern, require_noerr Makros werden jetzt geändert.

Folgen Sie diesem Link: Ссылка , um die geänderte Liste zu überprüfen. Für Ihren Fehler besteht ein Problem in dieser Methode. Dies ist die modifizierte Methode in VerificationController.m.

%Vor%     
Jamshed Alam 08.10.2017 10:01
quelle

Tags und Links