最初のiOSアプリがやっと完成しそう(その3):OAuth認証のクラスをアプリから切り出しスタティックライブラリ化
OAuth認証機能のライブラリ切り出し
はてなダイアリーのアプリが一通りできた後、OAuth認証の部分は、これ以降のアプリでも使い回したいので、スタディックライブラリにしようと考えました。
最初からそれを見越して、アプリ部分とライブラリ部分とに、分けて作ればよかったのですが、不慣れで最初からそんなところまで気が回る余裕が無く、アプリができてきたころに、それを2つに分離するという、面倒な作業でした。
以前は、xcodeで、アプリのProjectの中に、スタティックライブラリのProjectを取込むように構成していたのが一般的だったようですが、
現在は(xcode4.xから?)、アプリのProjectと、スタティックライブラリのProjectの両者を、上位に"Workspace"というものを作って、この下で、両者を並行して管理できるようになったようです。
早速、workspaceを新規作成し、その下に、これまで作成してきた、はてなダイアリーのアプリのProjectを読み込みました。
次に同じworkspaceの下に、スタティックライブラリ用のProjectを新規作成し追加しました。
そして、アプリの中の、OAuth認証部分の一連のクラスを、アプリのProjectの外にだし、スタディックライブラリのProject内に移しました。
アプリのProjectから、スタディックライブラリのProjectの中のクラスを参照/利用するには、それだけではだめで、いろいろ設定がいります。この方法が最初わからず、苦労しました。→詳細
やっとアプリ/スタティックライブラリ分離版で、正常に動作するようになった後、OAuth認証のスタディックライブラリ部分を、githubで公開しました。
アプリをAppStoreにアップロードするときのアーカイブ作成で問題発生
ここまで来れば、あとはアプリをAppStoreに公開するだけだ、とその準備を進めました。
遅ればせながらDeveloper Programにも登録し、iTunes Connectでアプリの登録もすませた後、アプリをアップロードするためのアーカイブを実行したところで、エラーになりました。
スタディックライブラリ側のヘッダーファイル(*.h)が、アプリ側から見つからないというエラーです。
Run, Test等(Developスキーム)では、シミュレータでも実機でも、なにも問題なく実行できていたので、アーカイブ(Releaseスキーム)でエラーになることに、面食らいました。
ぐぐってみると、他にも同様な問題があげておられる方々がおられ、xcodeでは一般的な問題のように感じました。しかし、さらに調べても、原因と有効な対策の情報があまりなく(特に日本語では)、困りました。
やっと見つけた包括的な原因/対策の記述はここです。
xcode4 - Xcode 4 can't locate public header files from static library dependancy - Stack Overflow
ここにある、下記を User Header Search Paths に追加する事で、やっと解決しました。
"$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts"
とりあえずこれで、やっとアプリをAppStoreにアップロードできました。