iPhone SDK不要でSBSettingsトグル開発ができるSBSettings Scripty
2016/03/16
価値ある情報をユーザー視点で発信するブログ
2016/03/16
BossPrefsのことを覚えている人は、きちんとした開発環境を用意しないとトグルが作れない、SBSettingsのことを恨めしく思うこともあるでしょう。
BossPrefsはシェルスクリプトを書きさえすれば、機能を追加できたのに、と。
そして、待てど暮らせど開発環境無しでSBSettingsトグル(以下トグルと略記)が作れるようにならないことに対し、半ば諦めの気持ちでいたはずです。
しかし、そんな日々も今日でおしまいです。
今回作ったSBSettings Scriptyは、C言語、Objective-Cに足を踏み入れること無しに、シェルスクリプトベースでトグルを作ることができる、ツールキットのようなものです。
Scriptyを使ってトグルを作るのは簡単です。
シェルスクリプト、plistを書き、ファイルを所定の位置に設置するだけです。それだけで、自分だけのトグルが完成します(本当はもう少し手順あり。後述)。
もちろん、できることはシェルスクリプトでできる範囲に限ります。
しかし、シェルスクリプトの代わりにRuby、Pythonなどを使うこともできますし、工夫次第では可能性は小さくないでしょう。ぜひ、SBSettings Scriptyで自分だけのトグルを作ってみてください。(続きは[MORE]から)
もくじ
New野良リポジトリからSBSettings Scriptyをインストールしてください。
「SBSettings Scripty」で検索してください。無保証です。
いっしょに、動作に必要なscriptydがインストールされます。
インストールが済むと、SBSettings上に、Scripty01、Scripty02というトグルが現れるはずです。
これがScriptyを使って作られたトグルです。
Scripty01、Scripty02をタップしてみると、タップするやいなやSBSettingsのウインドウが格納され、次にSBSettingsを起動してみると、色が赤から緑に変わっているはずです。
Scripty01、Scripty02をどんどんタップしていくと、色が緑、赤、緑、赤と交互に切り替わることが分かると思います。
また、「/var/mobile/scripty.txt」というテキストファイルが出来ており、中を見ると次のようなテキストがScripty01、Scripty02を起動するごとに追記されていることが分かります。
com.hitoriblog.Scripty01-launch-when-toggle-is-on
com.hitoriblog.Scripty02-launch-when-toggle-is-on
com.hitoriblog.Scripty01-launch-when-toggle-is-off
com.hitoriblog.Scripty02-launch-when-toggle-is-off
com.hitoriblog.Scripty01-launch-when-toggle-is-off
com.hitoriblog.Scripty02-launch-when-toggle-is-off
com.hitoriblog.Scripty01-launch-when-toggle-is-on
つまり、Scripty01、Scripty02は交互に状態を切り替え、さらにテキストにログを書き出しているわけです。
Scriptyベースのトグルは、どんなファイルから成り立っているのか? それを見ていきます。
管理ファイルは省略しましたが、SBSettings Scriptyには以下のファイルが入っています。
一つのパッケージにScripty01、Scripty02の二つが入っていますので、それぞれに分けてリストアップします。
*Scripty01
/var/mobile/Library/SBSettings/Toggles/Scripty01/Info.plist
/var/mobile/Library/SBSettings/Toggles/Scripty01/Toggle.dylib
/var/mobile/Library/SBSettings/Themes/Default/Scripty01
/var/mobile/Library/SBSettings/Commands/com.hitoriblog.Scripty01-launch-when-decision-state
/var/mobile/Library/SBSettings/Commands/com.hitoriblog.Scripty01-launch-when-toggle-is-off
/var/mobile/Library/SBSettings/Commands/com.hitoriblog.Scripty01-launch-when-toggle-is-on
*Scripty02
/var/mobile/Library/SBSettings/Toggles/Scripty02/Info.plist
/var/mobile/Library/SBSettings/Toggles/Scripty02/Toggle.dylib
/var/mobile/Library/SBSettings/Themes/Default/Scripty02
/var/mobile/Library/SBSettings/Commands/com.hitoriblog.Scripty02-launch-when-decision-state
/var/mobile/Library/SBSettings/Commands/com.hitoriblog.Scripty02-launch-when-toggle-is-off
/var/mobile/Library/SBSettings/Commands/com.hitoriblog.Scripty02-launch-when-toggle-is-on
一つのトグルにつき、一つのToggle.dylib、一つのInfo.plist、そして三つのシェルスクリプトから構成されています。
Toggle.dylibは全くサイズが同じで、同じものを共用していることが分かると思います。
Scriptyベースのトグルは、Toggle.dylibと同ディレクトリに置くInfo.plistで、その基本的な設定をします。
中身は以下のようなものです(Scripy01のInfo.plist)。
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>
<plist version=”1.0″>
<dict>
<key>ScriptyId</key>
<string>com.hitoriblog.Scripty01</string>
<key>ShouldTransitionOut</key>
<true/>
<key>HasStatus</key>
<true/>
<key>DelayTime</key>
<integer>0</integer>
<key>AllowInCall</key>
<true/>
</dict>
</plist>
要素の解説をします。
Info.plistのScriptyIdの後ろに「-launch-when-decision-state」、「-launch-when-toggle-is-on」、「-launch-when-toggle-is-off」を付けた、/var/mobile/Library/SBSettings/Commands/に置かれたスクリプトが当該トグルから実行されます。仮にScriptyIdが「hoge」だった場合は「hoge-launch-when-decision-state」といった具合です。
それぞれどんな役割を果たすか解説します。
Scripty01のスクリプトの内容は以下のようなものです。
フラグファイルが存在するかどうかを判定し、存在すれば終了コード1を返し、存在しなければ終了コード0を返します。
終了コード1の場合は、トグルがOn(緑)状態、終了コードが0の場合はトグルがOff(赤)状態となります。
#!/bin/sh
flagfile=/var/mobile/Library/Preferences/com.hitoriblog.Scripty01.flagfile
if [ -f $flagfile ]; then
# Toggle State -> ON
exit 1
else
# Toggle State -> OFF
exit 0
fi
トグルがOff状態のときに実行されます。Off状態ということはフラグファイルが存在しないということなので、touchコマンドでフラグファイルを生成しています。
また、このスクリプトが実行されたことを/var/mobile/scripty.txtにログとして記録しています。
#!/bin/sh
touch /var/mobile/Library/Preferences/com.hitoriblog.Scripty01.flagfile
echo “com.hitoriblog.Scripty01-launch-when-toggle-is-off” >>/var/mobile/scripty.txt
トグルがOn状態のときに実行されます。On状態ということはフラグファイルが存在するということなので、rmコマンドでフラグファイルを削除しています。
また、このスクリプトが実行されたことを/var/mobile/scripty.txtにログとして記録しています。
#!/bin/sh
rm /var/mobile/Library/Preferences/com.hitoriblog.Scripty01.flagfile
echo “com.hitoriblog.Scripty01-launch-when-toggle-is-on” >>/var/mobile/scripty.txt
ここまでの説明で勘のいい人はScriptyトグルを作れると思いますが、新しいScriptyトグルを作る手順を説明します。
Cydiaにいる仲間たちをインストールして、できることを増やしましょう。おすすめのコマンドを列記します。
こちらを参照してください PasteboardStackerでiPhone、iPadのテキスト処理を極める
scriptydは、[ScriptyId]-launch-when-decision-stateを実行した結果をSBSettingsにフィードバックし、On/Off状態に反映させるために必要なdaemonなので、Scriptyを使う限りは殺してはなりません。
ただし、使っているScriptyトグルのInfo.plist内HasStatusがすべてfalseであるならば、殺してもOKです。
自分で手段を切り開く人のためのScriptyです。
自分で作れ。