at_yasu's blog

ロード的なことを

iOS 用Framework作成

XCode4 の話です。ほぼ、 xcatsan さんの Cocoaの日々: [iOS] Static Library (5) Frameworkを作成する に沿ってます。

ターミナルから操作するのを前提。

TARGET_NAME はスタティックライブラリを作成するターゲットですので注意。

下記のスクリプトは、 GitHub - a-yasui/MyObjC-Extension: My Objective-C's object extension にて使用している分です。

#
# Create the iOS Library Framework.
#
# Reference: http://cocoadays.blogspot.com/2010/11/ios-static-library-5-framework.html
# Copyright (c) 2011 a.yasui <a.yasui+github@gmail.com>
#
#--------------------------------------------------------------------
echo "[0] Framework: Preparing ..."
#--------------------------------------------------------------------
TARGET_NAME="ATYSExt"
FRAMEWORK_NAME="lib${TARGET_NAME}"
BUILD_TARGET_NAME=$FRAMEWORK_NAME
FRAMEWORK_VERSION_NUMBER="1.0"
FRAMEWORK_VERSION=A
FRAMEWORK_BUILD_PATH="${TARGET_BUILD_DIR}"
FRAMEWORK_DIR="${FRAMEWORK_BUILD_PATH}/${FRAMEWORK_NAME}.framework"
PACKAGENAME="${FRAMEWORK_NAME}.${FRAMEWORK_VERSION_NUMBER}.zip"
INSTALL_DIR="${PROJECT_DIR}/iOSframework-${CONFIGURATION}/"
[ ! -d $INSTALL_DIR ] && mkdir -p $INSTALL_DIR;
FRAMEWORK_INSTALL_DIR="${INSTALL_DIR}/${FRAMEWORK_NAME}.framework"
PARENT_PLATFORM="${PARENT_PLATFORM}"


#--------------------------------------------------------------------
echo "[0] check the already installed?"
#--------------------------------------------------------------------
if [ -d "${FRAMEWORK_INSTALL_DIR}" ]; then
rm -rf ${FRAMEWORK_INSTALL_DIR};
echo " Delete file ${FRAMEWORK_INSTALL_DIR}."
fi

echo "TARGET_BUILD_DIR: ${TARGET_BUILD_DIR}"

#--------------------------------------------------------------------
echo "[1] Framework: Building libraries ..."
#--------------------------------------------------------------------
xcodebuild -target ${TARGET_NAME} clean;
xcodebuild -configuration ${CONFIGURATION} -target ${TARGET_NAME} \
-sdk iphonesimulator${IPHONEOS_DEPLOYMENT_TARGET} \
SYMROOT="${SYMROOT}" DSTROOT="${FRAMEWORK_BUILD_PATH}" install
[ $? != 0 ] && exit 1

xcodebuild -configuration ${CONFIGURATION} -target ${TARGET_NAME} \
-sdk iphoneos${IPHONEOS_DEPLOYMENT_TARGET} \
SYMROOT="${SYMROOT}" DSTROOT="${FRAMEWORK_BUILD_PATH}" install
[ $? != 0 ] && exit 1
#  DSTROOT="${FRAMEWORK_BUILD_PATH}"
#echo "Framework: Cleaning framework..."
#[ -d "${FRAMEWORK_BUILD_PATH}" ] && rm -rf "${FRAMEWORK_BUILD_PATH}"

rm -rf ${FRAMEWORK_DIR};

echo "Already install framework is cleanning..."
[ -d "${FRAMEWORK_INSTALL_DIR}" ] && rm -rf "${FRAMEWORK_INSTALL_DIR}"

#--------------------------------------------------------------------
echo "[2] Framework: Setting up directories..."
#--------------------------------------------------------------------
mkdir -p ${FRAMEWORK_DIR}/Versions/${FRAMEWORK_VERSION}/{Resources,Headers}
echo "mkdir -p ${FRAMEWORK_DIR}/Versions/${FRAMEWORK_VERSION}/{Resources,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..."
#--------------------------------------------------------------------
echo "Framework_build_path: ${FRAMEWORK_BUILD_PATH}"
echo "sourceroot: ${SRCROOT}"
echo "BUILD_ROOT: ${BUILD_ROOT}"

lipo -create \
${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${FRAMEWORK_NAME}.a \
${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${FRAMEWORK_NAME}.a \
-o "${FRAMEWORK_DIR}/Versions/Current/${FRAMEWORK_NAME}"

#echo "${FRAMEWORK_BUILD_PATH}++${SRCROOT}++/build/../++${CONFIGURATION}++-++iphoneos/++${FRAMEWORK_NAME}++.a "
#cp "${FRAMEWORK_BUILD_PATH}/${EXECUTABLE_NAME}" "${FRAMEWORK_DIR}/Versions/Current/${FRAMEWORK_NAME}"

#--------------------------------------------------------------------
echo "[5] Framework: Copying assets into current version..."
#--------------------------------------------------------------------
PUBLIC_HEADERS_FOLDER_PATH="/usr/local/include/${FRAMEWORK_NAME}/"
cp -r "${FRAMEWORK_BUILD_PATH}${PUBLIC_HEADERS_FOLDER_PATH}" ${FRAMEWORK_DIR}/Headers/
cp "${TARGET_NAME}-Info.plist" ${FRAMEWORK_DIR}/Resources/Info.plist

#--------------------------------------------------------------------
echo "[6] Framework: Packaging framework..."
#--------------------------------------------------------------------
cp -R "${FRAMEWORK_DIR}" "${FRAMEWORK_INSTALL_DIR}"
#cd ${FRAMEWORK_BUILD_PATH}
#zip -ry ${PACKAGENAME} $(basename $FRAMEWORK_DIR)