Google Toolbox for MacをiPhoneで使ってOSのバージョン取得
「Google Toolbox for Mac」を解凍したディレクトリにはiPhone向けらしい名前の付いたプロジェクトが存在します。
そこでこっちについても試してみようとちょっと開いてみました。
確認したところこちらはFrameworkを生成などはしておらず、UnitTest用を行っているプロジェクトでした。
とりあえず、.mと.hファイルをコピーして使えば良いのかな?と思いコピーしてOSのバージョン取得のライブラリを動かしてみました。
以下のファイルをコピーし、
- GTMDefines.h
- GTMSystemVersion.h
- GTMSystemVersion.m
ファイルの先頭に
#import "GTMSystemVersion.h"
を記述し、以下のプログラムで確認してみました。
long major, minor, bugFix; [GTMSystemVersion getMajor:&major minor:&minor bugFix:&bugFix]; NSLog(@"Version:%d.%d.%d", major, minor, bugFix);
で出力した結果がこちら
Version:10.5.6
へー、iPhoneっていつの間にかそんなにバージョン進んでたんだー。って明らかにMacのバージョンですな。シミュレータだし、まあ良いかな?(反映してくれた方が使い勝手いいけど)。
実機で動かしたらちゃんと以下のような結果に
Version:2.2.1
ちなみにこんな感じでOSのバージョンを取得した場合はシミュレータ、実機ともに 2.2.1 となりました。
NSLog(@"Version:%@", [[UIDevice currentDevice]systemVersion]);
今のところ(Ver 1.5.1)、OSのバージョンはこちらの方法で取得した方が使い勝手が良さそうですね。
Google Toolbox for Macを使ってHTMLのエスケープ処理をする
これはiPhoneでも結構使う機会も多いと思われるHTMLのエスケープ処理。
エスケープ処理とは
<
を
<
などに変換する処理です。
また、逆にエスケープ処理されたものを元に戻すメソッドも有ります。
必要なファイルはこちら
- GTMDefines.h
- GTMNSString+HTML.h
- GTMNSString+HTML.m
プログラムはこんな感じ。カテゴリを使い NSString にメソッドを追加する形で実装されています。
NSString* str; // エスケープ処理 str = [NSString stringWithString:@"<p>test</p>"]; NSLog(@"<p>test</p> -> %@", [str gtm_stringByEscapingForHTML]); // エスケープ処理された文字を元に戻す str = [NSString stringWithString:@"<p>test</p>"]; NSLog(@"<p>test</p> -> %@", [str gtm_stringByUnescapingFromHTML]);
結果はこうなります。
<p>test</p> -> <p>test</p> <p>test</p> -> <p>test</p>
Google Toolbox for Macを使ってみた
ちょっと出遅れた感がありますが噂の「Google Toolbox for Mac」を触ってみました。
「Google Toolbox for Mac」についてはこちら
GoogleからMacデベロッパへの贈り物「Google Toolbox for Mac」 | パソコン | マイコミジャーナル
http://journal.mycom.co.jp/news/2008/02/01/024/index.html
Google Toolbox for Mac
http://kirika.la.coocan.jp/cocoa/3rdlib/google/toolbox/foundation.html
とりあえず以下の Google Code から google-toolbox-for-mac-1-5-1.zip をダウンロード。
google-toolbox-for-mac - Google Code
http://code.google.com/p/google-toolbox-for-mac/
「プロジェクト」-「アクティブなビルド構成を設定」-「TigerOrLater-Release」に変更し、ビルド。
ここまで進めたところで標準のFramework以外の使い方を知らなかったので使い方を以下のサイトでチェックし、なんとか使用できる様になりました。
Use framework - Programming Room - Mac OS X
http://variousible.sakura.ne.jp/Apple/Creating/Tools/Xcode-useFramework.html
早速、Base64エンコードのライブラリを使ってみました。
ウィンドウにボタンを配置し、アクションに以下の様なプログラムを設定しました。
#import "AppController.h" #import "GoogleToolboxForMac/GTMBase64.h" @implementation AppController - (IBAction)run:(id)sender { NSString *str; str = [NSString stringWithString:@"TEST"]; NSLog(@"--Ascii文字だけのとき"); NSLog(@"Ascii :%@", [GTMBase64 stringByEncodingData:[str dataUsingEncoding:NSASCIIStringEncoding]]); str = [NSString stringWithString:@"TEST文字列"]; NSLog(@"--日本語を含む文字列"); NSLog(@"Ascii :%@", [GTMBase64 stringByEncodingData:[str dataUsingEncoding:NSASCIIStringEncoding]]); NSLog(@"EUC-JP:%@", [GTMBase64 stringByEncodingData:[str dataUsingEncoding:NSJapaneseEUCStringEncoding]]); NSLog(@"UTF :%@", [GTMBase64 stringByEncodingData:[str dataUsingEncoding:NSUTF8StringEncoding]]); } @end
標準のFrameworkを使うときみたいに
#import "GoogleToolboxForMac/GoogleToolboxForMac.h"
このように書いていてずっとエラーになってちょっとハマりました。こいつはそれぞれ必要なヘッダファイルだけimportして使うみたいです。
出力結果はこんな感じバッチリBase64になってます。
--Ascii文字だけのとき Ascii :VEVTVA== --日本語を含む文字列 Ascii :(null) EUC-JP:VEVTVMq4u/rO8w== UTF :VEVTVOaWh+Wtl+WIlw==
日本語を含んだ文字列をAsciiだと言い張って実行すると null になるみたいです。
他にもHTMLやXMLのパーサもあるみたいなのでそちらも色々とチェックしようかと思ってます。
あとソースにiPhone用のFramework作成用のプロジェクトも入っているみたいなのでそちらiPhoneでも使えそうな感じです。
Google Toolbox for Macの正規表現を使ってみた
Google Toolbox for Macの正規表現を使ってみました。
前回と同様、ウィンドウにボタンを配置し、アクションに以下の様なプログラムを設定しました。
#import "AppController.h" #import "GoogleToolboxForMac/GTMRegex.h" @implementation AppController - (IBAction)run:(id)sender { NSString *str; GTMRegex* regex; NSArray* array; // 正規表現に使用する文字列をエスケープ NSLog(@"--escapedPatternForString:"); str = [NSString stringWithString:@"^.[$()|*+?{\\"]; NSLog(@"%@", [GTMRegex escapedPatternForString:str]); // 0番目にマッチした文字列全体。以降はサブパターンにマッチした文字列を返す。 // マッチしていない場合は NSNull となる。 NSLog(@"--subPatternsOfString:"); regex = [GTMRegex regexWithPattern:@"(fo(o+))((bar)|(baz))"]; array = [regex subPatternsOfString:@"foooooobaz"]; int num = 0; for (NSString *match in array) { NSLog(@"%d: %@", num++, match); } // 0: "foooooobaz" -> マッチした文字列全体 // 1: "foooooo" -> (fo(o+)) にマッチした文字列 // 2: "ooooo" -> (o+) にマッチした文字列 // 3: "baz" -> ((bar)|(baz)) にマッチした文字列 // 4: NSNull -> (bar) にマッチした文字列 // 5: "baz" -> (baz) にマッチした文字列 // 最初にマッチしたものを返す NSLog(@"--firstSubStringMatchedInString:"); regex = [GTMRegex regexWithPattern:@"foo.bar"]; NSLog(@"%@", [regex firstSubStringMatchedInString:@"foo1barfoo2barfoo3bar"]); // マッチしたかをBOOLで返す NSLog(@"--matchesSubStringInString:"); regex = [GTMRegex regexWithPattern:@"foo.bar"]; NSLog(@"%d", [regex matchesSubStringInString:@"foo1bar"]); NSLog(@"%d", [regex matchesSubStringInString:@"foo123bar"]); // マッチした文字列を置き換え NSLog(@"--stringByReplacingMatchesInString:withReplacement:"); regex = [GTMRegex regexWithPattern:@"(foo)(.*)(bar)"]; NSLog(@"%@", [regex stringByReplacingMatchesInString:@"foo123bar" withReplacement:@"<b>\\2</b>"]); // NSStringにカテゴリが定義してあるため、NSString でも今までに紹介したメソッドと // 同様な処理が可能になっています // ※NSString のデータはパターンの文字列ではなく、検索対象の文字列になるため多少 // 引数が異なることに注意 NSLog(@"--gtm_stringByReplacingMatchesOfPattern:withReplacement:"); str = [NSString stringWithString:@"foo123bar"]; NSLog(@"%@", [str gtm_stringByReplacingMatchesOfPattern:@"(foo)(.*)(bar)" withReplacement:@"<b>\\2</b>"]); } @end
出力結果はこうなります。
--escapedPatternForString: \^\.\[\$\(\)\|\*\+\?\{\\ --subPatternsOfString: 0: foooooobaz 1: foooooo 2: ooooo 3: baz 4: <null> 5: baz --firstSubStringMatchedInString: foo1bar --matchesSubStringInString: 1 0 --stringByReplacingMatchesInString:withReplacement: <b>123</b> --gtm_stringByReplacingMatchesOfPattern:withReplacement: <b>123</b>
また、正規表現をどのように処理しているのかプログラムを確認したところ内部的には regexec() という関数を呼んでいました。
この関数、今まで知らなかったんですが調べたところC言語で正規表現を行う関数でした。Googleが自前で作ってたりするのかなぁ?と思ってたのでちょっと残念でした。
Manpage of REGEX
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/regex.3.html
フレームワークのプログラム内で REG_EXTENDED がセットしてあるため正規表現としては「POSIX 拡張正規表現」が使えるようです。
そのためPerlレベルの凝った正規表現は無理ですがちょっとした正規表現が必要なときなどには便利に使えそうです。
ちなみに正規表現についてこちらの本などが評判良いです。
- 作者: Jeffrey E.F. Friedl,株式会社ロングテール,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/04/26
- メディア: 大型本
- 購入: 24人 クリック: 754回
- この商品を含むブログ (82件) を見る
正規表現の良く使うパターンの例題が載っていて実践にすぐ使えて便利です。
後、各種環境や言語別の方言について載っているのが良かったです。
正規表現ハンドブック (Technical Handbook Series)
- 作者: 鹿島和郎,吉村晋一,木村浩一
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2005/06/30
- メディア: 単行本
- 購入: 7人 クリック: 98回
- この商品を含むブログ (12件) を見る