[iOS] 設定アプリのスキーマがほぼ見つかったので、これまでの事を書いてみる

(10)

設定アプリの特定のページを一発で開く事が出来るショートカットを、ホーム画面に作る。と言うのが今も便利であると話題に上ったりしますね。

ショートカットを作成するために使用する「Schema(スキーマ)」もだいぶ判明しましたね。
と、いうことで今回はスキーマに関してちょっと書いてみました。

スポンサーリンク
スポンサーリンク

スキーマまとめ

発見、判明したスキーマは全て下記ドキュメントに記載しています

SettingApp Schema – 設定画面をサッと表示するURLスキーマ [まとめ]
スキーマまとめ。編集者:@hondamarlboro 、 @xxSANTAxx

こちらが以前、@hondamarlboro氏など多数の協力のもと作成しました「スキーマまとめ」です。

ちなみに、前書いた記事。

某も設定アプリへのショートカットURLスキーマを、まとめてみたござる | Tools 4 Hack
話題のアレです。 未脱獄でも設定アプリの特定のページを一発で開けるショートカットをホーム画面に作れるって奴です。 それに使用するURLスキーマを調べる & まとめてみたでござる。 …

スキーマの探し方

「スキーマまとめ」を作成する際に私が行っていたスキーマの探し方をいくつかご紹介します。
と、言いますか私の右往左往した記録です。

前情報

まず、スキーマを探し始めた時点での私の持っていた情報をまとめます。

  • 「prefs:root」で設定アプリのルートが起動する
  • 「prefs:root=LOCATION_SERVICES」で通知へアクセス出来る
  • 「prefs:root=General」で一般へアクセス出来る
  • 「prefs:root=General&path=Network」で一般 >> ネットワーク アクセス出来る

これらから分かったことは、スキーマはそれぞれの項目名をそのまま、もしくは似てる状態で使っていることが多い。
「LOCATION_SERVICES」のように「大文字、_(アンダーバー)」を使っていることからIDlabel多言語ファイルの要素を使用している可能性がある。
また、ルートにあるメニュー以下は「&path=」で繋げると言う事。
ここからスキーマと言うこともあり、URLとほぼ同じ構成が行けると考える。

という感じでした。

plistファイルを見る

設定アプリのファイルは下記の場所に存在します。

/Applications/Preferences.app/

脱獄を行っているデバイスであれば覗く事が可能です。
このフォルダ内には多数の「Plistファイル」があります。
schema-process001-02

そもそもこの「Plistファイル」はどんな働きをしているのかというと、設定アプリ内の項目のリストと思ってください。
上から順に「機内モード」で機能は○○で~、次に「Wi-Fi」があって~機能は~・・・という感じで、リストとして書かれています。
その一番はじめ、ルート部分が「Settings.plist」ですね。
それ以外にもたくさんファイルがありますが、1つのファイルに書くと膨大な量になってしまうため、複数のファイルに分けたと思えば良いでしょう。
たとえば「General.plist」は「設定 >> 一般」の部分だとファイル名から判断できます。

さて、これらのファイルを開いてみます。
ファイル内容はこんな感じの物が大量に記載されています。
schema-process001-03

スキーマを探していて注目すべきは場所は「label」、「id」配下のテキストです。
上で述べたように、これらの要素を使用している可能性がありました。
そこでファイルのlabelを見てみると「LOCATION_SERVICES」があります。
これが使われている可能性がより高くなりました。
schema-process001-04

ただ、これを参考に色々な部分を試しましたが出来る物と出来ない物がありました。
全部が全部これを使っているわけでは無い。と言う事も同時に判明。
「plistファイル」のみではある程度で限界が来ます。

多言語ファイルを見る

もう一つの可能性として思っていたのが多言語ファイルです。
要素名がスキーマになっている可能性があるため、多言語ファイルを確認しました。
日本語の言語ファイルは下記に存在します。

/Applications/Preferences.app/Japanese.lproj

こちらのファイル構成を見てみると、「Plistファイル」の構成とほぼ同じです。
ファイルによってそれぞれの担当ページがあると言うことがよく分かります。
schema-process001-05

言語ファイルを開いてみます。
こちらも同じく、このような記述が大量にあります。
schema-process001-06

key」が要素名、「string」が実際の言語情報です。
アプリ自体には要素名を記入しておき、アプリ実行時にiOSの使用言語に応じた多言語ファイルが選択され、要素部分を言語ファイルに沿って変更する。と言ったような動きをします。
さて、例えば「一般 >> 自動ロック」のスキーマを知りたいとします。
その場合は「一般」項目の担当をしている「General~iphone.strings」を見てみます。
「自動ロック」で文中検索すると要素名は「AUTOLOCK」であることがわかります。
schema-process001-07

ここまで分かれば、これを試してみます。
一般のスキーマは「prefs:root=General」であるので、その後に「&path=」と「AUTOLOCK」を繋げます。
prefs:root=General&path=AUTOLOCK」となり、これをテストします。
テストしたときにちゃんと動けば正解!動かずに一般項目までしか行かなければ駄目だったと言う事ですね。
ちなみにこのスキーマは正解です。

別の可能性

言語ファイルを調べながらTwitterにて、あれやこれやと呟いていました。
そこで情報が。
数個見つけたと報告していただいたのですが、その中の2つが私の環境では使用出来ませんでした。
検証していただくと、私の動かなかった環境は日本語環境、動いた環境は英語環境
これが表していることは言語情報、表示名がそのまま使用出来ると言う事です。

ここの時点で私は「iTunes Wi-Fi同期」のスキーマを探していました。
英語の表示名をためしても駄目、ならば・・・と日本語名「iTunes Wi-Fi同期」をそのまま使用してみました。
prefs:root=General&path=iTunes Wi-Fi同期」で試したところ、動いてしまいます。これにはビックリ・・・
まさかURLエンコードされるとはいえ、スペースが入ってても大丈夫、ましてや日本語が通るとは・・・と言った感想。

このことにより、大部分のスキーマが判明。

ちょっとしたひらめき

これに関しては「ひらめき」とかかっこつけてますが、何故最初に思い浮かばなかった・・・と怒鳴ってやりたいくらいです。

大部分のスキーマが判明しても、尚且つまだ分からない部分はありました。
例えばパスコードの項目は「セキュリティ的に作らなかった可能性」を考えていたので、これに関しては見つからなく当然と思っていました。
それでも、その他の「メールアカウント >> 並べ替え順序」などにスキーマがないとは考えられない・・・とも思っていました。

どうしたもんかなぁ~と思いながら違う作業を行っていたときに、気がついたことがあります。
それは「設定アプリをkillしても、再度起動した場合に以前閉じた項目から再開する」と言う事です。
これは何処かに何かしらの情報を持っていなければ駄目じゃないか?と考え設定ファイルを覗きます。

/var/mobile/Library/Preferences/com.apple.Preferences.plist

案の定、起動中は持っていないのに、ホーム画面に戻ったり、killされたときにだけ項目情報を保持していました。
しかも、スキーマの状態で
schema-process001-08

と、言うことでこれを参考にほぼ全てのスキーマが判明しました。
何故これを最初に思いつかなかった・・・

お・わ・り。

それでも分からない物

どうしても分からないスキーマがあります。
その代表が『パスコードロック』です。
さっぱりわかりません。
また、『機能制限』もさっぱりです。

私は最低でもこの2つにはスキーマが存在しないのではないかと考えています。
ここにスキーマがあるとセキュリティ的にとてもよろしくないですよね。
1発でアクセス出来てしまうわけですから。また、バグなんかが発生したとして、もしスキーマからならパスコード無しにこの項目にアクセスしまう。と言ったような自体がないとは限りません。
そうなるとパスコード自体をオフに出来てしまうわけで、とてもよろしくないです。

また、もう一つないと考えている理由は以下にあります。

スキーマあるか、ないかの判断方法

この方法で本当に判断できるのかは「?」ですが、考え方は良い線なのではないかと・・・

判断方法は調べたい項目を表示します。
そのままホームボタンを押して、ホーム画面へ戻ってください。
次に、ホームボタンをダブルクリックでアプリスイッチャーを表示させ、そこから設定アプリを完全に終了させます。
終了を確認したら再度、設定アプリを起動します。
このときに先ほど最後に表示していた項目が表示されれば、そこには何かしらのスキーマがあり、違う項目であればスキーマがない。
と、判断できると思われます。

上で述べたように、設定アプリ終了前の項目情報を設定ファイルにスキーマとして保持していましたよね。
もし再度起動したときに別の項目が表示されているのであれば、スキーマが保持されていないと考えられます。
理由としてはスキーマからの起動が制限されているもしくはそもそもスキーマの設定がない等がありそうです。
この現象はパスコードロック機能制限等のまだ不明としている部分で起ります。

コメント

  1. はじめまして
    3Gの4.2.1で脱獄をして(redsn0w_win_0.9.9b6使用)成功をしたのですが、アプリ等の不具合が起きたので(起動はするが一瞬で消える)アイチューンからDFUモードにしてから復元しようとしました。そしたら画面が暗くなり、電源を入れてもアイチューンに接続をうながすような画面が出てきます。何度もDFUモードにしてアイチューンから復元をしているのですが(エラー1015)などが出てきて復元できませんでした。SHSHのバックアップをしていません。
    もしかしてと思い復元ではなくてまた新たに脱獄ソフトをつかえば元に戻るかもと思い、行ったのですが変わりはありませんでした。
    もう復元等はできないでしょうか・知恵をお貸しください。長文失礼しました

    • SHSH保存してなのが全ての原因では?

      • 返信ありがとうございます。
        やはりSHSHをバックアップしてないと、どうにもなりませんよね・・・
        ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1353768683 などは試したのですがやっぱりどれもだめでした。
        同じような症状の人を見たことないので参考になってるのかはわかりませんが・・・

    • iPhone 3GでiOS 4.2.1への復元であればSHSHのバックアップは必要ありません。
      3GではiOS 4.2.1が最終バージョンですのでAppleがまだ発行をしています。

      1015エラーはベースバンド不一致エラーです。
      ベースバンドをiPad Basebandにしていませんか?
      もしそうであるならばSn0wbreeze等で作ったCFWで復元を行ってください。

      • 返信ありがとうございます。
        週末忙しくてためしていないのでycさんのほうもためして早速してみます。

  2. 自分も同じ症状でずっと悩んでいます。(redsn0w_win_0.9.9b6もsn0wbreezeの途中で強制終了してブラックアウト)
    ipad basebandにしましたので、Sn0wbreezeで作ったCFWで復元をしようとしたら今度3194エラーが出ました(T_T)
    3194と1015の間を行ったり来たりです。

    しょうがないので5.0.1に今度アップグレードしましたら、今度simのアクティベーションができませんって。もう踏んだり蹴ったりです。
    ちなみに、自分は3GSの解約した32GBです。

    • アクティベートは解約済みのiPhoneSIMでも良いので、入れておいてください。
      または、Hacktivate後に、Ultrasn0wをインストールし、Redsn0wでDeactivateを行ってください。
      ただ、iOS 5.0.1ではUltrasn0wをインストールしても使えませんので、現在できるのはHacktivateまでです。

      3194は認証エラーです。
      iOS 5.0.1以外に復元するのであればTinyUmbrellaで認証サーバー偽装を行ってください。

  3. SANTAの管理人さん

    親切なご返答ありがとうございました。
    >解約済みのiPhoneSIM
    はい、解約済みのiPhone Sim(黒)を使用していました。
    ずっと「itunesサーバーがビージー、もう一度」が出ています。
    ここ数日間やっても一向にできません。

    >iOS 5.0.1以外に復元するのであればTinyUmbrellaで認証サーバー偽装
    はい、4.3.3にダウングレードしようとして、ずっとエラー3194が出ます。

    ちなみに、「TinyUmbrellaで認証サーバー偽装」のやり方教えていただけますか。

    よろしくお願い致します。

スポンサーリンク
スポンサーリンク
タイトルとURLをコピーしました