Frameworkについて

Post on 31-May-2015

130 views 6 download

description

関東第63回Cocoa勉強会 iOS向けのフレームワーク化に挑戦

Transcript of Frameworkについて

2013/12/7!

Frameworkについて Bitz Co., Ltd. 村上幸雄

• 村上幸雄 • @m_yukio • ビッツ有限会社���http://www.bitz.co.jp/!

本日の内容

✤  Frameworkについて!

✤  SimpleChartについて!

✤  SimpleChartのFramework化

Frameworkについて

✤  ライブラリとヘッダーファイル、リソース、ドキュメントをパッケージ化できて、利用者の取り扱いが楽になる。!

✤  ライブラリが利用している他のライブラリを自身のライブラリに含めたくない場合に便利。

最も簡単なフレームワークのディレクトリ構成

MyFramework.framework/ Frameworks -> Versions/Current/Frameworks Headers -> Versions/Current/Headers MyFramework -> Versions/Current/MyFramework Resources -> Versions/Current/Resources Versions/ A/ Frameworks/ OtherFramework.framework Headers/ MyHeader.h MyFramework Resources/ English.lproj/ Documentation InfoPlist.strings Info.plist Current -> A!

SimpleChartについて

S7GraphView!

残念ながらサイトは閉鎖されている

http://code.google.com/p/s7graphview/!

SimpleChart!

https://github.com/murakami/SimpleChart !

ソースファイルはヘッダを含めて2個のため、ソースファイルをプロジェクトに追加して利用を想定。

SimpleChartのFramework化

プロジェクトの生成

プロジェクトのディレクトリ構成

Info.plist!

フレームワーク用ターゲット Aggregate!

スクリプトを追加

#!/bin/sh!!# ==============================!# 変数設定!# ==============================!#FRAMEWORK_NAME=$(/usr/libexec/PlistBuddy -c "Print CFBundleName" ${INFOPLIST})!FRAMEWORK_NAME='SimpleChart'!INFOPLIST="${FRAMEWORK_NAME}/Resources/Info.plist"!BUILD_TARGET_NAME=${FRAMEWORK_NAME} !#FRAMEWORK_BUILD_CONFIGURATION= ${CONFIGURATION}!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"!!# ==============================!# ビルド!# ==============================!echo xcodebuild -configuration ${FRAMEWORK_BUILD_CONFIGURATION} -project ${PROJECT_NAME}.xcodeproj \ !

"-target ${BUILD_TARGET_NAME} clean !xcodebuild -configuration ${FRAMEWORK_BUILD_CONFIGURATION} -project ${PROJECT_NAME}.xcodeproj \ !

"-target ${BUILD_TARGET_NAME} clean !echo xcodebuild -configuration ${FRAMEWORK_BUILD_CONFIGURATION} -project ${PROJECT_NAME}.xcodeproj \ !

"-target ${BUILD_TARGET_NAME} -sdk iphonesimulator${IPHONEOS_DEPLOYMENT_TARGET} !xcodebuild -configuration ${FRAMEWORK_BUILD_CONFIGURATION} -project ${PROJECT_NAME}.xcodeproj \ !

"-target ${BUILD_TARGET_NAME} -sdk iphonesimulator${IPHONEOS_DEPLOYMENT_TARGET} ![ $? != 0 ] && exit 1 !echo xcodebuild -configuration ${FRAMEWORK_BUILD_CONFIGURATION} -project ${PROJECT_NAME}.xcodeproj \ !

"-target ${BUILD_TARGET_NAME} -sdk iphoneos${IPHONEOS_DEPLOYMENT_TARGET} !xcodebuild -configuration ${FRAMEWORK_BUILD_CONFIGURATION} -project ${PROJECT_NAME}.xcodeproj \ !

"-target ${BUILD_TARGET_NAME} -sdk iphoneos${IPHONEOS_DEPLOYMENT_TARGET} ![ $? != 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) !!# End Of File!

実機とシミュレータの統合

ヘッダーとリソースの配置