Help us understand the problem. What is going on with this article?

Xcode 9.1 で致命的なエラーの表示が改善されます

More than 1 year has passed since last update.

Swift.org にて次のブログ記事が2017年10月5日付で公開されました。

Xcode 9.1 Improves Display of Fatal Errors - Swift.org

個人的にとてもうれしいアップデートなので、Qiita にて共有できればと思います。
(ほぼブログ記事の日本語訳…)

EXC_BAD_INSTRUCTIONEXC_BREAKPOINT

let element = array[index]  // #1
let nc = self.navigationController! // #2
precondition(index > 0, "Index must be greater than zero.")  // #3

以上のコードにおいて、

  • #1: index0 より小さいか array.count - 1 よりも大きい場合
  • #2: self.navigationControllernil の場合
  • #3: index0 の場合

プログラムは終了してしまいます。このように、期待する値が間違っている場合やコードにバグがある場合、Swift のプログラムは終了します。
アプリケーションの開発中には、これら幾つかの前提条件が満たされない状態でデバッグを行うことが多いかと思います。
この理由で Swift プログラムが終了してしまった時、Xcode 9.1 以前のデバッガでは他のタイプのクラッシュ時と同じように、EXC_BAD_INSTRUCTIONEXC_BREAKPOINT がエラーメッセージとして表示されていました。

これは、私のような超初心者開発者やプロの開発の方にとっても混乱の原因となっています。
現に、私も EXC_BAD_INSTRUCTIONEXC_BREAKPOINT でググって、結局配列の添字ミスであったりする場合が何度もありました。

Xcode 9.1 でのエラー表示の改善

Xcode 9.1 Improves Display of Fatal Errors - Swift.org より
Xcode 9.1 ではこの致命的なエラーの表示が大幅に改善されたようです。
Xcode 9.1 でデバッグすると、エラーが発生した部分になぜエラーとなったのかについての理由が表示されます。

Xcode 9.1 では以下のイベントについてのエラー表示を網羅しているとのことです。

  • forced unwrapping nil
  • forced-try expressions (try!) producing an error
  • out-of-bounds indexing into arrays
  • precondition failures
  • assertion failures
  • fatalError calls

この機能は @UIApplicationMain@NSApplicationMain 属性を持つアプリケーションが Swift で書かれている場合のみに利用できます。

Xcode 9.1 正式版は 2017年後半にリリース予定となっています。

treastrain
iOS・watchOS App「Japan NFC Reader」を作っています。 Nat. Institute of Tech., Hachinohe College → Muroran Institute of Tech. Student Apple Teacher Swift Playgrounds認定
https://treastrain.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした