[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.

ロゴスウェア

ロゴスウェア株式会社は、インターネットや情報技術を使って学習に革新的進化をもたらす製品を開発することを目標に、2001年7月に設立されたテクノロジー系ベンチャー企業です。

Comments are closed.