第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 Macのつくりかた
iOS版PutOnは大きく分けて三つの部分から出来ています。
- PictureSharing、DNSSDObjectsをまぜまぜして作った、Bonjourを叩いてファイル転送を行う部分
- AVCaptureなんたらを使ってリアルタイムのカメラ映像を得て、可視光通信を受信する部分
- 色を点滅させて可視光通信を送信する部分
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のカメラで可視光通信したいというのが動機の一つなので、実用性は今ひとつですけど、なんか面白いかもしれないから物好きな人はどうぞ。無料ですし
いちおうの特長
Tips
LionからMountain LionにしたiMacに、別パーティションでLionをインストールしたくなった
今持ってるiMacはLionがプリインストールで、Mountain Lionに上書きインストールしてます。ここに別パーティションを作ってLionをインストールしたい。MacBook AirにLionをインストールするときにMac App Storeで買ってるから再ダウンロードも出来る。
ただし
のでどうしようかと思って。
「置くだけ転送」アプリのセキュリティ(は全然不足してる)
前回こんなこと書いてたけど、大事なことを忘れてた。
暗号化。
最初は適当な写真の交換アプリとして考えてたから、せいぜい誤接続や悪戯を防ぐ程度と考えてたんだけど、まず友人から
- どうせならアドレス交換も出来るようにしろ*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
思いつき
どうでもいいけど名刺交換のとき相手より下側に重ねるのが礼儀だったりするじゃないですか。
このアプリがアドレス交換に使えたら、それが再現出来たりして
iPhoneで「置くだけ転送」するアプリのセキュリティ(はどうあるべきか)
前の前のエントリでこう書いたんだけど
今のままだとこれBonjourのサービス名を可視光通信で送ってるだけなので、可視光通信しなくても無差別に接続しちゃうクライアントがあったら画像送っちゃう。公開するんだったらここをもうちょっとなんとかすべき
今TestFlightでテスト中のものはこれを修正済みです。
仕組みとしては、
こうなってます。パスコードは僅かに英数字二文字なので、4096通り。PINコードみたいな4桁の数字よりちょっと弱い。可視光通信の速度速く出来たら長くしたい。
しかしながら間違ったパスコードを送ってくる奴がいたら(その間違ったパスコード以外に)変えちゃうので、総当たり攻撃は難しいかもしれない。
もっとも、画面の点滅信号を見られる人ならパスコードは分かっちゃうわけですが*1。
*1:アプリ内部のSaltと混ぜ混ぜしてハッシュにしたものを送ってはいますが、アプリ本気で解析すればバレるんじゃないかな