【脱獄アプリ開発】第6回 iOSOpenDevを使ったSBSettingsトグルの作り方

2013/07/11 16:57

今回は、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

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/Commands」の中に入れてあげましょう。

ボタンの画像を作りたい時は、「/var/mobile/Library/SBSettings/Themes/Default/トグルが入っているディレクトリと同じ名前のフォルダ」に「on.png」と「off.png」を入れてあげます。
今回はON/OFF関係なく動作するものなので、同じ画像でOKです。

ON/OFFで違う動きをするものの場合は、それぞれの画像を作成します。

テンプレート:SBSettings_templates.zip
あとは、こちらを参考に仕上げて見て下さい。

【脱獄アプリ開発】第2回 Cydia Debパッケージを作成しよう!
次回をお楽しみに!