読者です 読者をやめる 読者になる 読者になる

KOYAMA Yoshiaki のブログ

プログラミングについての試行錯誤をつらつら書き溜めていきます。

RemoteKey

RemoteKey
カテゴリ/ユーティリティ
\230
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=301472359&mt=8


技術的に興味があったので購入してみました。無線 LAN 環境が必要です。(Mac に AirMac カードが内蔵されていれば、利用できます。設定方法は、下の URL の右下 '外出先での接続方法' を参考にしてください。)

RemoteKey
http://hmdt.jp/remotekey/index-jp.html


iPod touch 上で RemoteKey を動作させた後、上の URL から ダウンロードし、Mac 上にインストールした RemoteKey Connect を起動します。
Devices (私の場合は iPod touch) を選んで Connect ボタンを押します。これで Mac の RemoteKey Connect で入力した文字が iPod touch の Remotekey に表示されます。
RemoteKey Connect で Mail ボタンを押せば iPod touch 上のメールが起動し、入力した文字列が本文として入力されています。RemoteKey Connect を終了するには、メニューバーの右端のアイコンからメニュー 'Quit RemoteKey Connect' を選択してください。


動作原理を調べてみました。間違っている記述もあると思いますが、メモとして残しておきます。


RemoteKey は Bonjour を利用して Mac と iPhone または iPod touch 間で動作します。
サンプルコード WiTap が参考になりそうです。(ソースを覗いてみましたが、私には理解するのに苦労しそうです。) WiTap は Bonjour を利用して2台の iPhone で 動作します。もちろん iPhoneiPod touch でも動作します。

WiTap
http://developer.apple.com/iphone/library/samplecode/WiTap/index.html
(iPhone Dev Center に登録していないと閲覧できません。)


私自身、iPod touch 1台しか所有していないので、WiTap を iPod touch 32GB、iPhone Simulator.app にそれぞれインストールして、両方の WiTap を実行し動作確認しました。WiTap は、カラーパッドをタップすると、もう一方の端末の WiTap のカラーパッドが点滅します。


iPod touch 上の 'メール'、'マップ' を起動するには NSURL、NSApplication を利用します。
'メール' を起動する例です。

	UIApplication *application;
	NSURL *url;
	
	url = [NSURL URLWithString:@"mailto:foo@me.com"];
	
	application = [UIApplication sharedApplication];
	[application openURL:url];


また、自分が作成したアプリケーションに Custom URL Schemes を登録して、他のアプリから起動させることもできます。動作確認には iPod touchiPhone Simulator.app 上の Safari の URL に Custom URL Schemes を含んだ URL を入力して試すと良いようです。下の例では URL は "xyzlist://Sample.koyama.jp/?test#20090221" です。

-- 起動されるアプリケーションの Info.plist (今回の例ではアプリケーション名 Sample) --
▼ Information Property List
    ▼ URL types                       
        ▼ Item 1                    : jp.koyama.Sample
             URL identifier
             ▼ URL Schemes
                 Item 1               : xyzlist
//アプリケーション Sample を起動させるソースコード
	UIApplication *application;
	NSURL *url;

	url = [NSURL URLWithString:@"xyzlist://Sample.koyama.jp/?test#20090221"];
	
	application = [UIApplication sharedApplication];
	[application openURL:url];


下記の URL が参考になります。(ただし、以降に出てくる Apple の URL は iPhone Dev Center に登録していないと閲覧できません。)

iPhone Application Programming Guide: Customizing Your Application’s Behavior
http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ApplicationEnvironment/chapter_3_section_6.html#//apple_ref/doc/uid/TP40007072-CH7-SW22

The Core Application
	Customizing Your Application’s Behavior
		Communicating with Other Applications


The iPhone Developer's Cookbook: Building Applications with the iPhone SDK (Developer's Library)
Erica Sadun

10 Connecting to Services
Recipe: Subscribing Application to Custom URL Schemes
P303


上の本も参考にした方が理解しやすいと思います。また、'The iPhone Developer's Cookbook' [ asin:0321555457 ] は、



日本語に翻訳された本 'iPhone デベロッパーズ クックブック' [ asin:4797352418 ] が発売されています。


他のアプリケーションから起動されたアプリケーションは

UIApplicationDelegate Protocol Reference
http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/Reference/Reference.html
Opening a URL Resource
- application:handleOpenURL:  optional method  


が呼び出され、起動します。

//   アプリケーション Sample の UIApplicationDelegate
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {

//   url = @"xyzlist://Sample.koyama.jp/?test#20090221"

       NSString *taskName = [url query];
       NSString *dateString = [url fragment];

       NSLog(@"%@ %@", taskName, dateString);
}


起動されるアプリケーション (上の例では Sample) の UIApplicationDelegate に上のソースを追加し、iPhone Simulator.app の Safari で URL "xyzlist://Sample.koyama.jp/?test#20090221" で起動させると、/アプリケーション/ユーティリティ/コンソール.app の 'ログ・データベース・クエリー/コンソールメッセージ' で下のメッセージを見つけることができます。

09/02/21 18:49:35 Sample[3392] test 20090221


また URL を利用して渡される値は下記の URL を参考にしてください。'メール'、'マップ' を起動する時に渡すパラメーターが、Mail、Phone、Text、 Map、YouTubeiTunes Links としてそれぞれ説明してあります。

Apple URL Scheme Reference: Introduction
https://developer.apple.com/iphone/library/featuredarticles/iPhoneURLScheme_Reference/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007891
NSURL Class Reference
https://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/Reference/Reference.html#//apple_ref/doc/uid/20000301-4355
RFC 1808 - Relative Uniform Resource Locators
http://tools.ietf.org/html/rfc1808