[iPhoneアプリ開発]自作Frameworkをつくる(第6回 Frameworkを完成させる)


[iPhoneアプリ開発]自作Frameworkをつくる シリーズ(Xcode 4.6対応)
第1回 プロジェクトを作る
第2回 Property Listを作る
第3回 Command Line Tools
第4回 Targetを作る
第5回 Workspaceを作る
《今回》第6回 Frameworkを完成させる
第7回 リンカフラグ


前回は、Workspaceを作成し、「元のProject」と「新たなFramework」を同一のXcode上で扱えるようにしました。
今回は、いよいよライブラリを切り出して、“Frameworkになっちゃった”まで行います。
最終回・・・のつもりです。

1.切り出すライブラリを確認する

図の「SYPDFViewer」フォルダ内のファイル群を切り出します。
これらは、

  • 外部からアクセスされるのは、「SYPDFViewerViewController」だけ
  • xibファイル等は一切使っていない

という特徴があり、疎結合のレベルから言えば相当高レベルになっています。

これは個人的な好みなのですが、Interface Builderやstoryboardが“肌に合わない”ので、元々全く使っていません。すべてコードで書いています。
実は結果的に、これがメリットとなってFrameworkへの切り分けが容易になっています。

なので、ここまで読んで「実はxibをどこに置けばいいか分からない」という人がいましたら、他に当たってください。私はxibを1回も使ったことがない(練習すら途中で諦めた)ので分かりません。

2.切り出すファイルを手でコピーする
Finderを開いて、さっさとコピーをしちゃいます。図のように、「Classes」「Headers」に分けてコピーします。
何かあったら困るので、“移動はせずにコピー”します。

3.元Projectでコンパイル対象から外す
Projectを選択します。「Build Phases > Compile Sources」をクリックします。

ファイルを選択します。

右下に「ー」があるので、クリックします。

4.元Projectをビルドします。
Compile対象から外したので、エラーになっているはずです。なっていなかったら、「Clean > Build」をしてみてください。

Frameworkが正しく作成されれば、このエラーが消えます。

5.Frameworkにファイルを追加する
Projectは“ファイルの参照”ですので、Finderでフォルダにファイルを置いただけでは、存在を認めてもらえません。

そこで、Projectツリーの「Headers」フォルダを右クリックして、「Add Files to “プロジェクト名”…」を選択します。

ファイル選択画面が開きますので、まとめて追加します(ファイルのコピーを選択するチェックボックスがありますが、チェックは外します)。
追加されました。

同様に「Classes」フォルダにもファイルを追加します。

6.Frameworkをビルドしてみます
図のようにSchemeを選択して、Buildします。ここら辺は、毎回「Clean > Build」が良いと思います。

画面キャプチャを取るのが面倒なくらい、エラーが出ます。
理由は、UIViewなどを使用しているため、必要なUIKit等のFrameworkがリンクされていないからです。

7.必要なFrameworkをリンクする
Projectをクリックして、図の画面を表示します。

左下の「+」をクリックして、必要なFrameworkを追加します。

Projectツリーにも追加されています。

最上部に追加されているので、ドラッグして移動しておきましょう。

8.***-Prefix.pchを編集する
本来“Frameworkは独立した1つの機能を提供するもの”なので、今作ろうとしているFrameworkが依存する他のFrameworkについて、それらを読み込んだり読み込まなかったりなどの制御が不要なはずです。基本的には、すべて読み込んで良いはずです。
なので、最初から存在する「Supporting Files > LWPdfKit-Prefix.pch」に書き込んでしまいます。
元はこれ。

こうする。

コレ以外にも、様々な「#define」をかき込むことになると思います。

9.FrameworkをBuildする

コピーしたファイルに必要なFramewotkやヘッダファイルが漏れなく準備されていれば、ビルドが通るはずです。

10.元ProjectにFrameworkをリンクする
元Projectを選択し、図の画面を表示します。
既に多くのFrameworkがリンクされていたりします。

左下の「+」をクリックします。
図のようなダイアログが表示されます。

左下の「Add Other…」をクリックします。
図のように、「LWPdfKit.framework」フォルダを選択します。(“zipの横”であれば間違いありません。)

Projectツリーに追加され、Headerファイルが表示されます。

11.「#import」を書き換える


#import "SYPDFViewerViewController.h"


#import <LWPdfKit/SYPDFViewerViewController.h>

に変更します。

参照している箇所をすべて書き換えることになります。
独立性の高いモジュールの場合は、それほど多くはないでしょう。

12.実行する
PDF Viewerが動いています。
(前にエラーが表示されることを確認していましたよね?)

13.切り出したファイルを消去する
動くことが分かったので、元Projectからファイルを消去しちゃいます。

以上です。

The following two tabs change content below.

谷中

システム開発チームと検証チームのマネージャー。 「疎結合 小さなクラス 分業制」 を裏スローガンとし、これが実現できてこそ、幸せな開発者人生を過ごせるという確信のもと、上流から設計まで口を挟んだり挟まなかったりしています。

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>