2016-04-02 4 views
5

Ich habe mehrere assert(condition, "message") Aussagen in meinem Projekt.Asserts sind in der Produktion getroffen treffen verursacht Abstürze

Sie werden verwendet, um invariante Bedingungen während der Entwicklung zu überprüfen. Ich dachte, sie würden in Produktion/Release-Build ignoriert werden (wie in this answer angegeben). Sie sind nicht. Stattdessen verursachen sie Abstürze während TestFlight Tests. Wenn ich einen Kommentar mache, stürzt die App nicht ab. Etwas läuft normalerweise ein bisschen falsch, aber es stürzt nicht ab.

Kann es etwas mit meinen Build-Einstellungen sein?

Alle meine Archivschemata verwenden Release-Konfiguration:

enter image description here

Das sind in Cocoa Touch Framework-Projekt behauptet, dass von benutzerdefinierten Tastaturerweiterung verwendet wird.

alle Ziele in allen Projekten (Cocoa Touch Framework und das Hauptprojekt mit Zieltastaturerweiterung) haben diese Einstellungen Körperbau:

Enable Foundation Assertions 
    Debug YES 
    Release NO 

Disable Safety Checks NO 

Was ist los?


EDIT:

Sulthan's answer zeigt, wie für beide Debug behauptet global deaktivieren und Relase baut. Das ist nicht was ich brauche. Ich möchte, dass es wie erwartet funktioniert - Behauptungen sollten in Debug aktiviert sein, aber in Release-Builds deaktiviert sein.

Standardmäßig funktioniert es so - und so funktioniert es auch in meinem Hauptprojekt. Aber es funktioniert nicht für Asserts, die sich im Framework-Projekt befinden, das von diesem Hauptprojekt aus verlinkt ist (Details in this question). Warum? Wie man es repariert?

+0

Haben Sie versucht, meine [Antwort] (http://stackoverflow.com/a/24038197/669586)? – Sulthan

+0

@Sultan Nein, tat ich nicht. Ich dachte, dass es nicht erforderlich sein sollte, benutzerdefinierte Flags hinzuzufügen, um sicherzustellen, dass es in Releases ignoriert. Ich werde es jetzt versuchen. – drasto

+0

Ich denke auch, dass es nicht erforderlich sein sollte (es war in einer der ersten Beta-Versionen erforderlich). – Sulthan

Antwort

2

Die Optionen, die Sie haben versucht:

Enable Foundation Assertions ist in der Vorverarbeitung (Makros). Swift ist nicht vorverarbeitet und verwendet keine Makros. Diese Option deaktiviert NSAssert, NSParameterAssert und ähnliche Makros, die häufig in Objective-C verwendet werden.

Disable Safety Checks ist eine Performance-Option:

standardmäßig die Standard-Bibliothek garantiert Speichersicherheit. Viele Funktionen und Methoden dokumentieren die Anforderungen, die vom Aufrufer erfüllt werden müssen, z. B. ein Array-Index, der gültig ist. die Speichersicherheit ist auch dann gewährleistet, wenn eine Anforderung verletzt wird. Ein Verstoß gegen eine Anforderung kann jedoch einen Laufzeitfehler auslösen. APIs, die das Wort "unsafe" in ihrem Namen enthalten, können Sie Sicherheitsprüfungen explizit an Orten deaktivieren, an denen Sie die zusätzliche Leistung benötigen. Es liegt in Ihrer Verantwortung, die Speichersicherheit von Code zu überprüfen, der unsichere APIs verwendet. Die Speichersicherheit ist auch nicht gewährleistet, wenn in Multithreading-Code eine Racebedingung vorliegt.

(Swift Library Reference)

sollten Sie wahrscheinlich meine Antwort here (verwenden -assert-config Release in Other Swift Flags) versuchen.

Oder halten Sie einfach die Behauptungen in Produktion Builds. Jede fehlgeschlagene Behauptung ist ein Fehler und im Allgemeinen ist es besser, sobald wie möglich über einen Fehler Bescheid zu wissen.

+0

Wo setze ich diese Flaggen? Welches Projekt, welches Ziel? Ich kenne die Fehler dort. Sie sind selten, geringfügig und ich plane, sie in zukünftigen Versionen zu beheben. Abstürze aufgrund von Behauptungen sind viel schwerwiegender. – drasto

+0

@drasto Sie müssen sie in das Projekt & Ziel einfügen, das die Behauptungen enthält. Es ist nur ein Compiler-Flag. – Sulthan

+0

Es scheint nicht zu funktionieren - ich setze '-sert-config Debug' auf Projekt enthält behauptet (dies ist Framework-Projekt von einem anderen Projekt verknüpft), führen Sie es von XCode, aber die Behauptungen sind immer noch – drasto

Verwandte Themen