XCode6でFramework Templateを使う

ゆう@あんのうんです

皆様、年の瀬はどのようにお過ごしでしょうか? 私は、引っ越しをすることになり、どうまず氏に手伝っていただきながら、徹夜で引っ越し作業を行い、心身もろともやばいことになってます。

さてさて、XCode6でFramework Templateを使う - Qiitaでも投稿させて頂きました記事を、このブログでも記載します。

概要

XCode6でFramework Templateが新機能として追加され、今まで面倒だったFramework化が簡単にできるようになりました。 本記事で、その手順を紹介します。

この記事では、Frameworkと、Frameworkを組み込むアプリの2つのProjectが登場しますので、以下で呼称します。 また、新規にProjectを作る際の紹介を行います。

  • Framework側
  • App側

Framework側 : Project作成

File -> New -> Projectで新規Project作成画面を出し、 Framework & Libraryから、Cocoa Touch Frameworkを選択します (ここでProject名は、ProjectUnknownFrameworkとしました)

capture-01.png

すると、以下の様にファイルが展開されます。

capture-02.png

Framework側 : 独自機能の追加

追加したい機能をこれまで通り追加していくだけです。

ここでは、私がよく使っている、(と言うかiOSデベロッパーの他の皆様がよくやられている)ログマクロを一つ追加してみます。

capture-03.png

PUMacros.h というファイルを一つ作り、中に以下のマクロを記載します。

#ifdef DEBUG

#define LOG(format, ...) NSLog((format ), __FUNCTION__, ##__VA_ARGS__);

#endif

Framework側 : App側からも参照できるようにする

「Framework名.h」ファイル(私の場合は、ProjectUnknownFramework.h)に、以下の形でimport文を記載します

#import <Framework名/ファイル名>

今回の例の場合は、以下の様に記載します

#import <ProjectUnknownFramework/PUMacros.h>

Framework側 : Build

通常のApp開発と同様にCmd+bでbuildします。

Framework側 : 作成されたFrameworkを確認。

buildが終わると、以下のPathにframeworkが作成されていますので、確認します。

~/Library/Developer/Xcode/DerivedData/{Project名}/Build/Products

iPhoneシミュレータで作成したので、この場合は、以下に格納されています

~/Library/Developer/Xcode/DerivedData/{Project名}/Build/Products/Debug-iphonesimulator/

これをFinderで見ると

Failed to upload "capture-04.png": Please try again later.

.framework形式のファイルが作成されていました。

App側 : 作成したFrameworkの取り込み

先ほど作成された、.frameworkをApp側の以下にDrag & Dropで取り込みます。

capture-05.png

Link Binary With Librariesに、上記の通り、.frameworkファイルを取り込みました。

App側 : 実際に利用する。

実際に利用する場合は、

#import フレームワーク名;

で利用できます。

先ほどの例で作成したマクロを実際にViewController上で呼び出してみます。

#import "ViewController.h"

@import ProjectUnknownFramework;


@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self runMacro];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)runMacro
{
    LOG(@"hogehgoe");
}

capture-06.png

実際にLogを出力する事が出来ました。

最後に

XCode6で追加されたFramework Templateを思考錯誤しながらやってみたので、無駄な事とか、もっと簡単なやり方等がありましたらご教授頂ければ幸いですmm