【脱獄アプリ開発】第6回 iOSOpenDevを使ったSBSettingsトグルの作り方
今回は、iOSOpenDevを使ってSBSettingsのトグルを作る方法を紹介します。SBSettingsは色々と応用が効くので、覚えておきましょう!
前回のあらすじ ~ しばらく時間が経ったので、復習してみてください。【脱獄アプリ開発】第4回 XcodeとiOSOpenDevをインストールしよう!
手順は、でーもんさんとこ見れば分かるかと思います。
【iPhone】iOSOpenDevを使ってみよう(基礎編+SBSettings Toggle) : dmnlog
ポイント
Emacsの操作起動 | $ emacs (file_path) |
終了 | ctrl+x ctrl+c |
開く | ctrl+x ctrl+f |
保存 | ctrl+x ctrl+s |
取消 | ctrl+g |
iosod sshkey -h iPhoneのhostname.local もしくはWifiで割り当てられているIPアドレス(192.168.0.xとか)Product→Build For→Build For Profiling
Command /bin/sh failed with exit code 255ターミナルを開き以下を実行して下さい。
iosod sshkey -h [device-hostname-or-ipaddress]それでもダメな場合は、sudo -sでrootになって同様に行ってください。
指定したプロジェクトのフォルダに「Packages」というフォルダができているので、その中のdebパッケージを使います。
iFunBoxなどで「/var/mobile」ディレクトリに入れます。
ターミナルを開き以下のコマンド入力
ssh root@[IPアドレス]
cd /var/mobile
dpkg -i com.ichitaso.test_1.0-1_iphoneos-arm.deb(作ったdebの名前)
killall SpringBoard
こんな感じで、インストールされたのを確認して下さい。
ResetCamera SBSettingsの作り方
ResetCamera iPhoneやiPadのカメラロールを一括削除できるSBSettings Toggleこれを作ってみます。
#import <Foundation/Foundation.h>これでビルドしてみましょう。
#import <UIKit/UIKit.h>
#include <notify.h>
static BOOL isToggleEnabled = YES;
@interface DCIMClear : UIResponder <UIAlertViewDelegate>
{
}
- (DCIMClear*) initWindow;
@end
@implementation DCIMClear
- (DCIMClear*) initWindow
{
UIAlertView *alert =
[[UIAlertView alloc] initWithTitle:@"Delete the Camera Roll?"
message:@"If the tap of the OK,n a device will Reboot."
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK",nil];
[alert show];
[alert release];
return self;
}
- (void)alertView:(DCIMClear *) initWindow
clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0) {
isToggleEnabled = NO;
} else if (buttonIndex == 1) {
notify_post("com.ichitaso.dcimclear");
}
}
@end
BOOL isCapable() // required; called when loaded; indicates if toggle supports current platform
{
return YES;
}
BOOL isEnabled() // required; called when refresh button is pressed; functionally determines and indicates if toggle is on
{
// perform something here to functionally determine if toggle is on and set isToggleEnabled accordingly
// ...
return isToggleEnabled;
}
BOOL getStateFast() // optional; called each time SBSettings window is shown; quickly indicates if toggle is on
{
// nothing is performed to functionally determine if toggle is on, only return last known state using isToggleEnabled (for performance reasons)
return isToggleEnabled;
}
void setState(BOOL enable) // required; called when user presses toggle button
{
[[DCIMClear alloc] initWindow];
isToggleEnabled = enable; // for getStateFast() use
}
float getDelayTime() // required; time in seconds spinner will show on toggle button after setState() returns (to allow background work to perform)
{
return 0.1f;
}
BOOL allowInCall() // optional, if not implemented, assumed to return YES; indicates if toggle can be used during a call
{
return YES;
}
…はい、実際にインストールしても動きませんね。
SBSettingsでトグルをON/OFFした時に「com.ichitaso.dcimclear」というファイルに記載している内容を実行するんですが、それを準備してあげる必要があります。
#!/bin/shこのようにシェルスクリプトを書いて「/var/mobile/Library/SBSettings/Commands」の中に入れてあげましょう。
rm -rf /var/mobile/Media/DCIM
rm -rf /User/Media/DCIM/*
rm -rf /User/Media/PhotoData/Thumbnails/120x120.ithmb
rm -rf /User/Media/PhotoData/Thumbnails/158x158.ithmb
rm -rf /var/mobile/Media/PhotoData/Thumbnails/120x120.ithmb
rm -rf /var/mobile/Media/PhotoData/Thumbnails/158x158.ithmb
mkdir /var/mobile/Media/DCIM
chown -R mobile:mobile /var/mobile/Media/DCIM
chmod -R 0750 /var/mobile/Media/DCIM
reboot
ボタンの画像を作りたい時は、「/var/mobile/Library/SBSettings/Themes/Default/トグルが入っているディレクトリと同じ名前のフォルダ」に「on.png」と「off.png」を入れてあげます。
今回はON/OFF関係なく動作するものなので、同じ画像でOKです。
ON/OFFで違う動きをするものの場合は、それぞれの画像を作成します。
テンプレート:SBSettings_templates.zip
あとは、こちらを参考に仕上げて見て下さい。
【脱獄アプリ開発】第2回 Cydia Debパッケージを作成しよう!
次回をお楽しみに!
ディスカッション
コメント一覧
AssistiveTouchのON/OFFトグルを作成していただけら、大変うれしいのですが。
残念ながら、私の能力では自作することは不可能です。
もし、よろしければご検討の程、よろしくお願いいたします。