iOSの非公開APIを使ってみた Bluetooth編
App Storeには公開せず、 自分で使う用のユーティリティアプリを作りたくなったので 非公開APIを使ってみることに。 毎度の事ながら全然わからず躓きまくりだったのでメモ。
非公開APIは、次の手順で利用可能です。
- ヘッダの入手
- Frameworkのリンク
- コードを書く
はい。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度呼んでおくべきです。