Xcode6 で Framework を作成する[iPhone]

本記事は参考元サイト様を敬愛し、参考元サイト様を参照していただくことをベースに作成しています。
自身の備忘録である意味合いが強いため、説明不足な点や誤りがあるかもしれないこと、
文章のみの説明となりますこと、ご留意ください。


[追記 14/12/9]
本記事では、私が試したXcode6でのFramework作成方法を紹介していますが、以下のサイト様を参考にした方が問題なくFrameworkを作成できると思います。
むしろ私の記事を参考にすると、つまずく可能性大ですorz

MoonMt.Lab IT開発技術 調査報告書 – iOSアプリ開発においてFrameworkを自作する方法

もし、↑のサイト様でできない!って方は、恐らく
「ヘッダーファイルを可視にする必要がある」 「Releaseビルドする必要がある」
あたりでつまずいてるのではないでしょうか? その際は、こちらをご覧ください。


はじめに

  • 汎用性の高い機能を切り出したい
  • Frameworkとして配布したいけど、実装部分は見られたくない

なんてときにライブラリ化、Framework化したくなります。
今回はそのやり方に苦戦したので備忘録がてら記事にします。

調べてみてアレコレ

deployment target がiOS8以上の場合
→ 公式テンプレ「Cocoa Touch Framework」でFramework作成をする

deployment target がiOS8未満の場合
→「Cocoa Touch Static Library」を使って自作でFrameworkを作成する

 
XCODE5以前のFramework作成は、公式テンプレもなく
「Cocoa Touch Static Library」であれこれ面倒な設定をしないといけなかったようです。

XCODE6では、公式に「Cocoa Touch Framework」というテンプレが用意され、
簡単にFrameworkを作成できるようです。

「Cocoa Touch Framework」での作成については、
第58回 Cocoa勉強会関西でXcode6のFramework Templateについて話した
が大変参考になります。

しかし、deployment target がiOS8以上でないと使えないらしいとのご意見がありました。
https://twitter.com/climbappdev/status/502224614836039680

実際に私も公式テンプレの方法でチャレンジしたところ、手元のデバッグ用iPhoneがiOS7.1だったために使えませんでした。Framework自体は作成できますが、作成したFrameworkを使ったプロジェクトのアプリをデバッグ用iPhoneで起動できません。build suceeded のあとにデバック画面になり、以下のエラーが発生してしまいます。

このエラーは、例えばiOS8以降にしか対応していないframeworkなどを使用して
iOS8より前のバージョンをターゲットにしていることで起きることがあるようです。
要はバージョン適応外のときにでるみたい。(下記 参考記事)

http://stackoverflow.com/questions/10325529/which-is-the-cause-for-dylddyld-fatal-error-a-incompatible-api-on-ios
http://omegapoint.cocolog-nifty.com/blog/2012/09/xcode-441—iph.html

iOS8以上でないと使えないとのご意見があることから私のエラーはまさにこれかと思われます。
今回、作成するFrameworkは、私的な都合でiOS8以前でも使用したかったことから
手元のiPhoneをiOS8へバージョンアップという選択肢は却下しました。

というわけで、公式テンプレを使わずに、「Cocoa Touch Static Library」で
あれこれ面倒な設定をしてFrameworkを作成する方法を採用しました。
もし、deployment target がiOS8以上でも問題ないという方は、公式テンプレを使うと良いと思います。
もし、公式テンプレでもiOS8以前で動く方法がありましたら教えてくださいm(_ _)m
 


<広告>



「Cocoa Touch Static Library」を使って自作でFrameworkを作成しよう

ここまでが前置きでした。長くてすみません。

「Cocoa Touch Static Library」を使った方法は、こちらを参考にさせていただきました。
[iPhoneアプリ開発]自作Frameworkをつくる

XCODE4.6向けに作成された記事ですが、XCODE6でも問題なくFrameworkを作成できました。
それに必要な手順が漏れなく記載されている(←ここ大事です)記事であると思いました。

私は、上記ページの第1回〜第4回を参考にしました。
参考にした中で、私が思う(ハマったw )各回のポイントや補足を以下に記載しますので、
私のこの記事を参考にされている方は、上記ページと私のポイントを参考にしてください。

第1回 プロジェクトを作る

ここで作成する「Headers」「Classes」にFramework化したい機能の ***.h ***.m をFinder上でコピーします。
次にXCODE上の「Headers」「Classes」グループで二本指タッチしてAdd File to ***を選択して***.h ***.m を追加します。

第2回 Property Listを作る

作成する Info.plist を編集します。
上記サイトでは、CFBundleNameなどに例として「LWPdfKit」を設定しています。
この「LWPdfKit」を作成するFramework名に修正します。
CFBundleIdentifierやCopyrightも自身のものに修正しましょう。

第3回 Command Line Tools

すでにインストールされている方は不要です。
Command Line Toolsは、第4回で使用するスクリプトの動作に必要になるのかと思います。
※私はすでにインストールしていたので本当にそうなのかわかりません

第4回 Targetを作る

サイトの説明でも注意書きがありますが、スクリプト上部にある

のパスを要確認です。
スクリプト?よくわからない、とりあえずそのままコピペだー!
という方は、ここを見落としてスクリプトでエラーとなります。

さらにビルドする前にもうひとつポイントがあります。
以下のサイト様に記載があります。

iOSのFrameworkを簡単に作れるiOS-Universal-Framework

記事後半の「ヘッダーファイルを可視にする必要がある」「Releaseビルドする必要がある」の手順をご確認ください。

この手順忘れるとFrameworkを使用する側のビルドで

のようなビルドエラーに悩まされます。

ここまで進んだところで、ビルドします。
ビルドが成功すれば、プロジェクトフォルダ内に「framework」フォルダが作成され、
その中に ***.framework が作成されます。
 

作成したframeworkを使用する

Targetの設定で、General または、Build Phase の Link Binary With Libraries で
作成したframeworkを追加します。

Frameworkの機能を使用したいファイルにて

のようにインポートするだけで使うことができます!
 

あとがき

参考元サイト様を行き来することになり、多少見づらい構成の記事となり
ご迷惑おかけしたと思いますが、少しでも参考になればと思います。

ちなみにさきほど紹介した iOSのFrameworkを簡単に作れるiOS-Universal-Framework
簡単にframeworkを作成できるテンプレート(GitHubに公開されてる)
がありますが、私の環境では動作しませんでした。
原因はテンプレが古いのか、私のミスなのかなーと思います。
 

以上です。
 


<広告>


コメントを残す

メールアドレスが公開されることはありません。