iOSアプリ開発でログにクラス名とメソッド名を出力する方法

iOSアプリ開発でログを出力する場合「NSLog」を使用するが、「NSLog」の出力には出力したクラス名やメソッド名が含まれない。
これだとログに出力する文言に気を使っておかなければ、不具合箇所を特定するのに時間がかかることがある。
今回はログにクラス名とメソッド名を出力する方法を紹介する。

<通常のNSLogサンプルコード>

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSLog(@"おおおおお");
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

@end

<出力結果>

2014-11-27 20:18:58.787 LogSample[10128:65319] おおおおお

<今回紹介する方法の出力結果>

2014-11-27 20:18:58.787 LogSample[10128:65319] -[ViewController viewDidLoad] おおおおお

[ ]内を見る事で「ViewController」クラスの「viewDidLoad」メソッドから出力されたログである事が明確に分かる様になる。

<方法概要>
PCHファイル(<プロジェクト名-Prefix.pch>)に拡張したログを定義する。

(注意)
PCHファイルはXcode6から自動で生成されなくなった。
手動で作成する方法は「Xcode6でPCHファイルを追加する方法」を参照のこと。

<方法詳細>
プロジェクトツリー上からPCHファイル(<プロジェクト名-Prefix.pch>)を選択し表示させる。
表示したファイル内に下記の定義を追加する。

#define ExLog(format, ...) NSLog((@"%s: "format), __PRETTY_FUNCTION__, ##__VA_ARGS__)

解説:
「ExLog」という識別子をNSLogを拡張して定義している。
「__PRETTY_FUNCTION__」がクラス名・メソッド名を意味し、「%s」の箇所に出力される様に設定している。

<使用方法>
ログを出力する際は、「NSLog」ではなく、「ExLog」を使用する。
サンプルコードを下記に示す。

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    ExLog(@"おおおおお");
	//↑ポイント(「NSLog」ではなく新たに定義した「ExLog」を使用)
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

@end

<出力結果>

2014-11-27 20:38:04.857 LogSample[10963:71688] -[ViewController viewDidLoad]: おおおおお

Enjoy Programing!!

<関連記事>
iOSアプリ開発でログにクラス名とメソッド名を出力する方法(本記事)
iOSアプリ開発でログにログレベルを導入する方法
iOSアプリ開発でNSErrorの情報を出力する拡張NSLogを定義する方法

<お勧め書籍>

詳解 Objective-C 2.0 第3版
iOSアプリ開発技術者として仕事をするのであれば、必ず読んでおくべき書籍である。
筆者も何度も繰り返し精読している。

iOSアプリ開発で画面のフリーズを抑止する方法

ユーザのUI画面へのアクションで、時間を要する処理(例:通信処理、DB処理)を実行すると、処理が完了するまで画面がユーザの操作を受け付けなくなる。この状態は良いユーザビリティとは言えない。
今回はiOSアプリ開発で画面のフリーズを抑止する方法を紹介する。

<方法概要>
マルチスレッド処理を実装し、時間を要する処理をメインスレッドとは別のスレッドで実行することで、画面がフリーズする事を抑止する。
Objective-Cでマルチスレッドを実装する方法は複数あるが、今回は「GCD(Grand Central Dispatch)」を使用する方法を紹介する。

<方法詳細>
GCDでマルチスレッド処理を行うには、キューを準備する必要がある。「メインスレッド用のキュー」と「別スレッド用のキュー」の2つを広域変数として定義しておくと便利である。
メインスレッド用のキューは「dispatch_get_main_queue」で取得し、別スレッド用のキューは「dispatch_queue_create」で作成する。
実際に別スレッドの処理を記述するには、「dispatch_async」を使用して行う。第1引数にキューを指定し、第2引数にブロックとして処理を記述する。

サンプルコードを下記に示す。

<サンプルコード>

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController{
    
    //メインスレッド用のキューを定義
    dispatch_queue_t main_queue;
    
    //別スレッド用のキューを定義
    dispatch_queue_t other_queue;
}

- (void)viewDidLoad {
    
    [super viewDidLoad];
    
    //メインスレッド用のキューを取得する
    main_queue  = dispatch_get_main_queue();
    
    //別スレッド用のキューを作成する(第1引数は任意の文字列、第2引数は0固定)
    other_queue = dispatch_queue_create("lab.moonmt.multi", 0);
}

- (IBAction)tapBtn{
    
    NSLog(@"メソッド開始");
    
    //別スレッド処理を本ブロック内に記述する
    dispatch_async(other_queue, ^{
        
        //時間を要する処理を以下に記述する
        
        NSLog(@"別スレッドで処理開始");
        
        //↓↓↓ 例として時間を要する意味の無い処理を実行 ↓↓↓
        NSString *buf = @"";
        for(int i=0; i<20000; i++){
            
            buf = [buf stringByAppendingString:@"abcdefg"];
        }
       //↑↑↑ 例として時間を要する意味の無い処理を実行 ↑↑↑
        
        //画面に結果を返却する場合はメインスレッド上で行う必要がある
        dispatch_async(main_queue, ^{
            
            //別スレッドの処理結果を画面に表示する処理を記述する
            
            NSLog(@"処理完了");
            label.text = @"処理完了";
        });
        
        NSLog(@"別スレッドで処理終了");
    });
    
    NSLog(@"メソッド終了");
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

@end

<実行結果>

2014-11-26 20:55:37.389 MultiThreadSample[10529:72780] メソッド開始
2014-11-26 20:55:37.390 MultiThreadSample[10529:72780] メソッド終了
2014-11-26 20:55:37.390 MultiThreadSample[10529:72841] 別スレッドで処理開始
2014-11-26 20:55:59.760 MultiThreadSample[10529:72780] 処理完了
2014-11-26 20:55:59.760 MultiThreadSample[10529:72841] 別スレッドで処理終了

(下の2行の出力順序が入れ替わる場合もあるが正常に動作している)

<考察>
ログの出力順序を確認すると、別スレッドで処理を終了するより前に「メソッド終了」(2行目)のログが出力されている。
また、NSLogの[]内のコロンより後ろの数値は、スレッドIDを表すが、別スレッドで実行しているログ出力のIDがメインスレッドとは別のIDとなっていることが確認できる。
マルチスレッド処理を実装しなければ、37秒から59秒まで(1行目から5行目の間)の約22秒間画面がフリーズした状態になるが、マルチスレッド処理を実装したことにより、画面がフリーズするのは0.01秒(1行目と2行目の間)となり、ユーザに意識されることはなくなった。

Enjoy Programing!!

<お勧め書籍>

詳解 Objective-C 2.0 第3版
iOSアプリ開発技術者として仕事をするのであれば、必ず読んでおくべき書籍である。
筆者も何度も繰り返し精読している。

iOSアプリ開発においてFrameworkを自作する方法【手順5】

今回は、前回の続編として、「.framework」ファイルを自作する方法の最終回として「手順5.Frameworkをビルドし利用する」を紹介する。

繰り返しになるが、「.framework」ファイルを自作する方法に関しては、下記のサイトで非常に丁寧に紹介されている。
iPhoneアプリ開発自作Frameworkをつくる
ただ、少し古いバージョンのXcodeで説明されているので、現時点の最新版である「Xcode6.1」における方法を紹介する。

手順は下記の5ステップとなる。少し長くなるので、各手順に分けて説明する。

<手順概要>
手順1.プロジェクトを作成する
手順2.Property Listを作成する
手順3.Targetを作成し、Run Scriptを設定する
手順4.Frameworkで実行したい処理をクラスとして追加する
手順5.Frameworkをビルドし利用する(本記事)

<手順詳細>
5.Frameworkをビルドし利用する

5.1.Frameworkをビルドする

「Product」->「Clean」を実行する。
必須の操作ではないが、この手順を省略すると、稀に古い設定や構成でビルドされてしまう事があるので、ビルド前の習慣とした方が良い。

Xcodeの画面上部にある「Manage Schemes」の左側を「<プロジェクト名>.framework」(例:FramworkSample.framework)に設定する。

Xcodeの画面上部にある【Run】ボタンを押下する。

プロジェクトとフォルダの直下に「Framework」フォルダが作成され、その配下に「<プロジェクト名>.framework」(例:FramworkSample.framework)が作成されている事を確認する。


5.2.作成したFrameworkを利用する

Xcodeで新しいプロジェクトを「Single View Application」で作成する(例:UseFrameworkSample)。
プロジェクトツリーの最上部を右クリックし、「Add Files to "<プロジェクト名>"」をクリックする。

表示されたダイアログで、5.1の手順で作成した「<プロジェクト名>.framework」(例:FramworkSample.framework)を選択する。
「Copy items if needed」にチェックを入れて、【Add】ボタンを押下する。

プロジェクトツリー上に「<プロジェクト名>.framework」(例:FramworkSample.framework)が追加された事を確認する。

プロジェクトツリーの最上部を選択し、TARGETSでプロジェクト名(例:UseFrameworkSample)を選択する。
表示された画面の「Build Settings」タブを開き、「Other Linker Flags」の行をダブルクリックする。
下図の様な入力ダイアログが表示されたことを確認する。

入力ダイアログの下部にある【+】ボタンを押下して、「-ObjC」と「-all_load」を追加する。

入力ダイアログ以外の場所をクリックして入力ダイアログを閉じる。
「Other Linker Flags」に「-ObjC」と「-all_load」が追加されたことを確認する。

ViewController.mファイルを開き、「#import "ViewController.h"」の次の行に「#import <フレームワーク名/クラス名>」(例:#import )を記述する。

ViewController.mファイルのviewDidLoadメソッド内に、フレームワーク内のクラスを使用するコードを記述する。

Sample *sample = [[Sample alloc] init];
[sample startLogic];

シミュレータまたは実機で実行し、ログを確認する。

以上で「手順5.Frameworkをビルドし利用する」が完了となる。

今回でFrameworkを自作する方法の紹介は終了となる。
手順は多いが、各手順の難易度はそれ程高くは無い。
この方法を用いることで、よく使用する処理や、汎用性の高い処理をライブラリ化して、生産性を向上することができる。

Enjoy Programing!!

<関連記事>
iOSアプリ開発においてFrameworkを自作する方法【手順1】
iOSアプリ開発においてFrameworkを自作する方法【手順2】
iOSアプリ開発においてFrameworkを自作する方法【手順3】
iOSアプリ開発においてFrameworkを自作する方法【手順4】
iOSアプリ開発においてFrameworkを自作する方法【手順5】(本記事)

<お勧め書籍>

詳解 Objective-C 2.0 第3版
iOSアプリ開発技術者として仕事をするのであれば、必ず読んでおくべき書籍である。
筆者も何度も繰り返し精読している。

iOSアプリ開発においてFrameworkを自作する方法【手順4】

今回は、前回の続編として、「.framework」ファイルを自作する方法の「手順4.Frameworkで実行したい処理をクラスとして追加する」を紹介する。

繰り返しになるが、「.framework」ファイルを自作する方法に関しては、下記のサイトで非常に丁寧に紹介されている。
iPhoneアプリ開発自作Frameworkをつくる
ただ、少し古いバージョンのXcodeで説明されているので、現時点の最新版である「Xcode6.1」における方法を紹介する。

手順は下記の5ステップとなる。少し長くなるので、各手順に分けて説明する。

<手順概要>
手順1.プロジェクトを作成する
手順2.Property Listを作成する
手順3.Targetを作成し、Run Scriptを設定する
手順4.Frameworkで実行したい処理をクラスとして追加する(本記事)
手順5.Frameworkをビルドし利用する

<手順詳細>
4.Frameworkで実行したい処理をクラスとして追加する

4.1.「.h」ファイルを「Headers」フォルダに作成する

プロジェクトツリー上の「Headers」フォルダを右クリックし、「New File...」を押下する。

表示されたダイアログで「iOS」->「Source」->「Cocoa Touch Class」を選択し、【Next】ボタンを押下する。

続いて表示されたダイアログの「Class」欄に作成するクラスの名称を拡張子「.h」付きで入力する(例:Sample.h)。

続いて表示されたダイアログで、ファイルを作成するフォルダに「Headers」が選択されていることを確認し、Targetsを下図の様に選択し、【Create】ボタンを押下する。

プロジェクトツリーが下図の様な状態になった事を確認する。


4.2.「.m」ファイルを「Methods」フォルダに作成する

プロジェクトツリー上の「Methods」フォルダを右クリックし、「New File...」を押下する。

表示されたダイアログで「iOS」->「Source」->「Cocoa Touch Class」を選択し、【Next】ボタンを押下する。

続いて表示されたダイアログの「Class」欄に、4.1で作成したクラス名称を拡張子「.m」に変更して入力する(例:Sample.m)。

続いて表示されたダイアログで、ファイルを作成するフォルダに「Methods」が選択されていることを確認し、Targetsを下図の様に選択し、【Create】ボタンを押下する。

プロジェクトツリーが下図の様な状態になった事を確認する。

「Methods」フォルダの配下に作成された「.h」ファイル(例:Sample.h)は不要なので削除する。
プロジェクトツリー上で該当ファイルを右クリックし、「Delete」を押下する。

表示されたダイアログで【Move to Trash】ボタンを押下する。

プロジェクトツリーが下図の様な状態になった事を確認する。


4.3.作成したクラスに処理を記述する

処理記述の例を下記に示す。
Sample.h

#import <Foundation/Foundation.h>

@interface Sample : NSObject

- (void) startLogic;

@end

Sample.m

#import "Sample.h"

@implementation Sample

- (void) startLogic{
    
    NSLog(@"framework内のメソッドから出力されたログ");
}

@end

クラスが1つでは足りない場合は、4.1〜4.3の手順を繰り返す。

以上で「手順4.Frameworkで実行したい処理をクラスとして追加する」が完了となる。

Enjoy Programing!!

<関連記事>
iOSアプリ開発においてFrameworkを自作する方法【手順1】
iOSアプリ開発においてFrameworkを自作する方法【手順2】
iOSアプリ開発においてFrameworkを自作する方法【手順3】
iOSアプリ開発においてFrameworkを自作する方法【手順4】(本記事)
iOSアプリ開発においてFrameworkを自作する方法【手順5】

<お勧め書籍>

詳解 Objective-C 2.0 第3版
iOSアプリ開発技術者として仕事をするのであれば、必ず読んでおくべき書籍である。
筆者も何度も繰り返し精読している。

iOSアプリ開発においてFrameworkを自作する方法【手順3】

今回は、前回の続編として、「.framework」ファイルを自作する方法の「手順3.Targetを作成し、Run Scriptを設定する」を紹介する。

繰り返しになるが、「.framework」ファイルを自作する方法に関しては、下記のサイトで非常に丁寧に紹介されている。
iPhoneアプリ開発自作Frameworkをつくる
ただ、少し古いバージョンのXcodeで説明されているので、現時点の最新版である「Xcode6.1」における方法を紹介する。

手順は下記の5ステップとなる。少し長くなるので、各手順に分けて説明する。

<手順概要>
手順1.プロジェクトを作成する
手順2.Property Listを作成する
手順3.Targetを作成し、Run Scriptを設定する(本記事)
手順4.Frameworkで実行したい処理をクラスとして追加する
手順5.Frameworkをビルドし利用する

<手順詳細>
3.Targetを作成し、Run Scriptを設定する

3.1.Targetを作成する

プロジェクトツリーの最上部をクリックすると、下図の様な状態になるので、サイドメニューの下部にある【+】ボタンを押下する。
(PROJECT,TARGETSが表示されているサイドメニューが表示されない場合は図中の※をクリックする)

表示されたダイアログで、「iOS」->「Other」->「Aggregate」を選択し、【Next】ボタンを押下する。

続いて表示されたダイアログの「Product Name」に「<プロジェクト名>.framework」(FrameworkSample.framework)と入力し、【Finish】ボタンを押下する。

サイドメニューの「TARGETS」の欄に「FrameworkSample.framework」が追加された事を確認する。


3.2.Run Scriptを設定する

サイドメニュー「TARGETS」の欄の「FrameworkSample.framework」をクリックする。
表示された画面上部で「Build Phases」を選択する。
表示された画面で【+】ボタンを押下し、【New Run Script Phase】をクリックする。

画面に「Run Script」が追加された事を確認する。

「Run Script」の左にある三角をクリックし、項目を表示させる。

上図で「Type a script or drag a script file ...」と表示されている欄に、下記のスクリプトを記述する。
4行目には手順2で作成したProperty Listを指定すること。

# ==============================
# 変数設定
# ==============================
INFOPLIST='FrameworkSample/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)

記入後、下図の様な状態である事を確認する。

<コピー&ペーストした時の注意点>
上記のスクリプトをコピー&ペーストした場合、自動的にスクリプトの末尾に不要なインデントが挿入されることがある。
フォルダ配下の全ファイルを指定している「/*」をコメントの始まりと誤認したために起こると考えられる。
インデントは不要なので、インデント部分を削除すること。色はコメント色になっているが、特に問題ない。

コピー後

インデント削除後(あるべき姿)

以上で「手順3.Targetを作成し、Run Scriptを設定する」が完了となる。

Enjoy Programing!!

<関連記事>
iOSアプリ開発においてFrameworkを自作する方法【手順1】
iOSアプリ開発においてFrameworkを自作する方法【手順2】
iOSアプリ開発においてFrameworkを自作する方法【手順3】(本記事)
iOSアプリ開発においてFrameworkを自作する方法【手順4】
iOSアプリ開発においてFrameworkを自作する方法【手順5】

<お勧め書籍>

詳解 Objective-C 2.0 第3版
iOSアプリ開発技術者として仕事をするのであれば、必ず読んでおくべき書籍である。
筆者も何度も繰り返し精読している。

iOSアプリ開発においてFrameworkを自作する方法【手順2】

今回は、前回の続編として、「.framework」ファイルを自作する方法の「手順2.Property Listを作成する」を紹介する。

繰り返しになるが、「.framework」ファイルを自作する方法に関しては、下記のサイトで非常に丁寧に紹介されている。
iPhoneアプリ開発自作Frameworkをつくる
ただ、少し古いバージョンのXcodeで説明されているので、現時点の最新版である「Xcode6.1」における方法を紹介する。

手順は下記の5ステップとなる。少し長くなるので、各手順に分けて説明する。

<手順概要>
手順1.プロジェクトを作成する
手順2.Property Listを作成する(本記事)
手順3.Targetを作成し、Run Scriptを設定する
手順4.Frameworkで実行したい処理をクラスとして追加する
手順5.Frameworkをビルドし利用する

<手順詳細>
2.Property Listを作成する

プロジェクトツリー上の「Resources」フォルダを右クリックし、「New File...」を押下する。

表示された「Choose a template for your new file:」のダイアログで、「iOS」->「Resource」->「Property List」を選択し、【Next】ボタンを押下する。

続いて表示されたダイアログで「Save As:」欄に「Info.plist」を入力し、【Create】ボタンを押下する。

プロジェクトツリーが下記の様な状態になった事を確認する。

作成した「Info.plist」のソースコードを表示する。
「Info.plist」を右クリックし、「Open As」->「Source Code」を押下する。

下図の様な状態で、「Info.plist」が表示されたことを確認する。

「Info.plist」を下記の様に編集する。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleName</key>
	<string>FrameworkSample</string>
	<key>CFBundleIdentifier</key>
	<string>lab.moonmt</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleVersion</key>
	<string>1</string>
	<key>CFBundleExecutable</key>
	<string>FrameworkSample</string>
	<key>CFBundleGetInfoString</key>
	<string>FrameworkSample</string>
	<key>NSPrincipalClass</key>
	<string></string>
	<key>CFBundlePackageType</key>
	<string>FMWK</string>
	<key>CFBundleIconFile</key>
	<string></string>
	<key>CFBundleSignature</key>
	<string>????</string>
	<key>CFBundleDevelopmentRegion</key>
	<string>English</string>
	<key>NSHumanReadableCopyright</key>
	<string>MoonMt.Lab. All rights reserved.</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0.0</string>
</dict>
</plist>

上記「Info.plist」に設定する値の補足説明

項目 設定値 固定値
CFBundleName プロジェクト名   FrameworkSample
CFBundleIdentifier Organization Identifierに設定した値 lab.moonmt
CFBundleInfoDictionaryVersion 6.0 -
CFBundleVersion 1 -
CFBundleExecutable プロジェクト名 FrameworkSample
CFBundleGetInfoString プロジェクト名 FrameworkSample
NSPrincipalClass (空文字) -
CFBundlePackageType FMWK -
CFBundleIconFile (空文字) -
CFBundleSignature ???? -
CFBundleDevelopmentRegion English -
NSHumanReadableCopyright Copyright MoonMt.Lab. All rights reserved.
CFBundleShortVersionString 1.0.0 -

 
「Info.plist」を右クリックし、「Open As」->「Property List」を押下した結果、下図の様な状態である事を確認する。

以上で「手順2.Property Listを作成する」が完了となる。

Enjoy Programing!!

<関連記事>
iOSアプリ開発においてFrameworkを自作する方法【手順1】
iOSアプリ開発においてFrameworkを自作する方法【手順2】(本記事)
iOSアプリ開発においてFrameworkを自作する方法【手順3】
iOSアプリ開発においてFrameworkを自作する方法【手順4】
iOSアプリ開発においてFrameworkを自作する方法【手順5】

<お勧め書籍>

詳解 Objective-C 2.0 第3版
iOSアプリ開発技術者として仕事をするのであれば、必ず読んでおくべき書籍である。
筆者も何度も繰り返し精読している。

iOSアプリ開発においてFrameworkを自作する方法【手順1】

Appleが提供するライブラリの多くも「.framework」ファイルで提供されており、iOSアプリ開発におけるライブラリの一般的な形式の一つと言える。
しかし、「.framework」ファイルを作成しようとXcodeのテンプレートを探しても該当するものが存在しない。
今回はiOSアプリ開発において「.framework」ファイルを自作する方法を紹介する。

<注意>
Xcode6で「Cocoa Touch Framework」というテンプレートが追加されたが、筆者はこのテンプレートについて熟知していない。
もしかしたら、このテンプレートを使用すれば、簡単に「.framework」ファイルが作成できるかもしれない。
今回紹介する方法は、Xcode5系でも使用できる方法である。

「.framework」ファイルを自作する方法に関しては、下記のサイトで非常に丁寧に紹介されている。
iPhoneアプリ開発自作Frameworkをつくる
ただ、少し古いバージョンのXcodeで説明されているので、現時点の最新版である「Xcode6.1」における方法を紹介する。

手順は下記の5ステップとなる。少し長くなるので、各手順に分けて説明する。

<手順概要>
手順1.プロジェクトを作成する(本記事)
手順2.Property Listを作成する
手順3.Targetを作成し、Run Scriptを設定する
手順4.Frameworkで実行したい処理をクラスとして追加する
手順5.Frameworkをビルドし利用する

<手順詳細>
1.プロジェクトを作成する

Xcodeを起動し、「Create a new Xcode project」を押下する

表示された「Choose a template for your new project:」のダイアログで「iOS」->「Framework & Library」->「Cocoa Touch static Library」を選択し、【Next】ボタンを押下する。

続いて表示されたダイアログの「Product Name」に任意プロジェクト名を入力する(今回は「FrameworkSample」とした)。
また、「Organization Identifier」に任意の文字列を入力する(今回は「lab.moonmt」とした)。この文字列は「手順2」で使用するのでメモしておくこと。
最後に【Next】ボタンを押下する。

続いて表示されたダイアログで、プロジェクトを作成するフォルダを選択し、【Create】ボタンを押下する

表示されたXcodeのメイン画面のプロジェクトツリーが、下記の様な状態であることを確認する。

プロジェクトツリー上のプロジェクト名がつけられたフォルダの配下に、「Headers」「Methods」「Resources」の3つのフォルダを新規に作成する。
「Headers」は「.h」ファイル、「Methods」は「.m」ファイル、「Resources」は「設定」ファイルを格納するために作成する。

プロジェクト名がつけられたフォルダを右クリックし、「Add Files to "<プロジェクト名>"」を押下する。

表示されたダイアログの【New Folder】ボタンを押下する。
さらに表示されたダイアログに「Headers」を入力し、【Create】ボタンを押下する。
さらに【Add】ボタンを押下する。

「Methods」「Resources」フォルダについても、上記の方法で追加する。

プロジェクトツリーが下図の様な状態になった事を確認する。

プロジェクト名がつけらたクラスのファイル(FrameworkSample.h、FrameworkSample.m)は不要なので削除する。
FrameworkSample.hを右クリックし、【Delete】を押下する。

表示された確認ダイアログの【Move to Trash】ボタンを押下する。

FrameworkSample.mについても、上記の方法で削除する。

プロジェクトツリーが下記の様な状態になった事を確認する。

以上で「手順1.プロジェクトを作成する」が完了となる。

Enjoy Programing!!

<関連記事>
iOSアプリ開発においてFrameworkを自作する方法【手順1】(本記事)
iOSアプリ開発においてFrameworkを自作する方法【手順2】
iOSアプリ開発においてFrameworkを自作する方法【手順3】
iOSアプリ開発においてFrameworkを自作する方法【手順4】
iOSアプリ開発においてFrameworkを自作する方法【手順5】

<お勧め書籍>

詳解 Objective-C 2.0 第3版
iOSアプリ開発技術者として仕事をするのであれば、必ず読んでおくべき書籍である。
筆者も何度も繰り返し精読している。