fc2ブログ

[iPhone]sqlcipherを利用する。(その2)

http://otuji.blog97.fc2.com/blog-entry-213.html
以前の記事に誤りがあったため修正の意味を含めて新たな記事で
メモを残します。

iPhoneの内部DBを暗号化するためにsqlcipherというツールがある。
どうも日本語のよいチュートリアルが見つからなかったのでこれを利用するための手順をメモしておく。

【環境】
Mac OS X 10.7.5

【前提】
1.Xcodeがインストールされている事。
※4.2で確認
2.「.tar.gz」、「.zip」が解凍できる事。

【手順】
1.作業用の適当なフォルダを作成する。

~/Documents/xcode_workspace/sqlcipher/

2.下記URLから「openssl-1.0.1c.tar.gz」を作業用フォルダにダウンロードする。
ftp://ftp.openssl.org/source/

3.下記URLから「sqlcipher-openssl-xcode-d265b64.zip」を作業用フォルダにダウンロードする。
[雲のマークZIP]をクリックでダウンロードできる。
https://github.com/sqlcipher/openssl-xcode

4.下記URLから「sqlcipher-sqlcipher-v2.0.6-0-g6dbdd46.zip」を作業用フォルダにダウンロードする。
[雲のマークZIP]をクリックでダウンロードできる。
https://github.com/sqlcipher/sqlcipher

5.上記、2.3.4.でダウンロードしたものを解凍する。
※The Unarchiverなんかがあると便利。

6.「openssl-1.0.1c」の中身を「sqlcipher-openssl-xcode-d265b64」にコピーする。

7.「OPENSSL_SRC」のパスを指定する。
上部メニューのXcode=>Preferenceのメニューを開き
開いたウインドウのLocationsのSoure Treesを開く。
そこで下記の通り設定を追加する。
Display Name:OPENSSL_SRC
Setting Name:OPENSSL_SRC
Path:「openssl-1.0.1c」の絶対パス

8.sqlcipherを利用するプロジェクトを作成する。
今回は新規にsqlcipherTestプロジェクトを、
Single View Applicaitonで作成する。
場所は1.で作成したフォルダ内。

9.「sqlcipherTest」プロジェクトを開き、プロジェクトに、
 opensslプロジェクト、sqlcipherプロジェクトを追加する。

10.「openssl」プロジェクトのBase SDKをLatest iOSを選択する。

11.「sqlcipher」プロジェクトのBase SDKをLatest iOSを選択する。

12.ビルドの依存関係を設定する。
 sqlcipherTestのTARGETSのsqlcipherTestから、
 Build Phasesを選択し、Target Dependenciesに
 「sqlcipher」、「crypto」を追加する。

13.Link Binary With Librariesに設定を行う。
 「libcrypto.a」「libsqlcipher.a」を追加する。
 「libsqlite3.dylib」が含まれている場合は取り除く。

14.build architecturesを必要に応じて変更する。

15.マクロを追加する。
 「Other C Flags」のdebugとreleaseに「-DSQLITEHASCODEC」
 を追加する。

16.下記コードを「ViewController.m」の「viewDidLoad」に追加する。

#import

...
NSString *databasePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
stringByAppendingPathComponent: @"sqlcipher.db"];
sqlite3 *db;
if (sqlite3_open([databasePath UTF8String], &db) == SQLITE_OK) {
const char* key = [@"BIGSecret" UTF8String];
sqlite3_key(db, key, strlen(key));
if (sqlite3_exec(db, (const char*) "CREATE TABLE testtable(id number(009, 0) primary key,item number(009, 0) );", NULL, NULL, NULL) == SQLITE_OK) {
// password is correct, or, database has been initialized
NSLog(@"SQLITE_OK");

} else {
// incorrect password!
NSLog(@"SQLITE_NG");
}
if (sqlite3_exec(db, (const char*) "SELECT count(*) FROM sqlite_master;", NULL, NULL, NULL) == SQLITE_OK) {
// password is correct, or, database has been initialized
NSLog(@"SQLITE_OK");

} else {
// incorrect password!
NSLog(@"SQLITE_NG");
}

sqlite3_close(db);
}

17.iPhone Simulatorを選択して実行する。

18.作成された.dbファイルを確認する。
 下記のフォルダにcdで移動する。
/Users/sjlombardo/Library/Application Support/iPhone Simulator/5.0/Applications//Documents

下記コマンドで内容が暗号化されているか確認する。
% hexdump -C sqlcipher.db

【参考URL】
http://sqlcipher.net/ios-tutorial
スポンサーサイト



テーマ : プログラミング
ジャンル : コンピュータ

[Xcode]Xcode4.3以降を共存させる方法

諸事情によりXcodeを複数バージョン使えるようにしたかったので、
Xcodeの共存方法をメモします。

・確認環境
Mac OS X 10.7.5

1.iOS Dev Centerからdmgファイル(xcode_4.5.dmg等)をダウンロードする。
 ※無料アカウント登録が必要です。

2.Applicationにインストール済みのXcode.appをリネームする。
 ※Xcode44.app等バージョンを表す文字が良さげです。
  二重拡張子は怖いので.は無い方が無難です。

3.dmgファイルからXcode4.3以降をインストールする。
 アプリケーションフォルダにドラッグ&ドロップすると思います。

単純に言うとリネームするだけ。簡単ですね。
プロジェクトファイルの右クリックから任意のバージョンでプロジェクトファイルを開けます。

テーマ : Mac
ジャンル : コンピュータ

[mac]指定フォルダ以下の指定種類のファイルの行数を表示する。

findで対象のファイルを探して、
xargs探したファイルの行数をwcでカウントする。

$find . -name *.m | xargs wc -l

テーマ : Mac
ジャンル : コンピュータ

[Xcode]Xcode4.2 Xcode4.4の共存

準備

・Xcodeのアンインストール
まずはまっさらの状態に戻します。
アンインストールが終わったら再起動をしましょう。
こちらを参照
http://otuji.blog97.fc2.com/blog-entry-216.html

・Xcode4.2 Xcode4.4のダウンロード
AppleDevelopperに登録済みのアカウントが必要です。(無料アカウントで可)
下記2つのファイルをダウンロード合計4G弱
installxcode_42_lion.dmg
xcode_4.4.1_6938145.dmg

Xcode4.2をインストールする

installxcode_42_lion.dmgダブルクリックして指示通りに進めると、
インストーラがインストールされる。
LounchPadからinstall Xcodeを実行して初めてXcode4.2がインストールされる。
インストール時に古いアプリケーションを削除するか聞かれるが、
削除しないで続行してください。

Xcode4.4をインストールする。

xcode_4.4.1_6938145.dmgを実行する。
開いたフォルダの中身をapplicationフォルダにコピーする。
インストール時に古いアプリケーションを削除するか聞かれるが、
削除しないで続行してください。

基本的にはコレだけ。
成功するとプロジェクトファイルを右クリックしたメニューに下記のように表示されます。
右クリックメニュー

テーマ : プログラミング
ジャンル : コンピュータ

[Xcode]Xcodeのアンインストール方法(各バージョン毎)

アンインストール方法を調べたのでまとめる。

Xcode4.2以前をuninstallする


下記のサイトが参考になる。
http://tdev.hatenablog.com/entry/2012/03/12/205647

次のコマンドでuninstall-toolを探す



$ sudo find / -name uninstall-devtools
見つかったdevtoolsを下記のオプションで一つずつ実行していく。



$ sudo /Developer/Library/uninstall-devtools --mode=all

Xcode4.3、4.4のアンインストール


下記のサイトが参考になる。
http://akio0911.net/archives/12910
applicationフォルダ内のファイルを削除するだけ。
以前に比べて簡単にですね!

テーマ : プログラミング
ジャンル : コンピュータ

[iPhone]UIDatePickerのメモ(自分用)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
CGRect frameForWindow = [[UIScreen mainScreen] bounds];
_window = [[UIWindow alloc] initWithFrame:frameForWindow];

//アプリのウインドウと同じサイズの四角形を取得
CGRect rect = CGRectMake(0.0, 20.0, 320.0, 460.0);

//上記で取得したサイズのピッカーを作成
picker_ = [[UIDatePicker alloc] initWithFrame:rect];

NSDate *date = [NSDate date];

[picker_ setDate:date animated:NO];
[picker_ setMinimumDate:date];
[picker_ setMaximumDate:[NSDate dateWithTimeIntervalSinceNow:3600*24*365]];
[picker_ setCalendar:[NSCalendar currentCalendar]];
[picker_ setTimeZone:[NSTimeZone systemTimeZone]];

[_window addSubview:picker_];

// [picker release];


// 標準ボタン例文
btn_ = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn_.frame = CGRectMake(100, 300, 100, 30);
[btn_ setTitle:@"押してね" forState:UIControlStateNormal];
[btn_ setTitle:@"ぽち" forState:UIControlStateHighlighted];
[btn_ setTitle:@"押せません" forState:UIControlStateDisabled];
// ボタンがタッチダウンされた時にhogeメソッドを呼び出す
[btn_ addTarget:self action:@selector(pushBtn:)forControlEvents:UIControlEventTouchDown];
[_window addSubview:btn_];

// [btn release];

[_window makeKeyAndVisible];

return YES;
}
- (void)pushBtn:(UIButton*)button{
NSDateFormatter *inputDateFormatter = [[NSDateFormatter alloc] init];
[inputDateFormatter setDateFormat:@"yyyy/MM/dd HH:mm:ss"];
NSString *intputDateStr = @"2012/09/02 03:04:05";
[inputDateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
[inputDateFormatter setCalendar:[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]];
NSDate *inputDate = [inputDateFormatter dateFromString:intputDateStr];

[inputDateFormatter release];

[picker_ setDate:inputDate animated:YES];

NSLog(@"picker_ => %@",[picker_ description]);
NSLog(@"picker_.date => %@",[picker_.date description]);
NSLog(@"picker_.minimumDate => %@",[picker_.minimumDate description]);
NSLog(@"picker_.maximumDate => %@",[picker_.maximumDate description]);
NSLog(@"picker_.calendar => %@",[picker_.calendar description]);
NSLog(@"picker_.timeZone => %@",[picker_.timeZone description]);
}

UIDataPickerのdateは本体のカレンダー設定にどうしても引きずられるようです。
それはどうしようもなさそう。。
設定するdateはフォマッタで文字列の与える文字列のフォーマットを
カレンダーとフォーマットストリングで指定してあげればよい。

テーマ : プログラミング
ジャンル : コンピュータ

プロフィール

乙寺

Author:乙寺
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード