0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

iOS/macOS のアプリでデレクトリ構造そのままをリソースにしたい場合

Posted at

以前のXcodeでは普通にフォルダをリソースとして使えていた

以前とある教育用のアプリを開発していました。教育用なので、WEBのコンテンツのように、テキスト、レイアウト、画像音声など大量のリソースのバンドルが必要となります。そうするとやはり、部、章など構造的な単位でリソースを管理した方が何かと都合がよいです。そして、同様なプロジェクトが毎年続いたので、アプリのテンプレから同様にやっていました。

ある年に、心機一転プロジェクトをスクラッチから起こす事にしました。例年と同じようにコンテンツリソースの詰まったフォルダをプロジェクトにドロップします。あれ!?グループにするかリファレンスにするか訊いてきません。キャンセルしてオプション推しながらとか、何度か試しても同じです。諦めてそのままドロップします(コピーだったか移動だったか)。

フォルダのいろが違う

ドロップしてから気がつきます。リソースのフォルダの色が他のと同じブルーとうかシアンです。これはやばいと思いますが、試しにリソースを読み込むコードを書いてみます。

読めません。

しかも、リソースを増やすと競合するようなビルドエラーがでてくるようになります。

これはやばいと思い、ビルドエラーがでない状態に戻して、実行バイナリーをバラしてみます。フォルダー構造が保たれていません。構造的なリソースがばらされて、散らばっています。あ、これはやばいと思いいろいろ試したり、スタックオーバーフローをあさったりしましたが、ピンとした回答がないので、あきらめて例年どおりプロジェクトのテンプレートから新規プロジェクトを起こしているのを続けてきました。

本日、別件で、やはり構造的なリソースが欲しいと思い再度いろいろ試した所、いろいろわかってきたので、同様に困っている人がいれば、ここに辿り着けるように、記事を書く事にしました。

スクリーンショット用のプロジェクトを作ってみる

まずは、HelloDirectoryResources という架空のプロジェクトを想定して、その中にPhotosというディレクトをドロップしてみます。Xcodeの進化のどこかで、その類の指定はできなくなっています。諦めてドロップします。

image.png

試しにビルドして、実行バンドルをバラしてしみます。Macだと「Resources」フォルダがあって上手くいったような錯覚を受けますが、実は「Photos」のディレクトリがありません。そう、フラットにバラされてビルドされています。なので、「各フォルダ」にindex.htmlのようなファイルを用意していると、名前が衝突してビルドエラーになります。

image.png

ここまでが、ここまでにわかってきた事です。

ここからは本日調べてわかった事です

今度は、Photosをルート直下にドラッグ&ドロップしてみます。

image.png

今度はグループが選べるようになりました。どちらがどちらなのでしょう。せっかくなので、「Group」を選んでみます。

image.png

そうそう、ブルーというかシアンでないフォルダができました。さて実行バンドルをバラしてみます。

image.png

ありません。

今度はGroupではなくてFolderを選んでみます。

image.png

フォルダはブルーです。が、実行するとリソース用のフォルダはばらけて存在します。

普通ならここで諦めそうですが、なんで他のプロジェクトはできて、これでは聞きないのだろうと自問しながら、調べてみます。XcodeでPhotosのフォルダを選んで、インスペクタを見てみます。

image.png

 

「!!!」  お気づきだろうか…

 

Screenshot 2025-06-12 at 4.11.00.png

見覚えのないメニューが出現

なんだか見覚えのないメニューが出現します。

Screenshot 2025-06-12 at 4.14.22.png

Target Membershipから+を押して、実行ターゲットを指定します。

Screenshot 2025-06-12 at 4.18.33.png

では、ビルドして実行バンドルをバラして見ましょう。

フォルダがあった (;_;)

image.png

ちゃんと、Resouresの直下にPhotosフォルダがあります。これでディレクトリをリソースとして扱える筈です。iOSだと、「Resources」フォルダがなくて、直にPhotosが配置されます。

こんなの普段使わなくて、一年後には思い出せないので、ここに備忘録として残す事にします。

執筆時の環境

MacOS: 15.5 (24F74)
Chip: Apple M1 Max
Xcode: Version 16.4 (16F6)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?