###概要
今更ながらCarthage使ってAlamofireを入れてみたら、死ぬほどハマったのでメモ。
いろんなサイトを見て設定をああでもないこうでもない、と変えて四苦八苦。
設定を変えた初回は起動するけど、2回目以降は確実に
dyld: Library not loaded: @rpath/Alamofire.framework/Alamofire Reason: image not found
のエラーを吐いて死ぬ。
###環境
Xcode 8.2.1
Carthage 0.19.1
###とりあえず動かすための対処法
困ったのでさらにいろいろ調べた結果、下記の設定を適用すればうまく動くことがわかった。
#####ターゲットのGeneral
- Embedded BinariesにAlamofireを追加
- Linked Frameworks and LibrariesにもAlamofireが追加される
#####ターゲットのBuild Settings
- LinkingのRunpath Search Pathsに「@loader_path/../Frameworks」を追加
#####ターゲットのBuild Phases
- Embed FrameworksにAlamofireがあることを確認
- Copy only when installingのチェックはしない
- Link Binary With LibrariesにAlamofireがなければ追加
- 左上の+ボタンからRun Scriptを追加して
- 1行目に「/usr/local/bin/carthage copy-frameworks」を追加
「Run script only when installing」のチェックを入れる- Input Files下の+から「$(SRCROOT)/Carthage/Build/iOS/AlamoFire.framework」を追加
で、Cleanしてから実行。
これで動く。
###問題点
コメントで頂いたとおりRun script〜のチェックを入れているとストアへのアップが失敗するため、アップ前に外してやる必要があるとのこと。
今のところ解決法が見当たらないので、このまま進めることにしたが、面倒だしミスも出そうでちょっと悩んでしまう。
さらに色々といじったところ、チェックを外しても正常動作するようになった。
結局原因は謎のまま。
で、これで話が終わらないのが苦しいところで、fabric配布用のアーカイブを作ったところ、OrganizerのOther itemsに入れられてしまっており、iOSプロジェクトとして認識されていない模様。
まだ問題がありそうだが、かなり探しても解決方法が見つからない…
#####Cocoapods併用による問題か?
Cocoapodsに含まれるプロジェクトのSkip Installは全部Yesになってた。
ここを参考にヘッダーを削除してみたら、ビルドが通らない。
(2017/2/28 17:47現在)まだ問題は継続してる。何が問題なんだろう。
(2017/3/1 15:18追記)
ようやく解決。原因は結局、メインターゲットのDeployment>Installation Directoryが空になっていたことだった。CocoapPodsともCarthageとも何の関係もなかったので拍子抜け。
ビルドログの比較で気づいた、長かった…
###参考にしたサイトなど
http://xyk.hatenablog.com/entry/2015/10/11/115714
http://edy.hatenablog.com/entry/2015/05/17/172139
http://qiita.com/kakipo/items/3cd87e00bc96bc3888b2