LoginSignup
12
11

More than 5 years have passed since last update.

[Xcode] Resource Bundle の作成

Last updated at Posted at 2016-04-26

環境

ver. Xcode7.3
Date 2016/4/26

自作SDKで参照するCoreDataModelファイル(.xcdatamodeld)が 参照できない :scream:

ボトルネックとなったメソッド👇

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@".xcdatamodeldファイル名" withExtension:@"momd"];

戻り値がnilを返されてしまた

そこで参照するファイルを.bundleファイルで作成

Resource Bundle作成

新規プロジェクトから OS X -> Framework&Library -> Bundleを選択し新規に作成する

スクリーンショット 2016-04-26 20.47.43.png

ここで打ち込むProduct Nameに.bundle拡張子がついたものが実際のResourceBundleとして作成される

スクリーンショット 2016-04-26 20.49.35.png

リソースを追加

作成されたプロジェクト内にResrorceBundleに含めたいファイルを追加する

スクリーンショット 2016-04-26 20.57.58.png

プロジェクト設定を編集

プロジェクトがOSXで作成した為、(2015/4/26現在iOSプロジェクトはない)SDK設定がOSXのままになっているので変更が必要

TARGETS -> Build Settings -> Architectures -> BaseSDKをiOSに変更
変更すると依存関係がある設定は全てiOSように自動的に変更されます

変更前
スクリーンショット 2016-04-26 21.00.50.png

変更後
スクリーンショット 2016-04-26 21.04.09.png

.bundleファイルの出力先を変更

TARGETS -> Build Settings -> Build Locations -> Perconfiguration Build Products Pathを変更

デフォルトでは

$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

となっているのを

Products

に変更し、.xcodeprojがある直下に実態としてのProductsフォルダを作成

ビルドすると、作成したフォルダに.bundleが作成されます。

スクリーンショット 2016-04-26 21.15.07.png

作成した.bundleからResourceを参照する

組み込みアプリ側のTARGETS -> Build Phases -> Copy Bundle Resourcesから追加します

細かく記述すると

NSString *path = [[NSBundle mainBundle] pathForResource:@"KazuTeraResource" ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:path];
NSURL *modelURL = [bundle URLForResource:@"TestModel" withExtension:@"momd"];

これで無事URLが取得できました:smile:

12
11
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
12
11