[CocoaPods] use_frameworks! で作ったライブラリのバンドル

2015年6月1日月曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

CocoaPodsで自作ライブラリを作っているケースで、swift対応のためにフレームワーク化(use_framework!)するとバンドルはその中に入ってしまう。

Example.app
 ├── LKPostingQueueManager.framework
 │   ├── Info.plist
 │   ├── LKPostingQueueManager
 │   └── Resources.bundle ←ここにくる(以前はもっと上の階層)


プログラムでこれを参照するにはメインバンドル配下では見つからない。
let path = NSBundle.mainBundle().pathForResource("Resource", ofType: "bundle")! → ここで nilでクラッシュ
let bundle = NSBundle(path: path)

最初にフレームワークのバンドル(クラスが含まれるバンドル)を取って、そこから引き出すのがポイント。
let frameworkBundle = NSBundle(forClass: LKPostingQueueManager.self)
let path = frameworkBundle.pathForResource("Resources", ofType: "bundle")!
let bundle = NSBundle(path: path)


関連

Resource Bundle の作り方と CocoaPodsでの配布
※上記はフレームワーク化する前の話。フレークワーク化するとこんな面倒は入らず設定だけで済む。
s.resource_bundles = { 
    'Resources' => ['Pod/Assets/*']
  }
みたいな。

Responses

Leave a Response

人気の投稿(過去 30日間)