プログラミング雑記

いつもhello world程度

最初の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で公開しました。

先回(その2)で紹介したもの

 

アプリを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にアップロードできました。