Beim Aktualisieren von Code zum Erstellen unter Xcode 9 sehe ich Kompilierungsfehler im Code mit require
und require_noerr
:
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?
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%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%