Swift Assertions comportamiento en aplicaciones de producción

Estoy leyendo la sección de afirmaciones en el libro electrónico de Swift y parece que las aserciones funcionan de manera muy similar a sus homólogos de Objective-C. Sin embargo, en ninguna parte de los documentos puedo encontrar algo sobre el comportamiento del time de ejecución mientras se ejecuta como una aplicación de producción. Objective-C's NSAssert compromete a no terminar una aplicación de producción como resultado de una falla de aserción. ¿Es el mismo caso en Swift?

Según el lenguaje que Apple usa en su documentation , yo diría que las aserciones son ignoradas en un entorno de producción.

Si su código desencadena una afirmación mientras se ejecuta en un entorno de debugging , como cuando comstack y ejecuta una aplicación en Xcode, puede ver exactamente dónde se produjo el estado no válido y consultar el estado de su aplicación en el momento en que se activó la aserción. Una aserción también le permite proporcionar un post de debugging adecuado en cuanto a la naturaleza del aserto.

Y en el bloque "Nota":

Las aserciones hacen que su aplicación termine y no reemplace el layout de su código de tal forma que no sea probable que surjan condiciones inválidas. Sin embargo, en situaciones donde las condiciones inválidas son posibles, una afirmación es una manera efectiva de garantizar que esas condiciones se resalten y noten durante el desarrollo, antes de que su aplicación se publique.

La diferencia entre debugging y lanzamiento es la diferencia entre los arguments del comstackdor. La respuesta más probable es que habrá algunas configuraciones especiales del comstackdor (similar a -ea en Java).

EDITAR
El comstackdor Swift tiene un argumento llamado -assert-config

-assert-config Especifique el reemploop de assert_configuration. Los valores posibles son Depuración, Liberación, Reemploop.

En la Release , las aserciones se ignoran. No estoy seguro de la diferencia entre Debug y Replacement .

introduzca la descripción de la imagen aquí

Los asertos se documentan junto con precondiciones en la documentation de la biblioteca estándar Swift.

  • Debug -> Detener la falla de aserción.
  • Lanzamiento -> Comstackr con aserciones ignoradas
  • Liberar y "Deshabilitar verificaciones de security" -> Suponga que todas las aserciones son declaraciones de verdad y sugerencias para el comstackdor, de modo que el código siguiente y anterior puede eliminarse si solo se alcanza en condiciones donde la aserción hubiera fallado. Esto significa que si sigue la afirmación por código en manejar el caso excepcional, puede ignorarse. Si la afirmación hubiera fallado, el comportamiento está completamente indefinido.

No he marcado, pero la opción "Deshabilitar comprobaciones de security" puede estar correlacionada con el reemploop -assert-config que @Sulthan menciona.

Verifique su Optimization Level y asegúrese de que no esté configurado para la configuration de lanzamiento. Mira mi nota https://github.com/onmyway133/blog/issues/39