黒毛和牛モモバラ切り落し100g298円

iPhoneアプリを作ってます。リリースノートとか用ブログです。

libmagic-iosをCocoa static library frameworkにしました

1年以上前にlibmagicをiOSで動くようにしたものをGithubで公開してからずっとほったらかしにしていたのですが、勉強も兼ねてframeworkにしてみました。

前に更新してからGithubの仕様が変わってたみたいで、Githubからのバイナリの配布ができなくなったためインストール可能なframeworkはSourceForge.netに置いています。ちょっとまだSourceForge.netの使い方をちゃんと把握していないもので、主な説明はGithubのREADMEに書いています。ご利用の際はまずはGithubからご覧下さい。

Github: https://github.com/wagyu298/libmagic-ios
SourceForge: https://sourceforge.net/p/libmagic-ios/

ライセンスは修正BSDです。

libmagicが何か知らない人のための補足

libmagicとは、Unix系OSのfileコマンドのライブラリ部分です。
fileコマンドは指定されたファイルの種類を表示するコマンドです。実行例はこんな感じです。

$ file a3e68c84.jpg 
a3e68c84.jpg: JPEG image data

このfileコマンドのファイル分類処理部分のみ取り出したものがlibmagicになります。
上のfileコマンドと似たようなことをiOS用に書くと以下のようになります。

NSString *path = [[NSBundle mainBundle] pathForResource:@"a3e68c84" ofType:@"jpg"];
magic_t magic = magic_open(MAGIC_NONE);
magic_load(magic, NULL);
const char *filetype = magic_file(magic, [path fileSystemRepresentation]);
NSLog(@"file type is %s", filetype);
magic_close(magic);

実行すると以下のログ出力が得られます。

file type is JPEG image data

magic_open関数を呼び出す際に、MAGIC_MIMEフラグを渡すとmagic_file関数が返すテキストがMIME TYPEになります。

NSString *path = [[NSBundle mainBundle] pathForResource:@"a3e68c84" ofType:@"jpg"];
magic_t magic = magic_open(MAGIC_MIME);
magic_load(magic, NULL);
const char *filetype = magic_file(magic, [path fileSystemRepresentation]);
NSLog(@"mime type is %s", filetype);
magic_close(magic);

実行すると以下のようにMIME_TYPEが得られます。

mime type is image/jpeg; charset=binary

MAGIC_MIMEフラグの他にも色々設定できますので、詳しくはhttp://www.daemon-systems.org/man/magic_open.3.htmlとかをご覧下さい。