According to the Standard Library documentation, fatalError and preconditionFailure (or precondition, of course) differ in that fatatError always prints its error message, but preconditionFailure doesn't if it's executed in a release build. I tested it, and this is what happens (Xcode 7.1.1).
This strikes me as very strange. If you choose to use precondition/preconditionFailure, you're indicating that the program's logic has failed. I can't see the value of simply having the app disappear without some message or other in the log. After failure, such a message is the only clue as to what went wrong, and even though it's not normally customer visible, it's possible to ask a customer to look in the log and report any errors from the app.
Am I missing something here? It's not as if error messages in the log would turn it into a frightening place to visit — it's already that, with a horrible mixture of navel-gazing introspection, boring informational messages, and truly scary failure reports, all from OS software components. It's also not as if the log would fill up with app error messages, since there is by definition only one per crash.