[iPhoneアプリ開発]自作Frameworkをつくる(第4回 Targetを作る)


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


前回は、“Command Line Tools”をインストールしました。
そこで、今回は“FrameworkをBuildする”ためのTargetを作成します。

1.Targetを追加する
Projectツリーの“Project本体”をクリックします。今回は「LWPdfKit」がそれです。
クリックして少し待つのですが、下図のように表示されます。

下部にある「Add Target」をクリックします。
開いたダイアログで「iOS > Other > Aggregate」を選択し、「Next」をクリックします。

下図のように「LWPdfKit.framework」と名前をつけます。

下図のように「Target」に追加されました。

2.Run Scriptを入力する
上の手順に引き続いて、右下の「Add Build Phase」をクリックして、「Add Run Script」をクリックします。
下図のように、「Run Script」が追加されます。

上図の「Type a script or drag a script file from your workspace」と書かれている欄に下記のコードを入力します。


# ==============================
# 変数設定
# ==============================
INFOPLIST='LWPdfKit/Resources/Info.plist'
FRAMEWORK_NAME=$(/usr/libexec/PlistBuddy -c "Print CFBundleName" ${INFOPLIST})
BUILD_TARGET_NAME=$FRAMEWORK_NAME
FRAMEWORK_BUILD_CONFIGURATION="Release"
FRAMEWORK_VERSION_NUMBER=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" ${INFOPLIST})
FRAMEWORK_VERSION=A
FRAMEWORK_BUILD_PATH="Framework"
FRAMEWORK_DIR="${FRAMEWORK_BUILD_PATH}/${FRAMEWORK_NAME}.framework"
PACKAGENAME="${FRAMEWORK_NAME}.${FRAMEWORK_VERSION_NUMBER}.zip"

# ==============================
# ビルド
# ==============================
xcodebuild -configuration ${FRAMEWORK_BUILD_CONFIGURATION} -target ${BUILD_TARGET_NAME} clean
xcodebuild -configuration ${FRAMEWORK_BUILD_CONFIGURATION} -target ${BUILD_TARGET_NAME} -sdk iphonesimulator${IPHONEOS_DEPLOYMENT_TARGET}
[ $? != 0 ] && exit 1
xcodebuild -configuration ${FRAMEWORK_BUILD_CONFIGURATION} -target ${BUILD_TARGET_NAME} -sdk iphoneos
[ $? != 0 ] && exit 1

# ==============================
# ディレクトリ作成
# ==============================
[ -d "${FRAMEWORK_BUILD_PATH}" ] && rm -rf "${FRAMEWORK_BUILD_PATH}"
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
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}

# ==============================
# framework作成
# ==============================
lipo -create \
build/${FRAMEWORK_BUILD_CONFIGURATION}-iphoneos/lib${FRAMEWORK_NAME}.a \
build/${FRAMEWORK_BUILD_CONFIGURATION}-iphonesimulator/lib${FRAMEWORK_NAME}.a \
-o "${FRAMEWORK_DIR}/Versions/Current/${FRAMEWORK_NAME}"

cp -Rf ${BUILD_TARGET_NAME}/Headers/* ${FRAMEWORK_DIR}/Headers/
cp ${BUILD_TARGET_NAME}/Resources/* ${FRAMEWORK_DIR}/Resources/
cp ${INFOPLIST} ${FRAMEWORK_DIR}/Resources/
cd ${FRAMEWORK_BUILD_PATH}
chmod -fR 777 "${FRAMEWORK_NAME}.framework"
zip -ry ${PACKAGENAME} $(basename $FRAMEWORK_DIR)

注意するのは1カ所です。


INFOPLIST='LWPdfKit/Resources/Info.plist'

を正確に指定することです。
Pathが正しくないとエラーになります。この時のエラーは、“ファイルがありません”ではなく、“CFBundleNameがNullです”というようなものになります。

3.Manage Schemes
Xcodeの上部にある「Scheme(の左の方)」をクリックします。


「Manage Schemes」をクリックします。

「LWPdfKit」のチェックを外します。
代わりに「LWPdfKit.framework」をチェックします。

4.ビルド
「Product > Build」でビルドを実行します。
Finderでフォルダを見てみましょう。

ビルドが成功して、Frameworkが書き出されています。

今回はここまでとします。
これまでの作業で、“スケルトンのFrameworkがビルドされる状態”ができたことになります。
ここに、既存のファイルを移してきて、Frameworkとして切り出すことになります。
何かエラーが発生すれば、以後の作業に問題があるということが明確になります。

次回は、既存のProjectからファイルを移して、目的のFrameworkを作成します。

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>