第6世代 iPod nanoのためのアプリを作ってみた

タイトル詐欺っぽくなりましたが、例によって俺得のみのMacアプリを作りました。

こんな感じで第6世代 iPod nanoにメモを表示するためのアプリ。


アプリの画面はこんな感じ。

ダウンロードはこちらから
http://www.rnatori.net/downloads/SquareNanotesB100.zip

なんでそんなアプリを作ったのか

第6世代 iPod nanoは最近(今さら)衝動買いしたんですが、出た当時は「こんなの使いにくそうだな」と思ってたんですが、触ってみるとかわいいし、iWatchとやらが出るまでは一番小さいタッチスクリーンのついたApple製デバイスなんじゃないですか?レアなんじゃないですか?と思い始めたんです。しかし、昔のiPodシリーズにはあったMacからテキストファイルを入れられる機能がない。いや今の時代そういう機能はiOS機器が担っているんですけれども。しかしですよ、極小かつバッテリーも持つ液晶付きデバイスじゃないですかこれは。なんかしら情報を入れたいじゃないですか。
一応探してみたんだけど無さそうなので作ったった。

PutOn (for Mac)がMac App Storeの審査に通るまで

Mac版のPutOnが審査通過してMac App Storeに出てます。
iOS版PutOn共々特に役には立ちませんが、お試しください。
https://itunes.apple.com/jp/app/puton/id647697485?mt=12


審査の過程について、例によってこういうめんどくさいことは後になったら忘れてるんだろうから、未来の俺のために書き残しておく。

1回目の審査-リジェクト

  • 2.3: Apps that do not perform as advertised by the developer will be rejected
  • 5.1: Apps must comply with all terms and conditions explained in the Guidelines for using Apple Trademark and Copyrights and the Apple Trademark List
  • 9.1: Apps that encourage users to use an Apple product in a way that may cause damage to the device will be rejected

1回目の審査のリジェクト理由は3項目。

  • 2.3は要するにPutOnが説明文通りに動いてくれなかったよ、ということだ。色々原因は考えられて、いちいち説明するのめんどくさいし、この人が分かんなかったということはユーザーだって分かんないことだろうから、ヘルプファイルにトラブルシューティングをまとめて書いておくことにした。で、次のバージョンではヘルプファイルを追加した(今までヘルプファイル書いたことなかった)
  • 5.1は「PutOn Mac」のアプリ名が不味かった。Macとつけるなら、「一般名詞(スペース)Mac」とか「固有名詞Mac」みたいなのはいいらしい。でも「PutOn Mac」はダメ。PutOn for Macは知らん。どうせMac App Storeにあるんだから「PutOn」でいいだろうってことで、そうした。レビュワーはアプリ名の変更方法とかも詳しく書いてくれた。Bundle IdentifierはPutOn-Macとかの文字列が入ってるけど、それはそのままにしといた。
  • 9.1はデバイスにダメージを与えるような使い方をさせるアプリはダメだよってことで、PutOn for Macの元々の説明文ではMacの画面上に置く、みたいに書いてた。iPadの上にiPhoneを置くPutOn for iOSならそれでよかったらしいが、Macの液晶はガラスで保護されてないやつもあるので、置くとか言うなということらしい。ので、「置く」じゃなくて「かざす」とかそういう表現にするようにした。

上記の点を変更して、ヘルプファイルは初めてなので色々苦労しながら作って、もう一回Submitした。

2回目の審査-リジェクト

  • 2.3: The app does not achieve the core functionality described in your marketing materials or release notes.
  • 2.31: This app uses one or more entitlements which do not have matching functionality within the app. Apps should have only the minimum set of entitlements necessary for the app to function properly.

com.apple.security.personal-information.addressbook
com.apple.security.network.server
com.apple.security.network.client
com.apple.security.device.usb

2回目の審査のリジェクト理由は2項目。

  • 2.3は前回と同じ、「転送されねーよ」って指摘だったんだけど、iPadを使っていると書いてあった。実はiOS版PutOnは、iPad同士を重ねるのはあんまやらないだろ、やるんならiPadの上にiPhoneじゃないかな、ってことで、デフォルトではiPadの場合カメラを起動しない。「iPadを上側に置く」とかいう設定をオンにする必要がある。それはヘルプファイルに書いたので、「多分そこオフのままなんじゃねーかな、ヘルプにも書いといたんだけど…」って返信した。
  • 2.31はSandBox化したMacアプリに与えるEntitlement keyを、不要なやつ与えてんじゃねーの?って指摘だ。Address Bookへのアクセスは、PutOnがvCardファイルをドロップされたときに含まれる連絡先情報から名前を表示するためだけに使ってる。vCardのファイル内溶からABPersonを作るAPIは(ユーザーの連絡先にはこの時点でアクセスしないにもかかわらず)このアクセス許可を要求するようなのでこうしてる。って返信した。

network.serverとnetwork.clientは、「TCP/IPでファイル転送するアプリなんだから要るだろ…常識的に考えて…」って返信した。
最後のcom.apple.security.device.usbは謎で、そんなEntitlement key入れてなかった。「そんなん入れた覚えねーから!」って返信した。

通過

これらを返信したらIn Reviewに戻って、通してくれた。めでたしめでたし

PutOn for Mac (β2) リリース

PutOn Mac
こっちに書いてなかった。

PutOnは、iPhone/iPadで写真やテキスト、連絡先を簡単に転送するためのアプリケーション...でしたが、Mac版も欲しくなったので作りました。ただし接続はWiFiのみです。

動作はこういう感じです。

β2版でできること:
  • PutOn iOS版からの写真、テキスト、連絡先の受信(ダウンロードフォルダに保存)
  • 画像ファイルの送信
  • vCardファイル(.vcf)の送信
  • テキストを入力して送信
  • クリップボードにコピーしたテキスト、画像の送信
PutOn Macのつくりかた

iOS版PutOnは大きく分けて三つの部分から出来ています。

  1. PictureSharing、DNSSDObjectsをまぜまぜして作った、Bonjourを叩いてファイル転送を行う部分
  2. AVCaptureなんたらを使ってリアルタイムのカメラ映像を得て、可視光通信を受信する部分
  3. 色を点滅させて可視光通信を送信する部分

PutOn Macでは1をそのまま共用していますが、DNS-SDによるBonjour over Bluetoothは今のところiOSでしか対応していないようなので、同じコードでもMac版はBluetoothを使った送受信ができません。
2はMacのフロントカメラで出来ないこともないと思いますが、iPhoneの画面をマックのフロントカメラに向けて特定の位置を映させるのは難しいと思うので、オミットしています。
3は超単純な部分ですが、NSViewとUIViewの違いがあるためちょっと違います。

Mac版だとFinderや他のアプリに大部分を任せてしまえるのでそこは簡単でいいですが。

PutOn 1.0リリース

iPhone/iPadを重ねあわせるだけで、写真やテキスト、連絡先を転送できるアプリPutOnをリリースしました。

https://itunes.apple.com/us/app/puton/id635858965?l=ja&ls=1&mt=8

どういう感じのアプリかはこちらの動画で。

以前書いてたようにiPhoneのカメラで可視光通信したいというのが動機の一つなので、実用性は今ひとつですけど、なんか面白いかもしれないから物好きな人はどうぞ。無料ですし

いちおうの特長

  • Bluetoothをオンにしている、あるいは同じWiFiネットワークに接続していれば転送可能
  • Bluetooth系にありがちなパスコードとかの手続き不要
  • 無線ファイル転送系にありがちな相手先の選択、転送の受け入れなどの操作不要

Tips

  • 写真やテキストを他のアプリからコピーしてきたときは、ツールバーの左下から2番目のボタンをタップすると「クリップボードからペースト」して転送する内容を指定できます。
  • テキストは自動リンクされます。URLや電話番号、日付などをテキストとして送信することで、受信側ではリンクをタップするだけでそれに応じたアクションをとることができます。連絡先のうち電話番号だけを送る、等の場合はこっちのほうが簡単かも
  • 連絡先はアドレス帳に登録している顔写真も含めて送信することができます。送信する項目は編集できるので、特定の項目は送信しないようにもできます。

雑記

  • 動画は撮り直さないと。
  • Mac版を開発中です。WiFiのみですが。

LionからMountain LionにしたiMacに、別パーティションでLionをインストールしたくなった

今持ってるiMacはLionがプリインストールで、Mountain Lionに上書きインストールしてます。ここに別パーティションを作ってLionをインストールしたい。MacBook AirにLionをインストールするときにMac App Storeで買ってるから再ダウンロードも出来る。
ただし

  • 元々ついていたLionのUSB起動用メモリを探すのがめんどくさい
  • 他のUSBメモリは4GBのやつしか持ってない(Lion用インストールディスクにできない)
  • LionインストーラはMountain Lion上で起動しない

のでどうしようかと思って。

解決策

起動ディスクだろうがパーティションほいほい変えられる時代だからなんとでもなるよね

「置くだけ転送」アプリのセキュリティ(は全然不足してる)

前回こんなこと書いてたけど、大事なことを忘れてた。
暗号化。

最初は適当な写真の交換アプリとして考えてたから、せいぜい誤接続や悪戯を防ぐ程度と考えてたんだけど、まず友人から

  • どうせならアドレス交換も出来るようにしろ*1

との要望が出された。
さらに、よく考えてみると悪戯で通信内溶をかすめ取ろうとしたときにですよ、

  • ありあわせのBonjourクライアントを書くのと出来合いのパケットキャプチャツール使うのとどっちが簡単か

ってことになりやしませんか。
本気の攻撃にはとても耐えられないとしても(鍵が実質14bitしかないから)、カジュアルな攻撃者の手間をもうちょっと増やした方がいいんじゃないの。
というわけで共通鍵暗号化を追加しました。CommonCryptoフレームワークのCCCryptを使ってみた。
http://tflig.ht/XJ6QZP

何が言いたいかというと、こんな妙なアプリを使うより3G/LTE回線で、SSLなサーバに接続してファイルを交換した方がずっと安全ということですね*2

似たような可視光通信はどうやってるの?

PC→スマホにファイル転送、画面を撮影するだけ 富士通が新技術
富士通のこれはパスワードまでは送らないで、セキュアな転送はFTPSとかを使うみたいですね。

PC→スマホにファイル転送、画面を撮影するだけ 富士通が新技術
http://www.itmedia.co.jp/news/articles/1301/21/news096.html

思いつき

どうでもいいけど名刺交換のとき相手より下側に重ねるのが礼儀だったりするじゃないですか。
このアプリがアドレス交換に使えたら、それが再現出来たりして

*1:リア充の発想

*2:サーバ側を信用さえ出来れば

iPhoneで「置くだけ転送」するアプリのセキュリティ(はどうあるべきか)

前の前のエントリでこう書いたんだけど

今のままだとこれBonjourのサービス名を可視光通信で送ってるだけなので、可視光通信しなくても無差別に接続しちゃうクライアントがあったら画像送っちゃう。公開するんだったらここをもうちょっとなんとかすべき

今TestFlightでテスト中のものはこれを修正済みです。
仕組みとしては、

  1. 可視光通信Bonjourのサービス名に加えてパスコードを送信
  2. 可視光通信を受信した側はそのパスコードで、相手側に接続を試みる
  3. 合ってれば接続許可、外れてたら接続拒否してパスコード変更

こうなってます。パスコードは僅かに英数字二文字なので、4096通り。PINコードみたいな4桁の数字よりちょっと弱い。可視光通信の速度速く出来たら長くしたい。
しかしながら間違ったパスコードを送ってくる奴がいたら(その間違ったパスコード以外に)変えちゃうので、総当たり攻撃は難しいかもしれない。


もっとも、画面の点滅信号を見られる人ならパスコードは分かっちゃうわけですが*1

ニコニコ動画にもうpしといたけど反応薄いNE(´・ω・`)
D

*1:アプリ内部のSaltと混ぜ混ぜしてハッシュにしたものを送ってはいますが、アプリ本気で解析すればバレるんじゃないかな