iPhoneのframework、libraryを作成して使う

このエントリーをはてなブックマークに追加
はてなブックマーク - iPhoneのframework、libraryを作成して使う
Share on Facebook
Post to Google Buzz
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip
Share on FriendFeed
[`grow` not found]

iPhoneでframework(library)を作成する方法

iPhoneでも複数のプロジェクトを作成する場合は(とくに企業)、
自作のframework(library)を作成して、それを利用する方法が好ましい。

frameworkの依存関係を自動化するライブラリーにcocoapodというものがありますが、
それは別の記事で紹介したいと思います。

それでは早速iPhoneでframework(library)を作成する方法に移りましょう

作成手順

framework_create_1.png

 

Nextをおして進みます

 

framework_create_2.png

最後の作成画面ではUnit Testを入れても入れなくてもいいです。
ただ、framework化するのであれば、ユニットテストは入れておきたいところでよね。

私たちの場合はGHUnitを使用するのでどちらにしても外しています。

 

作成後、プロジェクトナビゲーターで、新しいグループを作成しています

スクリーンショット 2013 05 16 14 55

 

Headersと名前を変更します

スクリーンショット 2013 05 16 14 57

 

こんどは、グループを実際のフォルダーに割り当てます
画面の右側でアイコンをクリックしてください。

 

スクリーンショット 2013 05 16 14 57

 

フォルダーを作成して選択します

 

スクリーンショット 2013 05 16 15 45

 

選択が終わると、フォルダーのパスが表示されます

 

スクリーンショット 2013 05 16 15 45

 

その後、とりあえず最初からあるファイルは削除してしまいましょう

 

スクリーンショット 2013 05 16 15 04

 

こんな風に

 

スクリーンショット 2013 05 16 15 04

 

新しく適当なクラスを追加しました。

 

スクリーンショット 2013 05 16 15 05

 

公開したいクラスを含むヘッダーを作成します。
ファイル名はなんでもいいのですが、今回はプロジェクト名と同じにします

 

スクリーンショット 2013 05 16 15 07

 

ファイル名を変更し、Targetもチェックします
保存先の指定も間違えないように「Headers」を選んでください。

スクリーンショット 2013 05 16 15 08

 

できたHeaderファイルに先ほどのTestClass.hを読み込みます。
複数クラスファイルを作ったら「公開したい」クラス分読み込みを追加します。

 

スクリーンショット 2013 05 16 15 10

 

今度はResources「グループ」を作成しましょう

スクリーンショット 2013 05 16 15 12

 

次にプロパティリストを追加します

スクリーンショット 2013 05 16 15 13

 

Resourcesグループに保存します
(info.plistの間違いです。inf.plistってしちゃいました。)
(動作には問題ありませんが・・・)

 

スクリーンショット 2013 05 16 15 14

 

選択した状態では、内容を「一気に追加」するのは難しいので、
表示方法をSource Code形式にします。

スクリーンショット 2013 05 16 15 16

 

これで、貼り付けができますので、以下のコードを貼り付けてください。

 

<?xml version=“1.0” encoding=“UTF-8″?>

<!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN”http://www.apple.com/DTDs/PropertyList-1.0.dtd>

<plist version=“1.0”>

<dict>

<key>CFBundleDevelopmentRegion</key>

<string>English</string>

<key>CFBundleExecutable</key>

<string>elnLib</string>

<key>CFBundleGetInfoString</key>

<string>elnLib</string>

<key>CFBundleIdentifier</key>

<string>org.eui-jp.app</string>

<key>CFBundleInfoDictionaryVersion</key>

<string>6.0</string>

<key>CFBundleName</key>

<string>elnLib</string>

<key>CFBundlePackageType</key>

<string>FMWK</string>

<key>CFBundleShortVersionString</key>

<string>1.0.0</string>

<key>CFBundleSignature</key>

<string>????</string>

<key>CFBundleVersion</key>

<string>1</string>

<key>NSHumanReadableCopyright</key>

<string>Copyright EUI. All rights reserved.</string>

<key>Localization native development region</key>

<string>English</string>

<key>Executable file</key>

<string>elnLib</string>

<key>Get Info string</key>

<string>elnLib</string>

</dict>

</plist>

 

取り付けが終わったら、表示方法を通常に戻します。

スクリーンショット 2013 05 16 15 17

 

これで、プロパティのはりつけができました。

 

スクリーンショット 2013 05 16 15 18

 

内容は適時変更してください。

 

今度はターゲットの追加をしましょう。

 

スクリーンショット 2013 05 16 15 19

 

Add Targetから次の画面で
iOS -> Other -> Aggregateを選択します

スクリーンショット 2013 05 16 15 20

 

名前は、プロジェクト名+frameworkとしてみます

 

スクリーンショット 2013 05 16 15 21

 

次にできたTargetの設定を追加します。
Targetを選択し、Build Phasesから、 Add Build Phasesを選択し、Add run Scriptを選択します。

次に、三角の部分をクリックして入力表示をさせます。

 

スクリーンショット 2013 05 16 15 24

 

次にRun ScriptのShellの部分にコードを追加します。
この部分になります。

スクリーンショット 2013 05 16 15 26

 

以下の文を貼り付けてください。

 

#——————————————————————–

echo “[0] Framework: Preparing …”

#——————————————————————–

FRAMEWORK_NAME=$(/usr/libexec/PlistBuddy -c “Print CFBundleName” Info.plist)

BUILD_TARGET_NAME=$FRAMEWORK_NAME

FRAMEWORK_VERSION_NUMBER=$(/usr/libexec/PlistBuddy -c “Print CFBundleShortVersionString” Info.plist)

FRAMEWORK_VERSION=A

FRAMEWORK_BUILD_PATH=“build/${CONFIGURATION}-framework”

FRAMEWORK_DIR=“${FRAMEWORK_BUILD_PATH}/${FRAMEWORK_NAME}.framework”

PACKAGENAME=“${FRAMEWORK_NAME}.${FRAMEWORK_VERSION_NUMBER}.zip”

#——————————————————————–

echo “[1] Framework: Building libraries …”

#——————————————————————–

xcodebuild -configuration ${CONFIGURATION} -target ${BUILD_TARGET_NAME} clean

xcodebuild -configuration ${CONFIGURATION} -target ${BUILD_TARGET_NAME} \

-sdk iphonesimulator

[ $? != 0 ] && exit 1

xcodebuild -configuration ${CONFIGURATION} -target ${BUILD_TARGET_NAME} \

-sdk iphoneos

[ $? != 0 ] && exit 1

echo “Framework: Cleaning framework…”

[ -d "${FRAMEWORK_BUILD_PATH}" ] && rm -rf “${FRAMEWORK_BUILD_PATH}”

#——————————————————————–

echo “[2] Framework: Setting up directories…”

#——————————————————————–

mkdir -p ${FRAMEWORK_DIR}

mkdir -p ${FRAMEWORK_DIR}/Versions

mkdir -p ${FRAMEWORK_DIR}/Versions/${FRAMEWORK_VERSION}

mkdir -p ${FRAMEWORK_DIR}/Versions/${FRAMEWORK_VERSION}/Resources

mkdir -p ${FRAMEWORK_DIR}/Versions/${FRAMEWORK_VERSION}/Headers

#——————————————————————–

echo “[3] Framework: Creating symlinks…”

#——————————————————————–

ln -s ${FRAMEWORK_VERSION} ${FRAMEWORK_DIR}/Versions/Current

ln -s Versions/Current/Headers ${FRAMEWORK_DIR}/Headers

ln -s Versions/Current/Resources ${FRAMEWORK_DIR}/Resources

ln -s Versions/Current/${FRAMEWORK_NAME} ${FRAMEWORK_DIR}/${FRAMEWORK_NAME}

#——————————————————————–

echo “[4] Framework: Creating library…”

#——————————————————————–

lipo -create \

build/${CONFIGURATION}-iphoneos/lib${FRAMEWORK_NAME}.a \

build/${CONFIGURATION}-iphonesimulator/lib${FRAMEWORK_NAME}.a \

-o “${FRAMEWORK_DIR}/Versions/Current/${FRAMEWORK_NAME}”

#——————————————————————–

echo “[5] Framework: Copying assets into current version…”

#——————————————————————–

cp Headers/*.h ${FRAMEWORK_DIR}/Headers/

           cp Info.plist ${FRAMEWORK_DIR}/Resources/

           #——————————————————————–

           echo “[6] Framework: Packaging framework…”

           #——————————————————————–

           cd ${FRAMEWORK_BUILD_PATH}

           zip -ry ${PACKAGENAME} $(basename $FRAMEWORK_DIR)

 

そうすると、こんな感じになります

スクリーンショット 2013 05 16 15 28

 

次にBuild Settingを選択し、Header

 

なにもコードを書いていないので、とりあえずTestClass.hにメソッドを追加します

-(NSString *)sampleString;

こんな感じです。

 

スクリーンショット 2013 05 16 15 30

 

次にTestClass.mにも追加しておきましょう。

-(NSString *)sampleString {

    return@”フレームワークからの文字列です;

}

スクリーンショット 2013 05 16 15 31

 

公開したいヘッダーは物理的にHeadersフォルダーに移動しましょう。
(公開したくないものは、移動しないでOK)

 

スクリーンショット 2013 05 16 16 12

 

それではコンパイルしましょう。
実行先のTargetを変更します。

 

スクリーンショット 2013 05 16 15 32

 

最後にRunして、できあがりです。

 

スクリーンショット 2013 05 16 15 46

 

Finderで確認してみましょう

 

スクリーンショット 2013 05 16 15 47

 

Finderが開きます

 

スクリーンショット 2013 05 16 15 48

 

 

利用方法

次に、別のプロジェクトを作成しましょう。

 

スクリーンショット 2013 05 16 15 51

 

 

Copyのチェックを忘れずに。

 

スクリーンショット 2013 05 16 15 52

 

どうですか、うまく追加されましたね!!

 

スクリーンショット 2013 05 16 15 53

 

利用する場合のInclude方法は<FrameWork名/Headerファイル名>になります

 

スクリーンショット 2013 05 16 16 09 3

このようにframework(library)のクラスを利用する事ができました!!

 

 

 

関連している記事:


Copyright(c) 2010 EUI All Rights Reserved.