はじめに (対象読者・この記事でわかること)

この記事は、SwiftやiOSアプリ開発を始めたばかりの方、特にStoryboardの切り替えや新規作成時に「Could not find a storyboard named 'Main' in bundle NSBundle」というエラーに直面して困っている開発者を対象としています。

この記事を読むことで、以下の点がわかるようになります。 - エラーメッセージ「Could not find a storyboard named 'Main'」が示す本当の意味 - このエラーが発生する主要な原因と、それらがどこに潜んでいるか - Xcodeのプロジェクト設定(Generalタブ、Info.plist、ターゲットメンバーシップなど)をどのように確認・修正すれば良いか - 具体的な解決手順と、ハマりやすいポイントの対処法

開発の初期段階で遭遇しやすいこのエラーを乗り越え、スムーズなアプリ開発を進めるための一助となれば幸いです。

前提知識

この記事を読み進める上で、以下の知識があるとスムーズです。 - Xcodeの基本的な操作(プロジェクトの作成、ファイルのナビゲーションなど) - Swiftの基本的な文法 - iOSアプリのプロジェクト構成の概要(特にStoryboardの役割について)

なぜ「Main」Storyboardが見つからないエラーが発生するのか?

「Thread 1: Exception: "Could not find a storyboard named 'Main' in bundle NSBundle"」というエラーメッセージは、アプリが起動しようとした際に、指定された名前(この場合は「Main」)のStoryboardファイルをアプリの実行バンドル内で見つけられなかったことを意味します。多くの場合、開発者がデフォルトのStoryboard名を変更したり、新しいStoryboardを追加したりした際に発生します。

このエラーが発生する主な原因は、以下のいずれか、または複数の組み合わせです。

  1. プロジェクト設定と実際のファイル名の不一致: Xcodeのプロジェクト設定(特にInfo.plistまたはGeneralタブの「Main Interface」)で指定されているStoryboardの名前と、実際にプロジェクト内に存在するStoryboardファイルの名前が異なっている場合。例えば、デフォルトのMain.storyboardHome.storyboardに変更したにもかかわらず、プロジェクト設定の変更を忘れているケースです。
  2. Storyboardファイルのターゲットメンバーシップの問題: 新しくStoryboardファイルを追加した際や、既存のStoryboardが何らかの理由でアプリの「ターゲット」に含まれていない場合、ビルド時にアプリのバンドルにStoryboardファイルが組み込まれません。
  3. 大文字・小文字の間違い: 設定ファイルと実際のファイル名で大文字・小文字が異なると、システムは別のファイルと認識してしまうため、エラーが発生します。
  4. 古いビルド情報の残存: Xcodeのクリーンビルドが不足している場合、以前のビルド情報が残り、設定変更が正しく反映されないことがあります。
  5. SwiftUIプロジェクトでの誤った設定: SwiftUIでプロジェクトを始めたにもかかわらず、UIKitのStoryboard関連の設定がInfo.plistに残っている場合に発生することが稀にあります。

これらの原因を一つずつ確認し、解決していくことでエラーを解消できます。

「Could not find a storyboard named 'Main'」エラーの具体的な解決手順

このセクションでは、上記の原因に対応する形で、具体的な解決手順をステップバイステップで解説します。

ステップ1: プロジェクトのGeneral設定を確認する

Xcodeを開き、プロジェクトナビゲーターでプロジェクトを選択します。 ターゲットリストからアプリのターゲットを選択し、「General」タブを開きます。

  1. 「Deployment Info」セクションを見つけます。
  2. 「Main Interface」のドロップダウンメニューを確認します。ここに、アプリの起動時に最初にロードされるべきStoryboardの名前が指定されています。
  3. ここに入力されている名前が、実際に使いたいStoryboardファイルの名前(例: MainHomeLaunchScreenなど)と完全に一致しているか確認してください。ファイル名に.storyboardの拡張子を含める必要はありません。Xcodeが自動で補完します。
    • 例えば、MyNewApp.storyboardというStoryboardを使いたい場合、ここにはMyNewAppと入力します。
  4. 変更を行った場合は、忘れずにXcodeの保存(Command+S)を行い、アプリを再度ビルドして実行してみてください。

ステップ2: Info.plistファイルを直接確認・編集する

「General」タブでの設定は、内部的にInfo.plistファイルに反映されますが、稀に同期が取れていなかったり、より詳細な確認が必要な場合があります。

  1. プロジェクトナビゲーターでInfo.plistファイルを見つけて開きます。
  2. 以下のキーを探します(リスト形式で表示されている場合は、エントリを展開して確認します):
    • Application Scene Manifest > Scene Configuration > Application Session Role > Item 0 (Default Configuration) > Storyboard Name
      • このStoryboard Nameの値が、使用したいStoryboardファイルの名前と一致しているか確認します。
    • 古いプロジェクト形式や特定のケースでは、Main storyboard file base nameというキーが存在する場合もあります。これも同様に確認します。
  3. もしここで指定されている名前がGeneralタブの設定と異なっていたり、使用したいStoryboard名と異なる場合は、正しいStoryboard名に修正してください。
  4. また、もしSwiftUIのプロジェクトでUIKit関連のエントリが不要な場合は、Application Scene Manifest自体を削除することも検討してください(ただし、UIKitとSwiftUIを混在させる場合は必要)。

ステップ3: Storyboardファイル名とターゲットメンバーシップを確認する

Storyboardファイル自体が正しくプロジェクトに組み込まれているか、名前が間違っていないかを確認します。

  1. プロジェクトナビゲーターで、使用したいStoryboardファイル(例: Main.storyboardHome.storyboardなど)を選択します。
  2. Xcodeの右側にあるユーティリティペイン(通常は一番右端のアイコンをクリックして表示)を開き、「File Inspector」タブ(ファイルのアイコン)を選択します。
  3. 「Target Membership」セクションを見つけます。
  4. ここに表示されているターゲットリストの中で、あなたのアプリのターゲットにチェックが入っているかを確認してください。チェックが入っていない場合、そのStoryboardファイルはアプリの実行バンドルに含まれないため、アプリが見つけられずエラーになります。チェックが入っていなければ、チェックを入れてください。
  5. また、Storyboardファイルの名前自体が、ステップ1とステップ2で指定した名前と完全に一致しているか(大文字・小文字、スペル含め)再確認してください。もしファイル名を変更した場合は、それに応じてInfo.plistとGeneralタブの設定も更新する必要があります。

ステップ4: クリーンビルドとアプリの再インストール

設定を変更した後は、Xcodeの古いビルド情報が残っていることで問題が解決しないことがあります。

  1. Xcodeメニューから 「Product」 > 「Clean Build Folder」 を選択し、プロジェクトのビルドキャッシュをクリアします。
  2. もしシミュレーターや実機でアプリをすでにインストールしている場合は、一度そのアプリを削除してください。(ホーム画面でアプリアイコンを長押しし、「Appを削除」を選択)
  3. 必要であれば、Xcodeを再起動してみてください。
  4. 上記の手順を実行した後、再度アプリをビルドして実行します。

ハマった点やエラー解決

ハマった点1: Storyboard名を変更しただけではダメ!

例えば、Main.storyboardHome.storyboardにリネームした場合、ファイル名を変更するだけでなく、Xcodeのプロジェクト設定(Generalタブの「Main Interface」またはInfo.plistのStoryboard Name)も忘れずにHomeに変更する必要があります。ファイル名変更は簡単ですが、設定変更を忘れることがよくあります。

ハマった点2: 大文字・小文字の間違いは致命的!

myStoryboard.storyboardというファイル名なのに、設定ではmystoryboardと指定してしまうと、システムは別のファイルとして認識し、エラーとなります。ファイル名と設定の名前は、大文字・小文字も含めて完全に一致している必要があります。

ハマった点3: 新しいStoryboardを追加したときの「Target Membership」忘れ

新しいStoryboardファイルをプロジェクトに追加した際、Xcodeのダイアログで「Add to targets」のチェックボックスをうっかり外し忘れてしまうことがあります。この場合、ファイルはプロジェクトツリーには表示されますが、ビルド時にアプリのバンドルには含まれないため、実行時に見つからずエラーとなります。ステップ3で説明したように、ファイルインスペクタで必ず確認しましょう。

解決策

上記で解説したステップを一つずつ確認し、問題となっている設定の不一致や不足を解消してください。特に、 - Generalタブの「Main Interface」 - Info.plistStoryboard Name - 実際のStoryboardファイル名 - Storyboardファイルの「Target Membership」 これらが全て整合していることが重要です。変更後は必ず「Clean Build Folder」を行い、シミュレーター/実機上のアプリを削除してから再ビルド・実行するようにしてください。

まとめ

本記事では、iOSアプリ開発においてStoryboard変更時に発生しやすい「Could not find a storyboard named 'Main' in bundle NSBundle」というエラーについて、その原因と具体的な解決策を詳しく解説しました。

  • 設定不一致: 主な原因は、Xcodeプロジェクト設定(Generalタブ、Info.plist)で指定されたStoryboard名と、実際のファイル名との不一致です。
  • ターゲットメンバーシップ: Storyboardファイルがアプリのターゲットに正しく含まれているかどうかも重要なポイントです。
  • 厳密な一致: ファイル名と設定は大文字・小文字を含め、厳密に一致させる必要があります。
  • クリーンビルド: 設定変更後は、古いビルド情報による問題を避けるため、クリーンビルドとアプリの再インストールが不可欠です。

この記事を通して、読者の皆様は「Could not find a storyboard named 'Main'」エラーの意味を深く理解し、Xcodeのどこを確認し、どのように修正すれば良いのか、具体的な解決手順を把握できたことと思います。 今後は、プログラムからのStoryboard切り替えや、複数のStoryboardを効果的に活用する方法についても記事にする予定です。

参考資料