Archive for 2月, 2014

2014/02/11 EventScripts経由でiPhoneからKeynoteをコントロール

EventScriptを用いて、iPhoneからMac上のKeynoteをコントロールするためのAppleScriptを何本か書いてみました。

Keynoteをコントロールするさまざまな手段

昔から、プレゼンを操作するためのリモコンのたぐいは、サードパーティの赤外線リモコン、Apple純正のApple Remote、iPhone用のApple純正Keynote Remoteアプリなど、さまざまなものが存在しています(た?)。

img_0553.JPG
▲左から、Keyspan Remote(なつかしい!)、Apple Remote(赤外線I/Fは現行ノート系Macには非搭載)、iOSのRemoteアプリ

そうした他のソリューション(主にAppleのiOS用Keynote Remote)が存在している中でEventScriptsをあえて使う意義はどこに? という話になりますが、「AppleScriptによるインテリジェントな操作が可能」のひとことにつきます。

Keynoteのコントロール

Keynote……ただし、バージョン5.x(iWork 11)系は、さまざまなAppleScript命令を備えています(Keynote 6.x系はまだ出来が不十分なのでゴミ箱行き。日常的にはKeynote 5.xを使っています)。

一番「やってはいけない」操作方法は、System Events経由でキーコードを送る原始的な方法です。もう、それだとAppleScriptを使う意味がない。

Keynoteでドキュメントを開いているのか、スライドの実行中なのか……などなどの「状態」を取得して、状況に合った処理を行うことが重要です。さらに、スライド中のタイトルをAppleScript側から読み取って、スライドのページをめくるたびにタイトルをTwitterに特定タグつきで投稿するなどの「複数の動作」をいっぺんに行えるのもAppleScriptを利用するメリットです。

普通にKeynoteに用意されているAppleScript用語辞書を用いて、普通にAppleScriptを書かないと本来の機能が活かせないので意味がありません。

img_0555.jpg
▲EventScripts RemoteでMac上のKeynoteをコントロールするAppleScriptを実行

これらのAppleScriptをEventScriptsに登録して、iPhone上のEventScripts Remoteからコントロールすれば、Keynoteを自由にコントロールできるようになります。

他のアプリケーションについても、「まっとうな」コントロール方法を用いて操作すると非常に便利です。

スクリプト名:Keynoteのスライドを開始
on run eventArgs
  if application “Keynote” is running then
    tell application “Keynote”
      set aP to playing
      
      
set dCount to count every slideshow
      
      
if aP = false then
        if dCount > 0 then
          start
        else
          say “現在、キーノートでは、プレゼン資料を、オープンして、おりません。” using “Kyoko”
        end if
      else
        –say “現在、キーノートでは、プレゼン資料の、再生を、行って、おりません。”
      end if
      
    end tell
  else
    say “キーノートは、実行されて、いません。”
  end if
  
end run

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

スクリプト名:Keynoteのスライドを次へ
on run eventArgs
  if application “Keynote” is running then
    tell application “Keynote”
      set aF to frontmost
      
set aP to playing
      
      
if {aF, aP} = {true, true} then
        show next
      else
        say “現在、キーノートでは、プレゼン資料の、再生を、行って、おりません。” using “Kyoko”
      end if
      
    end tell
  else
    say “キーノートは、実行されて、いません。”
  end if
  
end run

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

スクリプト名:Keynoteのスライドを前へ
on run eventArgs
  if application “Keynote” is running then
    tell application “Keynote”
      set aF to frontmost
      
set aP to playing
      
      
if {aF, aP} = {true, true} then
        show previous
      else
        say “現在、キーノートでは、プレゼン資料の、再生を、行って、おりません。” using “Kyoko”
      end if
      
    end tell
  else
    say “キーノートは、実行されて、いません。”
  end if
  
end run

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

スクリプト名:Keynoteのスライドを最初のページへ
on run eventArgs
  if application “Keynote” is running then
    tell application “Keynote”
      set aF to frontmost
      
set aP to playing
      
      
if {aF, aP} = {true, true} then
        show first slide of slideshow 1
      else
        say “現在、キーノートでは、プレゼン、資料の、再生を、行って、おりません。” using “Kyoko”
      end if
      
    end tell
  else
    say “キーノートは、実行されて、いません。”
  end if
  
end run

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

スクリプト名:Keynoteのスライドを最後のページへ
on run eventArgs
  if application “Keynote” is running then
    tell application “Keynote”
      set aF to frontmost
      
set aP to playing
      
      
if {aF, aP} = {true, true} then
        tell slideshow 1
          set pCount to count every slide
        end tell
        
        
show slide pCount of slideshow 1
      else
        say “現在、キーノートでは、プレゼン資料の、再生を、行って、おりません。” using “Kyoko”
      end if
      
    end tell
  else
    say “キーノートは、実行されて、いません。”
  end if
  
end run

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

スクリプト名:Keynoteのスライドを中断
on run eventArgs
  if application “Keynote” is running then
    tell application “Keynote”
      set aF to frontmost
      
set aP to playing
      
      
if {aF, aP} = {true, true} then
        stop slideshow
      else
        say “現在、キーノートでは、プレゼン資料の、再生を、行って、おりません。” using “Kyoko”
      end if
      
    end tell
  else
    say “キーノートは、実行されて、いません。”
  end if
  
end run

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2014/02/07 iPhoneからMacにAppleScriptを実行させるEventScripts+EventScripts Mobile

iOSデバイス+Mac上のAppleScript実行シリーズのしめくくりとして、Mousedown Softwareの「EventScripts」をご紹介します(現時点で、これとOtto’s Antennaの2つ以外には存在していません)。

es1.png

Mac用に「EventScripts」(原稿作成時のバージョンはv1.10 MacApp Storeで300円)というアプリがあって、マシンがシャットダウンするとかスリープするとか、Webブラウザが起動するとかいった(Mac上の)「イベント」を拾って、イベントごとに割り当てたAppleScriptを自動実行する機能を提供しています。

このEventScriptsに同じくMousedown SoftwareのiOS用(iPhone/iPad両用)リモートコントロールアプリ「EventScripts Mobile」(無料)を併用すると、iOSデバイスからWiFiネットワーク経由で、Mac上のAppleScriptをMacに実行させることができます。

es4.png

es2.png

ぱっと見、Bluetooth経由でiOSデバイス→MacにAppleScriptの実行要求をかけられそうに見えるのですが、それはできません。Bluetooth経由で3台までのデバイス(iOSでなくてもいいんでしょうね。マウスとかでも)を登録+監視することができ、Bluetoothデバイスの存在検出などのイベントをトリガーにしてAppleScriptの実行が行えるようになっています。

Otto’s Remoteと違うのは、WiFiネットワーク経由でiOSデバイス→MacへのAppleScript実行要求を出すことでしょうか。要求すると即座に実行されます。また、実行できたかどうかをiOSデバイス上で確認できます(緑で正常実行。赤だとエラー)。

img_2309.PNG

img_2310.PNG

ただし、実行結果をMacからiOSデバイスに返せないので、例によって別途さまざまなアプリケーションを経由して、実行結果を返してあげる必要がありそうです。

Otto’s RemoteがAutomator寄りだったのに対して、EventScriptsはAppleScript寄りです。というか、Automator Actionは実行できません。

EventScriptsに登録するAppleScriptは、

on run eventArgs
–なんか処理をする〜
end run

という書き方をします。このeventArgsの中にイベント発生情報が入っているようですが、どうなっているかドキュメントが存在していないので、実際に調べてみましょう。

Recordをまるごと文字化して、Console.appにsyslogとして出力することにします。

所要時間3分。あっという間にコピペで完成。

AppleScript名:イベントロガーだよ〜ん
on run eventArgs
  beep
  
–recordをstringsに変換
  
set aStr to recToString(eventArgs) of recToStrKit
  
  
logToSyslog(aStr) of me
  
end run

–Syslogにメッセージを出力する
on logToSyslog(theMes)
  do shell script “logger -s “ & quoted form of theMes
end logToSyslog

script recToStrKit
  
  
–エラートラップを使って、わざとエラーを発生させ、エラーメッセージからレコードをstringに変換する
  
on recToString(aRec)
    
    
–レコードを無理矢理stringにcastして、エラーメッセージを取得する
    
try
      set a to aRec as string –ここでエラー発生
    on error aMes
      set a to aMes
    end try
    
    
–エラーメッセージ文字列から、元のレコードの情報を組み立てる
    
set b to trimStrFromTo(a, “{”, “}”)
    
set b to “{” & b & “}”
    
    
return b
    
  end recToString
  
  
  
on trimStrFromTo(aStr, fromStr, toStr)
    –fromStrは前から探す
    
if fromStr is not equal to “” then
      set sPos to (offset of fromStr in aStr) + 1
    else
      set sPos to 1
    end if
    
    
–toStrは後ろから探す
    
if toStr is not equal to “” then
      set b to (reverse of characters of aStr) as string
      
set ePos to (offset of toStr in b)
      
set ePos to ((length of aStr) - ePos)
    else
      set ePos to length of aStr
    end if
    
set aRes to text sPos thru ePos of aStr
    
    
return aRes
    
  end trimStrFromTo
  
end script

★Click Here to Open This Script 

実際に、~/Library/Application Scripts/net.mousedown.EventScripts/フォルダに書いたAppleScriptを入れ、EventScriptsの画面上で「Add Script」で実行対象にします。その際に、応答するイベントを「EventScripts Mobile」にしておくとiOSデバイス上のEventScripts Mobileにスクリプト名が表示されます。

実行すると、ほぼ瞬間的に実行され、エラーが発生したかどうかがiOSデバイスの画面上で分ります。WiFiのネットワーク内にMacもiOSデバイスも共存できている環境であれば、Otto’s Antennaよりも使い勝手がよいと思われます。

iOS側からAppleScriptの実行をリクエストすると、Console.appの画面上に実行時のパラメータがそのまま文字で表示されます。

es5.png

Mobileからの実行イベントでは、scriptPathとtriggerの2つのパラメータが受け渡されるようです。scriptPathには実行したAppleScriptのPOSIX pathが、triggerには”EventScripts Mobile”が入っていました。

案外あっさりしている印象ですが、Mousedown SoftwareがWeb上で配布しているサンプルAppleScriptを見ると、イベントごとにAppleScriptに渡されるパラメータ(レコード)の内容が異なるようで、サンプル「Location Sample Script.scpt」では位置情報がAppleScript側に渡されることがうかがえます。

スクリプト名:Location Sample Script.scpt
on run eventArgs
  
  
– eventArgs is a record of with details of the action passed by the EventScripts application
  
– the properties passed depend on the action, however there will always be a trigger property
  
– which describes the event that triggered the script
  
  
set triggerAction to {trigger of eventArgs}
  
  
set latitude to {latitude of eventArgs} as string
  
set longitude to {longitude of eventArgs} as string
  
set previousLatitude to {previousLatitude of eventArgs}
  
set previousLongitude to {previousLongitude of eventArgs}
  
  
tell application “Finder”
    activate
    
display dialog “Your new location: “ & latitude & “, “ & longitude & return & ¬
      “Your old location: “ & previousLatitude & “, “ & previousLongitude with title triggerAction giving up after 2
  end tell
  
end run

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

どっちがいいの?

一長一短あり、EventScriptsとOtto’s Antennaのどちらをおすすめするかは、用途によると思われます。

es9.png

EventScriptは、自宅などWiFiネットワーク内にiOSデバイスもMacも共存できる場合がおすすめです。会社では、iOSデバイスのWiFiへのアクセスを禁止しているところが多いようなので、なかなか利用できないでしょう。

Otto’s Antennaは場所を選ばずに利用できるため、けっこう無茶な使い方ができそうです。ただ、リクエストしてから実行されるまでに時間がかかるのがデメリット。

こうした「iOSからAppleScript実行」系のソフトウェアが充実してくることで、さらに便利かつ強力なソリューションを構築できるようになると思われます。それぞれのソフトウェアの作者が開発を継続できるように、ぜひ購入して試してみてください。

2014/02/05 AppleScriptからiPhoneで電話をかける

AppleScriptから電話番号を指定してiPhoneで電話をかける実験です。

この手の処理では、Skype経由で電話をかけたりするのがポピュラーですが、今回はiPhone経由で電話をかけます。

あらかじめ、Macに「Dialogue」をインストール(MacApp Storeで700円、記事執筆時のバージョンはv1.2.1)しておく必要があります。

DialogueをインストールしてBluetooth経由でiPhoneとMacをペアリングすると……iPhoneにかかってきた電話をMacの画面上に通知して、Macの画面上で電話をとったり、Macのスピーカー/マイクやヘッドセットを使って通話できます。

dialogue2.png

dialogue3.png
▲Dialogueはメニューバーに常駐し、メニューバーから名前を指定して電話番号を検索して電話をかけられる(普通の使い方)

このDialogueに、隠し機能でURLスキーム経由で電話をかける機能が実装されており(作者から直接教えてもらいました)、AppleScriptで簡単な処理を書いて実行してみたところ……問題なく発信&通話できました。

dialogue1.png

▲AppleScriptから電話番号を指定して発信したあと、通話可能になったら「Macに向かって」話してください

スクリプト名:Dialogueを使ってMacからiPhone経由で電話をかける
–Dialogueを使ってMacからiPhone経由で電話をかける

set aNum to “117″ –時報
open location “x-dialogue://” & aNum

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

目下、Mavericks側のバグのせいで録音機能が使えない(Dialogueの作者Emiel Jansonいわく)ようですが、通話内容の録音もできると有用ですし……着信時と通話終了時にDialogueからAppleScriptが実行できると、手軽なCTIシステムとして利用できてよいと思います。

2014/02/02 iOSデバイスからMac上のScriptを実行するOtto’s Remote & Otto’s Antenna

Otto’s Remote & Antennaは、iOSデバイス上のOtto’s Remoteアプリケーション(100円)から、Mac上のOtto’s Antenna(記事執筆時点では200円→無料)に指令を送って、Mac上のAutomatorアクション、Shell Script、AppleScriptをMac上で実行させるソリューションです。

Otto’s RemoteはiPhoneでもiPadでも実行できるUniversalアプリですが、このアプリの性格を考えれば絶対にiPhoneで使うべきです。

AppleScript使いにとって本ソフトは、用途がありすぎてとても書き切れないほどの可能性があるので、かなりていねいにチェックしたいところです。

本Blogの性格上、Automatorとshell scriptは完全にスルーして、AppleScriptにのみフォーカスしてレビューします。

レビュー時のバージョン:
 Otto’s Antenna: ver 1.3
 Otto’s Remote: ver 1.3.2

 → Otto’s AntennaのWeb

インストールとセットアップ

最初に、iOSデバイス(iOS 6.1以降)にOtto’s Remoteを、Mac(OS X 10.8以降)にOtto’s Antennaをインストールする必要があります。また、iOSデバイスとMacの両方とも同一のApple IDを使っている必要があります。これは、Otto’s Remote/AntennaがiCloudの通知システムを利用しているためです。

同一のApple IDを使っていれば、複数のMac上のAppleScriptの実行をiPhone側から行うことも可能です。

Mac側のScriptフォルダ(~/Library/Application Scripts/com.amolloy.ottoantenna/)に入れておいたAppleScriptが、iOSデバイス側のOtto’s Remoteの画面上に表示されます。これを選択して実行することになります。

otto0.png

セットアップで悩んだり、ハマったりすることはとくにありませんでした。

さあ実行だ!

iOS上のOtto’s Remote上のScript名を(例:say Hello)タップすると、

「Are you sure you wish to perform say Hello?」

と聞かれます。選択肢は、

Yes, this time.
Yes, every time.
Yes, for all actions.
No, thank you

の4つ。

毎回実行するとか、他のアクション(script)実行時に必ず実行するとかいうのは、とっても危険な香りがする(解除方法が提供されていない)ので、正直なところ最初の「Yes, this time」と最後の「No, thank you」以外の選択肢は使わないはずです。

まずは、小手調べということで……英語のファイル名のAppleScriptをMac側のScriptフォルダに入れてiPhone側から実行。iPhoneがWiFi環境にいても、LTEのネットワーク側にいても、だいたい10秒前後でMacに指令が届いて実行されました。

実行対象のMacがスリープ状態(たとえば、MacBook Airをクローズした状態)だと、指定のAppleScriptは実行されません。「システム環境設定」のPower Napをオンにした状態でも、Scriptは実行されませんでした。これは、Otto’s Antenna側がPower Nap実行のためのサービスを実装していないことが考えられます。

【重要】Otto’s Antennaを運用させる際には、Macの電源は入れたままにしておく必要があります。

日本語にちゃんと対応しているかな?

次に、Mac側のScriptフォルダに「こんにちは」と日本語のファイル名を付けたAppleScriptを置き、iOSデバイス側でブラウズすると……「こんにちは」および「こんにちは〜」と存在しないファイルが見えてしまいます(やっぱり日本語ではテストしてないだろうな〜)。

otto1.png

img_2298.PNG

「こんにちは」Scriptは実行できましたが、「こんにちは~」Scriptはそもそも存在しないので、実行できません。

この問題は、どうやらMac側のOtto’s Antennaの問題らしく、Mac上でステータスバーのメニューから「こんにちは〜」を選択して「Delete」を実行すると、Mac側のメニューにも出なくなりますし、iOS側にも表示されなくなります。

日本語の「絵文字」(Japanese Mobile Emoji Characters)には対応しており、MacのFinder上で絵文字を入力してファイル名に絵文字を入れると、Mac上のOtto’s Antennaのメニュー上にも表示されますし、iOS上のOtto’s Remote上にも表示されます。

otto4.png

img_2299.PNG

日本語ファイル名にかぎらず、名称変更したり元のScriptが見つからなくなると、メニュー上では赤く表示されたままメニューに残ります(赤く表示するぐらいなら、メニュー上から削除したほうが)。

本気でためしてみよう!

階層構造実験

まずは、Mac側のScriptフォルダにフォルダを作成して、Otto’s Antennaがフォルダの階層構造を認識するかどうかという実験。

ためしてみると、きちんとOtto’s Antennaがフォルダ内に格納したScriptを検出しました。これについては合格点です。

AppleScriptファイル形式実験

次に、どのような形式のAppleScriptを認識・実行してくれるかどうかの実験です。目下、OS X 10.9環境の「AppleScriptエディタ」では、

 通常AppleScript:拡張子「.scpt」
 通常AppleScriptテキスト:拡張子「.applescript」
 通常AppleScriptスクリプトバンドル:拡張子「.scptd」
 AppleScriptアプレット:拡張子「.app」
 AppleScriptObjCアプレット:拡張子「.app」

を作成可能です。Otto’s Antennaが、これらのうちどこまでを「AppleScript」として扱うのかを確認しておく必要があります。

 通常AppleScript:拡張子「.scpt」→実行可
 通常AppleScriptテキスト:拡張子「.applescript」→実行可
 通常AppleScriptスクリプトバンドル:拡張子「.scptd」→実行可
 AppleScriptアプレット:拡張子「.app」→Otto’s Antennaに認識されず
 AppleScriptObjCアプレット:拡張子「.app」→Otto’s Antennaに認識されず

できることとできないことを、明確にしておくことは重要です。

位置情報をトリガーにしてAppleScript実行!

現行バージョンでは、iOSデバイス上で位置情報(Geo Location)を取得して、そこに到着するか出発するかを実行トリガとして使用できます。

バッテリーが少なくなってきたら実行とか、iOSデバイスの温度センサーが設定温度よりも低い/高い場合には実行とか、メールで呪いのメッセージが送られてきたら実行とかいう機能はありません。iOSデバイスを振ると実行とか、音声認識で実行とかはできてもいいような気もします。

実行トリガを設定できるのはよいのですが……実行時の結果をiOS上のOtto’s Remote側に返せないので、そのあたりが気になります。

また、Otto’s RemoteをiOS上でバックグラウンドに回した状態でこれを実行してくれるでしょうか?

そこで、これらを試すべく2本のAppleScriptを書き、Mac上のOtto’s Antennaに登録して実験してみました。

otto10.png

スクリプト名:メモに外出時刻を書く
–タイムスタンプからユニークなタイトルを作成
set aTitle to “てすと” & (do shell script “date +%Y%m%d%H%M%S”)
set aBody to “ぴよまるさんが、家を出ました。
Piyomaru left home.”

makeNewNoteOnNotes(aTitle, aBody, “iCloud”) of me

on makeNewNoteOnNotes(aTitle, aBody, anAccountName)
  set noteHTMLText to

"

& (aBody as Unicode text) & “”
  
  
tell application “Notes”
    –activate
    
tell account anAccountName
      make new note at folder “Notes” with properties {name:aTitle, body:noteHTMLText}
    end tell
  end tell
end makeNewNoteOnNotes

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

スクリプト名:メモに帰宅時刻を書く
–タイムスタンプからユニークなタイトルを作成
set aTitle to “てすと” & (do shell script “date +%Y%m%d%H%M%S”)
set aBody to “ぴよまるさんが、家に帰りました。
Piyomaru return to home.”

makeNewNoteOnNotes(aTitle, aBody, “iCloud”) of me

on makeNewNoteOnNotes(aTitle, aBody, anAccountName)
  set noteHTMLText to

"

& (aBody as Unicode text) & “”
  
  
tell application “Notes”
    –activate
    
tell account anAccountName
      make new note at folder “Notes” with properties {name:aTitle, body:noteHTMLText}
    end tell
  end tell
end makeNewNoteOnNotes

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

登録したGPS位置情報から離れる(departing)/到着する(arriving)とAppleScriptの実行リクエストを行う「Geo Trigger」をそれぞれ登録。

img_2302.PNG

iPhoneの画面をオフにした状態でカバンに入れて自転車で移動。

5Kmほど離れた目的地に到着して、カバンからiPhoneを出して確認すると、通知センターに、

「Fired: メモに外出時刻を書く on MBPretina」

と表示がありました。成功です。画面表示時ではなく、はるかに前に実行されたことが確認できました。

img_2300.PNG

メモを見ると、「てすと20140202141308」のエントリが作成されており、

「ぴよまるさんが、家を出ました。
Piyomaru left home.」

と記入されていました。

帰宅時に実行されるScriptも無事動作していました。

ただ、出かける際にほぼフル充電だったバッテリーは4時間後の帰宅時には45%まで減っており、iPhone上でOtto’s Remoteを(GPS情報をトリガにするリクエストを登録して)実行させたまま1日運用するのはちょっと心もとないですね。真剣に位置情報をトリガにしたScriptを運用するのであれば、外部バッテリーの併用は欠かせないことでしょう。

Otto’s Antenna&Otto’s Remoteに必要不可欠な機能

まず、AppleScript(だけ)にパラメータを渡せないのはダメです。ダメを通り越してありえないです。早急に対応していただく必要があると思います。Otto’s Antennaが日本語の不必要なファイルをリストアップしてしまう問題も解消されるべきです。

あと、Automator Action/Shell Script/AppleScript全般に、実行結果を返せないのと、実行されたかどうかの確認ができないのもダメです。

ただし、緊急避難的にこれらの問題を解決する方法は存在しています。メモやリマインダー経由でiOSデバイスとMac間の情報のやりとりを行うというものです(もちろん、メールやメッセージ(iChat)で行ってもかまいません)。Otto’s Antenna&Remoteに多くを期待しないとそういう対応も行えます…………が、ここは少しOtto’s Antenna+Remoteでなんとかしていただきたいところです。

あとは、AppleScript側で受信できる追加パラメータとして、iOSデバイス側の実行タイムスタンプと位置情報(緯度、経度情報)が欲しいところです。

結論:こいつは使える!

本当に使えるのか半信半疑でしたが、たしかにこれは使えます。もっと注目されるべきアプリといえるでしょう。

iPhoneからMac上のAppleScriptの実行をキックできると、いろいろな処理が考えられます。

簡単なところでは、出力に時間のかかる(=出力枚数が多いので、給紙が必要+他の印刷物の状況を見る必要がある)書類の印刷を共用のカラーレーザープリンターで行う際に、プリンターの前まで行って、iPhoneから自分のデスクのMacのプリントアウトのAppleScriptを実行するとかいうのは、実際に実用性のある用途だと思います。

Mac側とiPhone側でCloudを介してデータを共用しているタイプのアプリケーションは、両者のI/O用に使えます。DropBoxなどでファイルをMacからiPhoneに渡すという処理も簡単ですし、Evernote経由でI/Oを行ってもよいと思います。

処理結果をMailやTwitter、WordPress経由で返すのも当然アリですが……データ転送量にしたがって課金されるタイプのサービスは避けたいところです。