iOSの非公開APIを使ってみた Bluetooth編

App Storeには公開せず、 自分で使う用のユーティリティアプリを作りたくなったので 非公開APIを使ってみることに。 毎度の事ながら全然わからず躓きまくりだったのでメモ。

非公開APIは、次の手順で利用可能です。

  1. ヘッダの入手
  2. Frameworkのリンク
  3. コードを書く

はい。1以外は普通ですね。 それぞれについて見ていきます。

1. ヘッダの入手

ヘッダは、自分でダンプするか、ネットから拾ってくるかで用意できます。 今回は、自分でダンプする方法をメモります。

1.1. class-dumpを使う

class-dumpをDL、解凍してパスの通ったディレクトリに放り込みます。 これで class-dump コマンドが使えるようになりました。

次にこのコマンドを使って実際にヘッダファイルを作成します。 PrivateFrameworkがあるディレクトリは、次のような所だと思うので、、

/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/PrivateFrameworks

例えば、 BluetoothManager.framework のヘッダを出力したい時のコマンドはこんな感じになります。 -H オプションは「ヘッダ出力」、 -o オプションは「出力ディレクトリの指定」です。

$ class-dump -H -o ~/dumps/btm /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/PrivateFrameworks/BluetoothManager.framework

この例だと、次の4つのファイルが出力されました。

  • BluetoothDevice.h
  • BluetoothManager.h
  • BluetoothManager-BluetoothManagerPrivate.h
  • CDStructures.h

今回使いたいのは BluetoothManager.h なので、 この節の目的は達成です。

1.2 ネットで拾う

GitHub に全部(?)公開してくれている人がいるので、 それを利用するのがとても簡単で良いと思います。
ios6-private-frameworks

2. Frameworkのリンク

まずは、先ほどゲットした BluetoothManager.h をプロジェクトにぶち込みます。 そして、普通に Framework をリンクするように、 TARGETS の Build Phases の Link Binary With Libraries の 「+」ボタンをクリックして追加画面を開いて、、 「Add Other...」から追加したいヤツ(ここでは BluetoothManager.framework) を選択して「add」。

何も問題ないですね。

3. コードを書く

ヘッダをインポートして、、、

#import "BluetoothManager.h"

コードを書く!

BluetoothManager *bm = [BluetoothManager sharedInstance];
[bm setEnabled:YES];  // on
[bm setEnabled:NO];   // off

これでアプリから Bluetooth をオン/オフできるようになりました。
めでたしめでたし。

ちなみに、この例だと、最初に

[BluetoothManager sharedInstance];

を実行したタイミングで、 BTServer に接続するようなので、 init とかのタイミングで1度呼んでおくべきです。

参考(覚えている分だけで許してください…)