ホーム > 未分類 > SBSettings用アドオンってどうやって作るのか調べてみた。

SBSettings用アドオンってどうやって作るのか調べてみた。

いつもお世話になっているSBSettings。BossPrefsはシェルスクリプトで簡単に自分用設定が追加できましたが…SBSettingsはそうはいかないみたい。どうやって作るのか調べてみたのでメモっておきます。

作り方を学ぶ

SBSettings Toggle Spec – thebigboss.orgに全部書いてありました。ざっくり読み進めてみる。
 

Want to make your own SBSettings toggle?

はい、作りたいです。
 

Know how to develop in objective-C and C? Then this tutorial is for you.

C言語は10年前にかじった事はありますが…覚えてません。いつも通り気合いと勘でチュートリアル読みます。
 

Your toggle will run in springboard. This means if your toggle leaks memory, the system will be leaking memory. … You must be very careful to free (release) all the memory you allocate.

怖いなぁ。リリースするのは敷居が高いなぁ。
 

Your toggle will run as user mobile. Many functions require root access.

mobileユーザなんですね。
 

The functions you must implement in your dylib file:

解説が丁寧なのでなんとなく読む。スケルトン自体は難しくなさそう。
 
一番下にサンプルソースがあるのでコンパイルしてみる。

コンパイル環境構築

いい加減にMac買えと言う声もありますが…今回もセルフコンパイルにします。最新のSDKを落としてきて環境を構築。
iPhone 2.0 ToolchainでLha for Unixをセルフコンパイル

コンパイルして動かしてみる

make
mkdir /private/var/mobile/Library/SBSettings/Toggles/sbslocation
cp Toggle.dylib /private/var/mobile/Library/SBSettings/Toggles/sbslocation/Toggle.dylib


動いた!

 
ついでにソースとMakefileをざっくり読む。plist読み書きサンプルですね。
 
補足:今回作った環境では/usr/bin/asが上手く動かない。/usr/libexec/gcc/darwin/arm/asを/usr/bin/asに通して誤魔化した。

/usr/bin/as: assembler (/private/var/bin/../libexec/gcc/darwin/arm/as or /private/var/bin/../local/libexec/gcc/darwin/arm/as) for architecture arm not installed
/usr/bin/as: no assemblers installed

何を作ろうか考えてみる

スケルトンとMakeFileが理解できた?!ので早速作ってみたい。plist編集はサンプルと同じになっちゃうので…DBいじる奴にした。それならメールを一括で開封できたらよいな。
 
メールのデータベース(sqlite3)は以下にあるので、これを調べてみる。mailboxes.unread_countがそれっぽい。

/private/var/mobile/Library/Mail/Envelope\ Index

 
でもネットを調べたら既に調べている人がいた…
How to mark all email messages as read on iPhone 3G – MISSING BRACE BLOG
 
以下のSQLを実行して、iPhoneを再起動、その後メールアプリを起動すると全部既読になる。

update messages set flags = flags + 1 where flags&1 = 0;
update mailboxes set unread_count = 0;


ただし、以下の問題点があります。

  • IMAPのアカウントは一旦既読になるけど、受信すると元に戻っちゃう。(既読かどうかはIMAPサーバ管理)
  • 再起動は面倒。

どちらも解決策は見つからず。そればっかりに時間を取られちゃってもアレなので…POPアカウントのメールが一括で既読にできるアドオンと割り切って作ってみよう。

作ってみる

プログラムを書く

参考サイト様(後述)と10年前の記憶を辿って…できた!
抜粋。冗長で微妙なソースですが…習作なのでお許しを。
ソースをダウンロード

// Pass in state to set. YES for enable, NO to disable.
void setState(BOOL Enable)
{

    const char *maildb_path = "/private/var/mobile/Library/Mail/Envelope\ Index";
    const char* sql =
        "BEGIN TRANSACTION;"
        "update messages set flags = flags + 1 where flags&1 = 0;"
        "update mailboxes set unread_count = 0;"
        "COMMIT;";

    sqlite3 *db;
    sqlite3_stmt *pstmt = nil;
    int ret;
    int flgErr = 0;
    const char* textMessage;

    //DB::Connect
    ret = sqlite3_open(maildb_path,&db);
    if(ret != SQLITE_OK)
    {
        NSLog(@"MarkasRead:Open_Error:%s",sqlite3_errmsg(db));
        textMessage = "DataBase Open Error";
        flgErr = 1;
    }

    if(!flgErr)
    {
        while(*sql)
        {
            sqlite3_prepare_v2(db, sql, -1, &pstmt, &sql);
            ret = sqlite3_step(pstmt);
            if(ret != SQLITE_DONE)
            {
                NSLog(@"MarkasRead:Execute_Error:%s",sqlite3_errmsg(db));
                textMessage = "SQL Execute Error";
                sqlite3_exec(db, "ROLLBACK TRANSACTION", 0, 0, 0);
                flgErr = 1;
                break;
            }
            sqlite3_reset(pstmt);
        }
    }

    //DB::Close
    sqlite3_finalize(pstmt);    //finalize
    sqlite3_close(db);

    //Show Alert
    if(!flgErr){textMessage = "Database Update Successful!\nPlease reboot your iPhone/iPod Touch.After reboot,Run the MobileMail.app.(It's reflected in pop3 account only.)";}
    UIAlertSheet *alert = [[[UIAlertSheet alloc] init] autorelease];
    [alert setTitle: @"Mark all emails as read"];
    [alert setBodyText: [NSString stringWithCString:textMessage encoding:NSUTF8StringEncoding]];
    [alert addButtonWithTitle: @"OK"];
    [alert setAlertSheetStyle: 0];
    [alert popupAlertAnimated: YES];

    return;
}


 

動かしてみる

make
mkdir /private/var/mobile/Library/SBSettings/Toggles/MarkAsRead
cp Toggle.dylib /private/var/mobile/Library/SBSettings/Toggles/MarkAsRead/Toggle.dylib


動いた!
 
 
左:動作前 右:動作後
 
※ホーム画面のメールアイコン未読数も若干減ります。
 

問題点

  • 再起動が必要、POPアカウントのみと言ういまさん感が未解決。
  • Toggle.dylibは更新後再起動が必要なのでデバックが面倒。コマンドとして作ってテストしてから組み込みが吉?

参考にさせて頂いたサイト様

sqlite3
SQLite を利用したデータベース操作 – AdvancedIT(itsp.keio.ac.jp)(PDF)
iPhone Programming Tutorial – Creating a ToDo List Using SQLite Part 4 – iCodeBlog
SQLiteで“おこづかいちょう” – CodeZine
UIAlertSheet
UIAlertSheet – iPhone/Touch コーディング方法 覚え書き
アイコン
iPhone Icon Style .psd Kit – keeptheweb WEIRD

雑感

リリースするのは敷居が高いですが…これは楽しいです。現状はノンプログラマな私ですが…もうちょっと勉強したくなりました。そもそもObjective-Cってなんなのかすら知らない。そしてC言語も記憶が危うい状態からですが…
 
まず10年前に買った↓を探そう。

 
公式SDKとの違いを把握できるか不安ですが…ノリだけで↓を予約してみた。憬れのErica様本なので。

 
まずはこれを買うべき?

(参考書評)iPhone日本語解説本「iPhoneSDKプログラム大全」購入しました。この本でもやもやをすっきりしましょう – mtl.recruit.co.jpは今回も参考になりました。
 
それともこれ?

(参考書評)せっかく詳解Objective-C 2.0読んでるし、ついでにマインドマップにしてく – マグネシウムライトはマインドマップ要約でわかりやすい。
 
あとクロスコンパイル環境の整備をしよう。Macはまだ買わない。
だってMac買ったら…きっと楽しすぎて時間がいくらあっても足りないのです。<自分に”買うな!”と一生懸命言い聞かせてます。
 

Comments:3

茶坊主 09-02-13 (金) 9:20

「知らない人」改め茶坊主です。(笑)
Mac買いましょうよ!(こういう後押し大好きです)絶対に楽しいですって。

plistの編集も簡単になりまっせ! 開発環境も只で手に入るし。

以上、悪魔のささやきでした。

蜜柑箱 09-02-13 (金) 23:11

すいませんが記事には関係していませんが。
ipod touchのアイコンを自分のipodに入っている
写真にアイコンを変えることはできますか?

goodegg 09-02-14 (土) 5:53

>茶坊主さん
この悪魔めw
iPhone買ってからだいぶMacに興味がでたことは事実ですねぇ。
まんまとジョブスの戦略に…
App Store向けに作ってみたいぜ!とか目的ができた暁にはすぐ買いますが…いま買っちゃうとiPhoneに加えて楽しいおもちゃが増えちゃうので…遊びきれません。
まだiPhoneもわからんことが多いんですよねぇ。いじりがいはありますが…

>蜜柑箱さん
写真とアプリを選んでアイコンを自動生成+置換えみたいなアプリは知りません。(もしあったら教えてください。)
WinterBoard(JBアプリでテーマ変更するやつ)用のテーマを自分で作るのが宜しいかと。
私はWinterBoard使っていないので詳細をアドバイスできませんが…
自作テーマリリースされている方のをダウンロードして、自分用にカスタマイズされてはいかがでしょう。

Comment Form
名前とメールアドレスを記憶する

Trackbacks:0

トラックバックURL
http://iphone.goodegg.jp/archives/3350/trackback
Listed below are links to weblogs that reference
SBSettings用アドオンってどうやって作るのか調べてみた。 from iPhone.goodegg.jp

ホーム > 未分類 > SBSettings用アドオンってどうやって作るのか調べてみた。

サイト内検索
更新情報
オススメなモノ
iPhone 4 Style Book アプリの選定や執筆に参加させて頂きました。iPhone初心者〜中級者に向けた濃密な内容に仕上がっております。
iPad Style Book 執筆に参加させて頂きました。iWorkも30頁くらいとって丁寧に解説してあります。
Case-Apple Wireless Keyboard (JIS) iPhoneで使えるBluetoothキーボードのうち、唯一JIS配列で打鍵できるキーボード。こいつがあればiPhoneで長文作成も楽々。
Case-Mate iPhone4 専用 iPhoneとSuicaなどのICカードを一緒に持ち歩けるケース。上手く読み取れないときはPIT-Mobile 干渉エラー防止シールがオススメ。
AppleコンポジットAVケーブル MB129LL/B 写真と動画再生をTVに出力。実はかなりオススメ。レビュー記事はこちら
MiniRizer pocked-sized Gadget Stand 1,800円前後と安くはないけど持ち運びできる使い勝手の良いiPhoneスタンド。レビュー記事はこちら。
SANWA SUPPLY PDA-STN2W 1,000円前後で買える安いスタンド。レビュー記事はこちら
ブログパーツ
あわせて読みたいブログパーツ

 フィードメーター - iPhone.goodegg.jp
キーワード
相互リンク

Return to page top