GeekLab    #037 02.28 MyScripts and Jailbreak Tweaks, hitoriblog         • 本スライドはIAMAS(情報科学芸術大学院             大学 / 岐阜県立国際情報...
ギーク気取りなiOS使いこなし             MyScriptsから         Jailbreak Tweakまで12年3月3日土曜日
  moyashiについて   • 個人ブログ「ひとりぶろぐ」を運営   • 2007年末ごろから、iOS系のニッチなネタ       をブログに投稿開始   • 手段と目的の主客が転倒しがち12年3月3日土曜日
アジェンダ         1.今ホットなJavaScript開発           環境MyScripts紹介         2.Jailbreak TweakでMyScripts           環境を強化12年3月3日土曜日
今ホットな               JavaScript開発環境                   MyScripts         • 電卓が苦手なのでiOS用式入力計算機や             iOS上で使えるプログラミング言語...
MyScriptsとは?         • App Storeで販売中のJavaScript開発             環境         • 350円 (Unit Kay)         • ユニバーサルアプリ         • 外...
どんなことが可能?         • テキスト処理         • ネットワークアクセス         • アプリケーション間連携12年3月3日土曜日
12年3月3日土曜日
MyScriptsはJavaScriptの             •作成     •実行             •編集     •管理 (※)               機能を持っている                   ※: 順序入れ...
スクリプトの作成         • 「+」ボタンでどんどん作成         • URL Scheme経由で、外部からス             クリプトのインストールが可能         • スクリプトは四つの属性を持つ12年3月3日土曜日
12年3月3日土曜日
ひとりぶろぐ内に                              あるMyScripts用の                              スクリプト集。リ                              ンクを...
スクリプトの編集         • 編集補助機能豊富         • キーワード(スニ                             ペット)挿入         • 拡張キーボード                       ...
12年3月3日土曜日
スクリプトの実行         • 通常モード時の実行         • 編集モード中のテスト実行          • デバッグウィンドウ          • JavaScriptコンソール         • クリップボード監視中の自...
12年3月3日土曜日
スクリプトの管理         • 順序入れ替え          • よく使うものを上に、ライブラリ             のように直接触れないものを下に         • 削除12年3月3日土曜日
JavaScriptエンジン         • 見えないUIWebViewが存在         • stringByEvaluatingJavaScriptを利用         • 基本的にはJavaScriptのほぼすべ        ...
ユーザーインターフェース         • WebViewの姿こそ見えないが             JavaScriptのものが使える             • alert(string)             • prompt(str...
MyScriptsの基本         • 超単純なスクリプト            • "Test" + "Script";            • 1 + 1;         • 実行するとどうなるか?12年3月3日土曜日
12年3月3日土曜日
アクション機能         • スクリプト終了時の実行行が返す文字列             を四つのアクションに引き渡す12年3月3日土曜日
アクション詳細         •    別のアプリで開く(Open In)         •    クリップボードにコピー         •    openURL()を呼び出す         •    画面に表示12年3月3日土曜日
openURL12年3月3日土曜日
入出力が充実                                      Open In クリップボード      URL (myscripts://)                                       ...
MyScriptsの特殊性1         • 関数、変数を全部のスクリプトで共有         • アプリが完全に終了するまで各種の状             態が維持される         • クロスドメイン制約のかからない      ...
MyScriptsの特殊性2         • WebViewにドキュメントをロード             できない         • document.locationを実行すると             openURLが発動12年3月...
MyScriptsの特殊性3         • document.body.innerHTMLにhtml             をセットすることでDOMは利用             可能         • Cookie、WebDatab...
MyScriptsの特殊性4         • 拡張関数をいくつか実装          • COPY(string)          • LOGOUT(string)          • SAVE_JSON(key, obj)     ...
MyScriptsの特殊性5         • 特殊な変数          • TARGET(openin/copy/openurl/info)          • TEXT          • IS_HTML          • I...
MyScriptsの特殊性6         • 特殊なマクロ          • #IMPORT          • #LIB         • 非同期処理の待ち合わせ12年3月3日土曜日
結果として         • WebViewに加える制約と引き換えに             XMLHttpRequestを制約無く使用可能         • 独自の拡張でiOS上で利用可能なア             プリ間連携の手段に全...
クリップボードの利用         早く 漲ってきた! 寝ろ     var a = TEXT.split(“ ”);     // [“早く”, “漲ってきた!”, “寝ろ”]     // スクリプト最終行がクリップボードへ     “【...
COPY(“てすと”);                   てすと             ※スクリプトの終了時に実行される12年3月3日土曜日
openURLの利用                 あいう     var mes = TEXT.split(“”).reverse().join(“”);     // mes = “いうあ”     var tw = “twitter:/...
URLでテキスト受取り        myscripts://run?title=hoge&text=hoge     TEXTの中身は        「hoge」に     var mes = “hage ” + TEXT + “ fuga”...
起動用URLの作成12年3月3日土曜日
生成したURLが     クリップボードにコピーされる             myscripts://run?title=LaunchTwitter      myscripts://run?title=LaunchTwitter&text=...
Touch Icon Creatorの利用                特定のスクリプトを起動する                アイコンが設置可能12年3月3日土曜日
登録用URLの作成       myscripts://add?title=LaunchTwitter&script=スク       リプトの内容       <a href=”myscripts://add?       title=Lau...
Writronとの連携                Writron(リトロン)                URL Schemeでの連携が                強力なテキストエディ                ター。MyScri...
MyScriptsにparenというスクリプト       を作成       渡されたテキストを括弧で挟んで       Writronに渡すスクリプト12年3月3日土曜日
12年3月3日土曜日
12年3月3日土曜日
12年3月3日土曜日
openURLによる連携で、MyScripts       がWritronの外部テキスト処理エン       ジンとして機能した。12年3月3日土曜日
Open Inの利用       最終実行行からの返り値をOpen In       で他のアプリケーションに渡せる12年3月3日土曜日
デフォルトではテキストファイル       として、IS_HTML変数をtrueにする       とhtmlファイルとして渡す12年3月3日土曜日
外部JavaScriptの利用       Hogeというスクリプトを作成保存                    #IMPORT で読込12年3月3日土曜日
コピペで登録、#IMPORTで読み込       みという手順で各種JavaScriptライ       ブラリを利用可能                         Scripts for MyScripts       http://h...
大きなライブラリを利用する上で       の注意点: #LIBで学習を抑止             さもないと、モッサリする!12年3月3日土曜日
ネットワークアクセス         • 取りうる手段          • XMLHttpRequest           • GET / POST          • JSONP          • WebSocket12年3月3日土曜日
XMLHttpRequest利用12年3月3日土曜日
12年3月3日土曜日
document.body.innerHTMLに             XHRで取得したテキストを             セットすると、DOMが利用可             能。jQueryの$()も使える。12年3月3日土曜日
サイトによってはXHRの同期モード       ではエラーが出る場合がある       (google.com等。リダイレクト?)       その場合は、XHRを非同期モードで       利用する。12年3月3日土曜日
非同期モード指定                       非同期モード             非同期処理終了12年3月3日土曜日
Web API利用の実際         • いまさらブログ | 復活の呪文2         • http://tama-sand.blogspot.com/             2012/01/2.html         • テキスト...
12年3月3日土曜日
「test」というテキストをクリップ      ボードにコピーしてから実行      クリップボードの文字をWebサービ      スで暗号化できた12年3月3日土曜日
スクレイピング         • Webページ上の任意のテキストを             機械的に抜き出してきて利用         • XHRで取得、DOMに展開、jQuery             で検索し、取得が黄金パターン    ...
• 開発にGoogle Chromeを利用         • jquery-injectorでページにjQueryを             強制的にロード        • JavaScriptコンソールを起動12年3月3日土曜日
• 都内の環境放射線量調査最新データを取             得したい         • http://monitoring.tokyo-eiken.go.jp/             monitoring/hourly_data.ht...
12年3月3日土曜日
• jQueryの$()を使って要素を検索             • 要素にid、classの指定無しなので              table中「∼」を含む行を検索             • 疑似クラス:contains()を使用   ...
MyScriptsに実装   jQueryをIMPORT12年3月3日土曜日
jQueryを使用       Mailアプリケーションが起動し、最       新の環境放射線量のデータと共に新       規メールが作成される12年3月3日土曜日
JSONPの利用         • JSONPとは?         • クロスドメイン制約がかかって自由             に使えないXMLHttpRequestに代わる             データ通信手段         • 外...
MyScriptsでのJSONP         • 起動直後はドキュメントが空であるの             で、document.header.innerHTML             に”<head></head>”をセットしておく ...
ドル円相場の取得         • 「りょーちの駄文と書評」で提供してい             るJSONP APIを利用         • 為替レートをJSONPで(無理矢理)取得         • http://ryouchi.se...
非同期モード                 コールバック             空のheadを足す12年3月3日土曜日
コールバック関数名             JSONPの読み込み開始12年3月3日土曜日
• JSONPの読み込みが終わるとコールバッ             ク関数が実行される。         • コールバック関数の引数は、APIから取             得したJSON。ここから円相場を取得し             て、...
HTMLビューの利用         • 渡されたテキストをコピーするだけのス             クリプトを作成         • 起動URLを取得         • myscripts:run?title=Copy&text=引数1...
起動URLをhtml埋込み             引数を合体12年3月3日土曜日
クリック                             Copy呼出し                          HTML Viewを                          一種のUIとして            ...
バックグラウンド動作                            BG実行指定                         ※一つだけ選択可能         • スクリプトリスト右のチェックボックス             をオ...
BG動作中、クリッ             プボードにテキスト             がコピーされると指             定されたスクリプト             が実行される。ク             リップボードのテキ    ...
• クリップボードにコピーされたテキスト             が正規表現にマッチしたら、             pushToArray()関数が実行される。また、             通知センターの通知が表示される。  通知センターか...
pushToArray関数で             は、配列にマッチし             た文字列を集めつ             つ、LOAD_JSON、             SAVE_JSON関数で             配列...
Jailbreak Tweakで             MyScripts環境を強化         • Jailbreakをすると、OSなどの動作を改変             可能         • MyScripts自体も改造可能だが...
10分の制約を外す         • BGプロセスを抱いたままBGで10分経過             すると、アプリケーションはOSから殺             されてしまう         • クリップボード監視を永続化できるなら   ...
DontKillBG         • バックグラウンド動作の10分の制約を外             すJailbrokenな環境で動作するTweak         • iPhoneを、Xcodeを起動させたMacに接          ...
/*         * DontKillBGLibrary.mm         * 2012.01.29         */        #import   <substrate.h>        #import   <Foundat...
• 以下からインストール可能          • [JB]iOS 5のバックグラウンド動               作10分の時間制限を取り払う               DontKillBG             • http://h...
まとめ         • MyScriptsは、iOS上の様々な問題を解決             するポテンシャルを秘めている         • スクリプトの配布、インストールは、             ブックマークレットよりとても簡単...
ご清聴ありがとうございました              ひとりぶろぐ              hitoriblog.com                 moyashi                 http://twitter.com/...
Upcoming SlideShare
Loading in …5
×

2012.02.28 IAMAS GeekLab #037 MyScripts

4,095 views

Published on

http://hitoriblog.com/

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,095
On SlideShare
0
From Embeds
0
Number of Embeds
1,410
Actions
Shares
0
Downloads
23
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

2012.02.28 IAMAS GeekLab #037 MyScripts

  1. 1. GeekLab #037 02.28 MyScripts and Jailbreak Tweaks, hitoriblog • 本スライドはIAMAS(情報科学芸術大学院 大学 / 岐阜県立国際情報科学芸術アカデ ミー)で赤松正行氏(http://akamatsu.org/)が 主催しているGeekLab (http://geeklab.jp/)の 第37回で使われたものです。12年3月3日土曜日
  2. 2. ギーク気取りなiOS使いこなし MyScriptsから Jailbreak Tweakまで12年3月3日土曜日
  3. 3.   moyashiについて • 個人ブログ「ひとりぶろぐ」を運営 • 2007年末ごろから、iOS系のニッチなネタ をブログに投稿開始 • 手段と目的の主客が転倒しがち12年3月3日土曜日
  4. 4. アジェンダ 1.今ホットなJavaScript開発 環境MyScripts紹介 2.Jailbreak TweakでMyScripts 環境を強化12年3月3日土曜日
  5. 5. 今ホットな JavaScript開発環境 MyScripts • 電卓が苦手なのでiOS用式入力計算機や iOS上で使えるプログラミング言語を大 調査(http://hitoriblog.com/?p=4955) • プログラミング言語はたくさんあるが、 現在ある中でMyScriptsが最も実用的12年3月3日土曜日
  6. 6. MyScriptsとは? • App Storeで販売中のJavaScript開発 環境 • 350円 (Unit Kay) • ユニバーサルアプリ • 外部キーボード、横画面対応12年3月3日土曜日
  7. 7. どんなことが可能? • テキスト処理 • ネットワークアクセス • アプリケーション間連携12年3月3日土曜日
  8. 8. 12年3月3日土曜日
  9. 9. MyScriptsはJavaScriptの •作成 •実行 •編集 •管理 (※) 機能を持っている ※: 順序入れ替え/削除12年3月3日土曜日
  10. 10. スクリプトの作成 • 「+」ボタンでどんどん作成 • URL Scheme経由で、外部からス クリプトのインストールが可能 • スクリプトは四つの属性を持つ12年3月3日土曜日
  11. 11. 12年3月3日土曜日
  12. 12. ひとりぶろぐ内に あるMyScripts用の スクリプト集。リ ンクをタップする だけでインストー ルが完了。スクリ プトの共有が非常 に簡単! http://hitoriblog.com/myscripts.html12年3月3日土曜日
  13. 13. スクリプトの編集 • 編集補助機能豊富 • キーワード(スニ ペット)挿入 • 拡張キーボード • ジェスチャーによ • 予約語等のサジェ るカーソル制御 スト • オートインデント • TextExpanderによ る略称展開12年3月3日土曜日
  14. 14. 12年3月3日土曜日
  15. 15. スクリプトの実行 • 通常モード時の実行 • 編集モード中のテスト実行 • デバッグウィンドウ • JavaScriptコンソール • クリップボード監視中の自動実行12年3月3日土曜日
  16. 16. 12年3月3日土曜日
  17. 17. スクリプトの管理 • 順序入れ替え • よく使うものを上に、ライブラリ のように直接触れないものを下に • 削除12年3月3日土曜日
  18. 18. JavaScriptエンジン • 見えないUIWebViewが存在 • stringByEvaluatingJavaScriptを利用 • 基本的にはJavaScriptのほぼすべ ての機能が使える12年3月3日土曜日
  19. 19. ユーザーインターフェース • WebViewの姿こそ見えないが JavaScriptのものが使える • alert(string) • prompt(string, string) • confirm(string)12年3月3日土曜日
  20. 20. MyScriptsの基本 • 超単純なスクリプト • "Test" + "Script"; • 1 + 1; • 実行するとどうなるか?12年3月3日土曜日
  21. 21. 12年3月3日土曜日
  22. 22. アクション機能 • スクリプト終了時の実行行が返す文字列 を四つのアクションに引き渡す12年3月3日土曜日
  23. 23. アクション詳細 •    別のアプリで開く(Open In) •    クリップボードにコピー •    openURL()を呼び出す •    画面に表示12年3月3日土曜日
  24. 24. openURL12年3月3日土曜日
  25. 25. 入出力が充実 Open In クリップボード URL (myscripts://) (text) MyScriptsで 表示 (WebView等) Open In クリップボード URL (twitter://等) (text / html)12年3月3日土曜日
  26. 26. MyScriptsの特殊性1 • 関数、変数を全部のスクリプトで共有 • アプリが完全に終了するまで各種の状 態が維持される • クロスドメイン制約のかからない XMLHttpRequest12年3月3日土曜日
  27. 27. MyScriptsの特殊性2 • WebViewにドキュメントをロード できない • document.locationを実行すると openURLが発動12年3月3日土曜日
  28. 28. MyScriptsの特殊性3 • document.body.innerHTMLにhtml をセットすることでDOMは利用 可能 • Cookie、WebDatabaseといった ローカルストレージが使用不能12年3月3日土曜日
  29. 29. MyScriptsの特殊性4 • 拡張関数をいくつか実装 • COPY(string) • LOGOUT(string) • SAVE_JSON(key, obj) • LOAD_JSON(key) • ASYNC_DONE(string)12年3月3日土曜日
  30. 30. MyScriptsの特殊性5 • 特殊な変数 • TARGET(openin/copy/openurl/info) • TEXT • IS_HTML • IS_ASYNC • SONG (title/albumTitle/artist)12年3月3日土曜日
  31. 31. MyScriptsの特殊性6 • 特殊なマクロ • #IMPORT • #LIB • 非同期処理の待ち合わせ12年3月3日土曜日
  32. 32. 結果として • WebViewに加える制約と引き換えに XMLHttpRequestを制約無く使用可能 • 独自の拡張でiOS上で利用可能なア プリ間連携の手段に全対応している ため、活用範囲は広い12年3月3日土曜日
  33. 33. クリップボードの利用 早く 漲ってきた! 寝ろ var a = TEXT.split(“ ”); // [“早く”, “漲ってきた!”, “寝ろ”] // スクリプト最終行がクリップボードへ “【” + a[0] + “】” + a[1] + “【” + a[2] + “】” 【早く】漲ってきた!【寝ろ】12年3月3日土曜日
  34. 34. COPY(“てすと”); てすと ※スクリプトの終了時に実行される12年3月3日土曜日
  35. 35. openURLの利用 あいう var mes = TEXT.split(“”).reverse().join(“”); // mes = “いうあ” var tw = “twitter://post?message=”; // スクリプト最終行がopenURLの引数に tw + encodeURICompornent(mes); Twitter公式クライアントが起動「いうあ」12年3月3日土曜日
  36. 36. URLでテキスト受取り myscripts://run?title=hoge&text=hoge TEXTの中身は 「hoge」に var mes = “hage ” + TEXT + “ fuga”; // mes → “hage hoge fuga”12年3月3日土曜日
  37. 37. 起動用URLの作成12年3月3日土曜日
  38. 38. 生成したURLが クリップボードにコピーされる myscripts://run?title=LaunchTwitter myscripts://run?title=LaunchTwitter&text=<TEXT>12年3月3日土曜日
  39. 39. Touch Icon Creatorの利用 特定のスクリプトを起動する アイコンが設置可能12年3月3日土曜日
  40. 40. 登録用URLの作成 myscripts://add?title=LaunchTwitter&script=スク リプトの内容 <a href=”myscripts://add? title=LaunchTwitter&script=スクリプトの内容” target=”_blank”>LaunchTwitter (登録)</a>12年3月3日土曜日
  41. 41. Writronとの連携 Writron(リトロン) URL Schemeでの連携が 強力なテキストエディ ター。MyScriptsとの連 携にもってこい。12年3月3日土曜日
  42. 42. MyScriptsにparenというスクリプト を作成 渡されたテキストを括弧で挟んで Writronに渡すスクリプト12年3月3日土曜日
  43. 43. 12年3月3日土曜日
  44. 44. 12年3月3日土曜日
  45. 45. 12年3月3日土曜日
  46. 46. openURLによる連携で、MyScripts がWritronの外部テキスト処理エン ジンとして機能した。12年3月3日土曜日
  47. 47. Open Inの利用 最終実行行からの返り値をOpen In で他のアプリケーションに渡せる12年3月3日土曜日
  48. 48. デフォルトではテキストファイル として、IS_HTML変数をtrueにする とhtmlファイルとして渡す12年3月3日土曜日
  49. 49. 外部JavaScriptの利用 Hogeというスクリプトを作成保存 #IMPORT で読込12年3月3日土曜日
  50. 50. コピペで登録、#IMPORTで読み込 みという手順で各種JavaScriptライ ブラリを利用可能 Scripts for MyScripts http://hitoriblog.com/myscripts.html12年3月3日土曜日
  51. 51. 大きなライブラリを利用する上で の注意点: #LIBで学習を抑止 さもないと、モッサリする!12年3月3日土曜日
  52. 52. ネットワークアクセス • 取りうる手段 • XMLHttpRequest • GET / POST • JSONP • WebSocket12年3月3日土曜日
  53. 53. XMLHttpRequest利用12年3月3日土曜日
  54. 54. 12年3月3日土曜日
  55. 55. document.body.innerHTMLに XHRで取得したテキストを セットすると、DOMが利用可 能。jQueryの$()も使える。12年3月3日土曜日
  56. 56. サイトによってはXHRの同期モード ではエラーが出る場合がある (google.com等。リダイレクト?) その場合は、XHRを非同期モードで 利用する。12年3月3日土曜日
  57. 57. 非同期モード指定 非同期モード 非同期処理終了12年3月3日土曜日
  58. 58. Web API利用の実際 • いまさらブログ | 復活の呪文2 • http://tama-sand.blogspot.com/ 2012/01/2.html • テキストをドラクエの復活の呪文ライク な暗号に/暗号から復号するWebサービス http://coffee-club.jp/tama/jumon/jumon.py モード: mode (p2j / j2p) テキスト: text12年3月3日土曜日
  59. 59. 12年3月3日土曜日
  60. 60. 「test」というテキストをクリップ ボードにコピーしてから実行 クリップボードの文字をWebサービ スで暗号化できた12年3月3日土曜日
  61. 61. スクレイピング • Webページ上の任意のテキストを 機械的に抜き出してきて利用 • XHRで取得、DOMに展開、jQuery で検索し、取得が黄金パターン • iOS機単体で作り込むのは無謀な ので、母艦で開発12年3月3日土曜日
  62. 62. • 開発にGoogle Chromeを利用 • jquery-injectorでページにjQueryを 強制的にロード • JavaScriptコンソールを起動12年3月3日土曜日
  63. 63. • 都内の環境放射線量調査最新データを取 得したい • http://monitoring.tokyo-eiken.go.jp/ monitoring/hourly_data.html12年3月3日土曜日
  64. 64. 12年3月3日土曜日
  65. 65. • jQueryの$()を使って要素を検索 • 要素にid、classの指定無しなので table中「∼」を含む行を検索 • 疑似クラス:contains()を使用 • 探した行のテキストを加工 $(tr:contains("∼"):first).text().split("n").join("") • 実行結果: " 2012/02/25 21:01∼22:00 0.0546 0.0468 0.0504"12年3月3日土曜日
  66. 66. MyScriptsに実装 jQueryをIMPORT12年3月3日土曜日
  67. 67. jQueryを使用 Mailアプリケーションが起動し、最 新の環境放射線量のデータと共に新 規メールが作成される12年3月3日土曜日
  68. 68. JSONPの利用 • JSONPとは? • クロスドメイン制約がかかって自由 に使えないXMLHttpRequestに代わる データ通信手段 • 外部サイトからのJavaScriptの読み込 みには制約がかからないことに着目12年3月3日土曜日
  69. 69. MyScriptsでのJSONP • 起動直後はドキュメントが空であるの で、document.header.innerHTML に”<head></head>”をセットしておく • JavaScript読み込みは非同期処理なので、 「IS_ASYNC」、「ASYNC_DONE」を使 い非同期処理のパターンとする12年3月3日土曜日
  70. 70. ドル円相場の取得 • 「りょーちの駄文と書評」で提供してい るJSONP APIを利用 • 為替レートをJSONPで(無理矢理)取得 • http://ryouchi.seesaa.net/article/ 64139382.html12年3月3日土曜日
  71. 71. 非同期モード コールバック 空のheadを足す12年3月3日土曜日
  72. 72. コールバック関数名 JSONPの読み込み開始12年3月3日土曜日
  73. 73. • JSONPの読み込みが終わるとコールバッ ク関数が実行される。 • コールバック関数の引数は、APIから取 得したJSON。ここから円相場を取得し て、Twitter for iPhoneに投げるメッセー ジ「1ドルxx.x円なう」を作成し、Twitter for iPhoneにメッセージを送るURLを組み 立てる。スクリプトのアクションには openURLを選択したので、スクリプトの 終了と共にTwitter for iPhoneが起動。12年3月3日土曜日
  74. 74. HTMLビューの利用 • 渡されたテキストをコピーするだけのス クリプトを作成 • 起動URLを取得 • myscripts:run?title=Copy&text=引数12年3月3日土曜日
  75. 75. 起動URLをhtml埋込み 引数を合体12年3月3日土曜日
  76. 76. クリック Copy呼出し HTML Viewを 一種のUIとして 使える 引数のテキストがコピーされた ※MyScriptsからMyScriptsを呼び出せることに気づこう12年3月3日土曜日
  77. 77. バックグラウンド動作 BG実行指定 ※一つだけ選択可能 • スクリプトリスト右のチェックボックス をオンにすると、MyScriptsをバックグラ ウンドに回した後に10分間限定で(OS の制約)クリップボード監視が始まる。12年3月3日土曜日
  78. 78. BG動作中、クリッ プボードにテキスト がコピーされると指 定されたスクリプト が実行される。ク リップボードのテキ ストがTEXTに渡る12年3月3日土曜日
  79. 79. • クリップボードにコピーされたテキスト が正規表現にマッチしたら、 pushToArray()関数が実行される。また、 通知センターの通知が表示される。 通知センターから、スクリ プトを起動可能 • マッチしなければ、TARGET変数にnullが セットされ、通知の表示が抑制される。12年3月3日土曜日
  80. 80. pushToArray関数で は、配列にマッチし た文字列を集めつ つ、LOAD_JSON、 SAVE_JSON関数で 配列を永続的に保存 している。これで10 分のタイムリミット が過ぎMyScriptsが終 了しても、次回配列 を復元可能。12年3月3日土曜日
  81. 81. Jailbreak Tweakで MyScripts環境を強化 • Jailbreakをすると、OSなどの動作を改変 可能 • MyScripts自体も改造可能だが、今回はス ライドが80枚を超えて精も根も尽きたの でまた今度の機会に12年3月3日土曜日
  82. 82. 10分の制約を外す • BGプロセスを抱いたままBGで10分経過 すると、アプリケーションはOSから殺 されてしまう • クリップボード監視を永続化できるなら ば、また違った使い方も見えてくる • 10分の制約を外そう!12年3月3日土曜日
  83. 83. DontKillBG • バックグラウンド動作の10分の制約を外 すJailbrokenな環境で動作するTweak • iPhoneを、Xcodeを起動させたMacに接 続。MyScriptsをOSが殺した瞬間Xcodeの Consoleに流れてきたメッセージから制 約を課している部分を特定 • 時間制限が課されているかどうかの判定 メソッドを破壊し常にNOを返すように12年3月3日土曜日
  84. 84. /* * DontKillBGLibrary.mm * 2012.01.29 */ #import <substrate.h> #import <Foundation/Foundation.h> #import <CoreFoundation/CoreFoundation.h> #import <UIKit/UIKit.h> #import "DontKillBGPrefs.h" extern "C" void DontKillBGInitialize(); @class SBProcessAssertion; static IMP original_SBProcessAssertion_timeLimited; BOOL replaced_SBProcessAssertion_timeLimited(SBProcessAssertion *self, SEL _cmd) { if ([[DontKillBGPrefs sharedInstance] enabled]) { return NO; } else { original_SBProcessAssertion_timeLimited(self, _cmd); } } extern "C" void DontKillBGInitialize() { NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; MSHookMessageEx(objc_getClass("SBProcessAssertion"), @selector(isTimeLimited), (IMP)&replaced_SBProcessAssertion_timeLimited, (IMP *)&original_SBProcessAssertion_timeLimited); [pool release]; }12年3月3日土曜日
  85. 85. • 以下からインストール可能 • [JB]iOS 5のバックグラウンド動 作10分の時間制限を取り払う DontKillBG • http://hitoriblog.com/?p=629012年3月3日土曜日
  86. 86. まとめ • MyScriptsは、iOS上の様々な問題を解決 するポテンシャルを秘めている • スクリプトの配布、インストールは、 ブックマークレットよりとても簡単!使 うだけの人にとっても便利 • ニッチなニーズを埋めるスクリプトをバ ンバン作って共有しよう!12年3月3日土曜日
  87. 87. ご清聴ありがとうございました ひとりぶろぐ hitoriblog.com moyashi http://twitter.com/hitoriblog12年3月3日土曜日

×