ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
スタティックアナライザによるバグの早期検出
Appを実行する前に、Xcodeが無限ループ、未使用コード、その他の問題を自動的に追跡する方法について確認します。ワンクリックでXcodeがプロジェクトを解析し、セキュリティ問題、論理的なバグ、Objective-C、C、C++のその他の見つけにくいエラーを発見する方法を確認します。バグレポートの調査時間を短縮し、Appの全体的品質を向上させるためのスタティックアナライザの使用方法を紹介します。
リソース
関連ビデオ
WWDC19
-
ダウンロード
♪ ♪ ラビ カンダダイ マダバンです このビデオでは Xcodeで Static Analyzerを使い Appのバグを見つけ 修正する方法を 説明します まず Static Analyzerで バグを見つける方法と バグについて理解する方法を 見ていただきます それから Xcode 13の 新機能について説明します ここでコードの問題について より深く知ることができます 最後に 開発ワークフローと 適切な統合ができるよう Analyzerをカスタマイズする 方法について説明します では Analyserでバグを 見つける方法を見ていきます Static Analyzerは Xcodeのツールであり ソースコードを解析して 実行せずバグを 見つけることができます Appの品質チェックや テストをする前に バグを発見できるのです テストでは検出しない まれに起こる コードパスの問題も 見つけることができます AnalyzerはC/C++ と Objective-Cコードで バグを発見しSwiftと Objective-Cが混在する プロジェクトでも同様です それではAnalyzerが Appで動作するのを 見てみましょう SwiftとObjective-Cの 太陽系を探索する 私が書いた既存のAppを 改善します これはAppのXcode プロジェクトです Static Analyzerを 実行して コードに問題がないか 確認します 実行は簡単です [Product]で[Analyze] を選択するか Command+Shift+Bを 実行します
Xcodeのステータスバーで Analyzerの動作が見れます プロジェクトを分析するのは ビルドによく似ています Analyzerは アクティブな スキームのターゲットにある すべてのソースファイルを スキャンし バグを探します ステータスにあるように Analyzerはプロジェクトで 問題を確認しました XcodeのIssue Navigatorで 詳細を確認することができます ご覧いただいたように プロジェクト上Analyzerは ワンクリックで実行できます このワンクリックで セキュリティの問題 論理的なバグ APIの誤用など ほかにもいろいろなバグを 見つけることができます Analyzerはバグを 見つけるだけでなく その説明もできるのです Appで見つけた バグに戻って それを理解しましょう 問題はObjective-Cの positionAtDateのメソッド にあり、予期せぬnilを 戻してくることです メソッドの定義によれば 戻り価はnon-nullで あるはずです しかし どのように このメソッドは nilを戻してくるのかを 理解したいと思います Analyzerの問題を 拡大して バグに至る イベントの一連の流れを 見ることができます イベントはエディタ上 それが生じた場所で ステートメントの横に 表示されます 矢印はイベントの順番を 示しています このレポートは下から上に 読む方が簡単だと思います 最後のイベントでは 返された値positionが nilと示されています 前述のイベントでは positionを初期化する そのレシーバーがnilなので regularPositionAtDateが 呼び出されないのが 原因だとわかりました
矢印を見ると、 これはswitchの デフォルトケースに 沿って起こります。 レポートの冒頭に戻ると レシーバーオブジェクトは nilに初期化され デフォルトのケースでも そのままになっています さて switchの中で 球状またはイレギュラーな オブジェクトを扱っていない と理解しています
これを解決するために デフォルトのケースを 球状のケースと 同じにしようと思います Analyzerを再実行し 問題の解決を確認します
このバグがAppの開発中に 発見されて安心しました これは、非null値を返すよう 注釈されたObjective-C メソッドからnilを返すと そのメソッドがSwiftから 呼び出されたときに 予期しない実行時の動作が 発生する可能性があるためで コードではこれが起こります ありがたいことに Static Analyzerの実行で バグがApp上でユーザーに 影響する前に見つかりました Xcode 13では Analyzerがさらに改良され いくつかの新しいcheckが 追加されています Analyzerはコードでより多く 論理バグを検出できます それは 無限ループや 不要な分岐条件などの 冗長なコードを 検出することができます アサートの副作用を報告したり C++コードで移動演算子や 前進演算子の使用上の エラーを検出できます 新しいcheckの一部は AppleのClangコンパイラに オープンソースで 提供されています 新しいcheckが検出できる バグを見てみましょう 一般的に コードに対する 期待値を検証するには アサートを使用するのが 良い方法です ただし アサートには変数や メモリへの書き込みなどの 副作用がないことを 確認する必要があります 例えば 天体の配列を走査し 月を持つ天体の数を カウントするコードを 考えてみましょう これには月をもつ天体の数が 惑星の数以下であることを チェックするNSAssertを 搭載しています しかし このアサートには 月を持つオブジェクトを 追跡するカウンタを増やす という副作用があります このようなアップデートは リリース用のビルド構成で 失われる可能性があり コードの実行速度を 上げるためにアサートを 無効にすることができます そのため このコードは リリースビルドでカウンタを 全くインクリメントしない 可能性があります このようなバグは デバッグビルドでは 表示されないため 開発中に 見逃すことがあります Xcode 13からは Analyzerが コードにあるそのような 問題を見つけ出し 報告することができます このチェックは NSAssertsだけでなく CやC++のアサートにも 有効です このようなバグの修正は 簡単で ここに示すように 副作用をアサートの 外に移動させるだけです。
無限ループも よくあるバグです 複雑なロジックのループがあると このような現象が 起こることがあります 例えば ここで紹介する 入れ子式のループは 2次元のグリッドに値を 入力しようとするものです これは実際の ループカウンタであるcolumn ではなく 変数 value が 内部ループによって増加する というバグを隠しています Analyzerはそのようなミスを 検知して説明してくれます
このバグは 一度見つけたら 簡単に直すことができます valueをcolumnに 置き換えるだけです これらのチェックは 単純なミスを見つけますが 実際にはバグが 見つかりました それらを利用して Appの開発中に バグを見つけ修正することも できるようになりました Xcodeは 開発ワークフローに 合わせAnalyzerを微調整する カスタマイズ機能を 多く持っています プロジェクトビルド設定から すべてのビルド時に Analyzerを 実行させることができます 関連する設定を 素早く絞り込むには 検索機能を利用します 例えばanalysisを 検索キーワードにすると Analyzerに関連する 選択肢だけ見れます
[ビルド中の分析]を 有効にするには ビルドの設定を オンにするだけです インクリメンタルビルドと 同様に変更された ファイルのみを対象に 解析を行います これにより コード変更後の Analyzerの実行が 迅速かつ容易になりました Analyzerにはシャロ- ディープ2つのモードがあり シャローモードは高速ですが 複数の機能にまたがる バグの探索を行いません このモードは ビルドや解析の時間が 限られているプロジェクトで 使用してください 先ほど述べたように Analyzerには多種の バグを見つける チェックがあり その中には 選択するものもあります ビルド設定から選択的に チェックを有効または無効に することで プロジェクトに 適したチェックを 微調整することができます 例えば プロジェクトに セキュリティ上重要なコード があればセキュリティの問題 のチェック機能を選びます 一部の問題が自分のコードに 関係ないと判断した場合は 有用性の低いチェックを 個別に無効にしても 他のチェックの恩恵を 受けることができます
プロジェクト全体でなく 1つのファイルを解析する こともできます で 分析ファイルを選択します プロジェクトを ビルドすることなく 変更内容を素早く チェックすることができます これは特にヘッダーファイル を修正する際に便利です それをインポートする全ての ファイル再分析を省略します XcodeのStatic Analyzerは 開発の非常に早い段階で コードのバグを 発見することができます クリックするだけで実行でき さまざまなバグを見つけます ワークフローにあわせて必ず カスタマイズしてください Xcode 13ではAnalyzerを さらに改良し 論理バグを 見つける多くの新しい チェックを追加しました AnalyzerでAppのバグが ユーザーに行く前に 修正しましょう ありがとうございました WWDCを楽しんでください [アップテンポの音楽]
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。