問題
親プロジェクトに対して埋め込みのCocoa Touch Framework
を実機デバックしようとすると
dyld: Library not loaded: @rpath/freamwork.framework/freamwork
Referenced from: /var/containers/Bundle/Application/4CD9C96B-257C-4A75-B2C5-581490DB904B/freamwork_sample.app/freamwork_sample
Reason: image not found
という実行時エラーが起きてアプリがクラッシュする。
この問題はシミュレータでは起きない。
解決方法
親project -> General -> Embedded Binries
に、子project.framework
を追加する。
↑+ボタンを押す。
↑今回の例ではfreamwork.freamwork
を選択して親プロジェクトのEmbedded Binries
に追加する。
引っかかりどころ
親project -> Build Phases -> Link Binary With Libraries
に子project.framework
を追加すればOKかと思ってた
多分.freamwork
ファイルを直接Add To File
するだけなら、ここに追加するだけで大丈夫なはず。
今回のように.xcodeproj
ファイルごと埋め込みライブラリとしてビルドする場合には、実機&Archiveでは上記の対応が必要になるっぽい。
そもそも埋め込みライブラリを作る方法
Cocoa Touch Framework
を作りたい場合に、完全に別プロジェクトとしてビルドして、生成して.freamwork
ファイルを毎回親プロジェクトにコピーしてもいいですけど、できれば同じプロジェクトのように作業したい。
ブレークポイントとかで止まってくれるように。
そういう場合には、あらかじめ作成しておいたCocoa Touch Framework
を親プロジェクトにAdd File To
するだけで、簡単に同じワークススペースで作業できるようになる。
↑今回の例ではfreamwork.xcodeproj
をAddする。
ちなみに、Copy item into ...
はチェックつけない方が良いとおもう。(プロジェクトファイルが複製されると、意図していない変更などややこしくなりそう)
あとがき
最近の情報がなかなか情報が見つからず(2014くらいの情報しかない。というかシミュレータと実機両方でビルドできるターゲットを作ろう!みたいな記事しかない)、丸二日解決に時間を要しました・・・
自作フレームワークを作っている同じ悩みを抱えている人の助けになれば