1.XCodeでProjectを作成
・テンプレートの”iOS”から”Framework & Library”→”Cocoa Touch Static Library”を選択。
・プロジェクト名がFrameworkの名前になるので適当に付ける。(ここではHelloWorldKitにします。)
・use automatic reference countingのチェックは付けたままでNext。(ARCを使わないならチェックを外す。)
・適当にデスクトップにでも作成。
2.Headersフォルダを作成
・適当なファイルを右クリックして”Show in Finder”を選択。
・新規フォルダを名前「Headers」で作成。
・作成したHeadersフォルダをプロジェクトに追加
3.ビルドターゲットの作成
・左下の”Add Target”をクリックし、”Aggregate”を追加。
・ターゲット名は適当(ここではHelloWorldKit.frameworkにしました。)
4.Info.plistを作成
・右クリック→New File…からProperty Listを名前Info.plistで作成
・内容は以下の用な感じで
1 |
<? xml version = "1.0" encoding = "UTF-8" ?> |
2 |
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
5 |
< key >CFBundleName</ key > |
6 |
< string >HelloWorld</ string > |
7 |
< key >CFBundleIdentifier</ key > |
8 |
< string >com.vac.HelloWorld</ string > |
9 |
< key >CFBundleInfoDictionaryVersion</ key > |
11 |
< key >CFBundleVersion</ key > |
13 |
< key >CFBundleExecutable</ key > |
14 |
< string >HelloWorld</ string > |
15 |
< key >CFBundleGetInfoString</ key > |
16 |
< string >HelloWorld</ string > |
17 |
< key >NSPrincipalClass</ key > |
19 |
< key >CFBundlePackageType</ key > |
21 |
< key >CFBundleIconFile</ key > |
23 |
< key >CFBundleSignature</ key > |
25 |
< key >CFBundleDevelopmentRegion</ key > |
26 |
< string >English</ string > |
27 |
< key >NSHumanReadableCopyright</ key > |
28 |
< string >Copyright vac All rights reserved.</ string > |
29 |
< key >CFBundleShortVersionString</ key > |
30 |
< string >1.0.0</ string > |
・こんな感じになります。
5.Scriptを設定
・”TARGETS”→”HelloWorldKit.framework”を選択して”Build Phases”タブの右下”Add Build Phase”をクリック”Add Run Script”をクリックする。
・追加されたRun Scriptに以下のスクリプトを記述する。
2 |
INFO_PLIST="Info.plist" |
3 |
FRAMEWORK_NAME=${PROJECT_NAME} |
4 |
FRAMEWORK_VERSION_NUMBER=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" ${SRCROOT}/${PROJECT_NAME}/${INFO_PLIST}) |
6 |
FRAMEWORK_BUILD_PATH="${SRCROOT}/build/${CONFIGURATION}-framework" |
7 |
FRAMEWORK_DIR="${FRAMEWORK_BUILD_PATH}/${FRAMEWORK_NAME}.framework" |
8 |
FRAMEWORK_PACKAGE_NAME="${FRAMEWORK_NAME}.${FRAMEWORK_VERSION_NUMBER}.zip" |
11 |
[ -d "${FRAMEWORK_BUILD_PATH}" ] && rm -rf "${FRAMEWORK_BUILD_PATH}" |
14 |
xcodebuild -project ${PROJECT_NAME}.xcodeproj |
15 |
-sdk iphonesimulator${IPHONEOS_DEPLOYMENT_TARGET} |
16 |
-target "${PROJECT_NAME}" |
17 |
-configuration ${CONFIGURATION} clean build |
18 |
xcodebuild -project ${PROJECT_NAME}.xcodeproj |
19 |
-sdk iphoneos${IPHONEOS_DEPLOYMENT_TARGET} |
20 |
-target "${PROJECT_NAME}" |
21 |
-configuration ${CONFIGURATION} clean build |
24 |
mkdir -p ${FRAMEWORK_DIR} |
25 |
mkdir -p ${FRAMEWORK_DIR}/Versions |
26 |
mkdir -p ${FRAMEWORK_DIR}/Versions/${FRAMEWORK_VERSION} |
27 |
mkdir -p ${FRAMEWORK_DIR}/Versions/${FRAMEWORK_VERSION}/Resources |
28 |
mkdir -p ${FRAMEWORK_DIR}/Versions/${FRAMEWORK_VERSION}/Headers |
31 |
ln -s ${FRAMEWORK_DIR}/Versions/${FRAMEWORK_VERSION} ${FRAMEWORK_DIR}/Versions/Current |
32 |
ln -s ${FRAMEWORK_DIR}/Versions/Current/Headers ${FRAMEWORK_DIR}/Headers |
33 |
ln -s ${FRAMEWORK_DIR}/Versions/Current/Resources ${FRAMEWORK_DIR}/Resources |
34 |
ln -s ${FRAMEWORK_DIR}/Versions/Current/${FRAMEWORK_NAME} ${FRAMEWORK_DIR}/${FRAMEWORK_NAME} |
36 |
# 実機、シミュレーター用HelloWorldKit.a作成 |
38 |
${SRCROOT}/build/${CONFIGURATION}-iphoneos/lib${FRAMEWORK_NAME}.a |
39 |
${SRCROOT}/build/${CONFIGURATION}-iphonesimulator/lib${FRAMEWORK_NAME}.a |
40 |
-output "${FRAMEWORK_DIR}/Versions/Current/${FRAMEWORK_NAME}" |
43 |
ls ${SRCROOT}/${PROJECT_NAME}/Headers/*.h > /dev/null 2>&1 && cp ${SRCROOT}/${PROJECT_NAME}/Headers/*.h ${FRAMEWORK_DIR}/Headers/ |
44 |
cp ${SRCROOT}/${PROJECT_NAME}/${INFO_PLIST} ${FRAMEWORK_DIR}/Resources |
47 |
cd ${FRAMEWORK_BUILD_PATH} |
48 |
zip -ry ${FRAMEWORK_PACKAGE_NAME} $(basename $FRAMEWORK_DIR) |
・frameworkとして必要な設定などはここまで、とりあえずビルドは通ります。
5.処理を実装
・HelloWorldKit.frameworkという名前で作っているので「Hello World!!!!!!!!」の文字列を返す実装をしていきます。
・右クリックNew File…からiOS→Cocoa Touch→Objectiv-C classを選択
・「NSObject」のサブクラスで名前を「HelloObject」を作成。
・下記のように実装
*HelloObject.h
1 |
#import <Foundation/Foundation.h> |
3 |
@interface HelloObject : NSObject |
*HelloObject.m
1 |
#import "HelloObject.h" |
3 |
@implementation HelloObject |
7 |
return @"Hello World!!!!!!!!" ; |
・次にHelloObject.hをHeadersフォルダーに入れて、スキームをHelloWorldKit.frameworkにしてビルドするとプロジェクトのbuild/Debug-frameworkフォルダーにHelloWorldKit.frameworkとzipファイルが出来上がります。
6.完成したframeworkの使い方
・新規iOSプロジェクトをEnpty Applicationでプロジェクト名はFWTestProjectにて作成。
・プロジェクトを作ったら先ほど作成したHelloWorldKit.frameworkをプロジェクトに追加する。
・TARGETS→Build PhasesタブのLink Binary With Librariesの+をクリック、Add Other..でHelloWorldKit.frameworkを選択。
・HelloWorldKit.frameworkの追加が終わったらプロジェクトのAppDelegate.mにコードを追加します。
1 |
#import "AppDelegate.h" |
2 |
#import <HelloWorldKit/HelloObject.h> ←追加(フレームワークを使うためインポート) |
4 |
@implementation AppDelegate |
6 |
- ( BOOL )application:(UIApplication *)application didFinishLaunchingWithOptions:( NSDictionary *)launchOptions |
8 |
self .window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; |
10 |
NSLog ( @"%@" ,[HelloObject hello]); ←追加(HelloObjectのクラスメソッドhelloをログ表示) |
12 |
self .window.backgroundColor = [UIColor whiteColor]; |
13 |
[ self .window makeKeyAndVisible]; |
これを実行すると
1 |
FWTestProject[1329:c07] Hello World!!!!!!!! |
となります。
以上で独自frameworkを作り実装することが出来ます。
*注意点として実機とシミュレーターは気にしないでも大丈夫ですがデバッグとリリースビルドは区別されます。