<週刊 自分のごちうサーチを作る> #7 URLがドロップされたときの処理
前回記事はこちら。
今回のお品書き。
コンテナディレクトリとは
サンドボックス化しないなら特に考える必要はありませんが,せっかくなのでAppStore審査基準にマッチさせる方法を学びましょう。サンドボックス下で使えるパスについてはこちらを。
App Container Directory
はユーザーの明示的な許可無しでアクセスできます。NSHomeDirectory
で取得でき,サンドボックス化されている場合は ~/Library/Containers/{app identifier}/Data
になり,されていない場合はホームフォルダが返ります。
ただこのAPIはXamarinでは実装されていないため,P/Invokeしましょう。適当な場所にNativeMethods
静的クラスを作り,下記のように実装します。
一時ディレクトリの作成と削除
アプリケーション起動時,コンテナディレクトリに一時ディレクトリを作成し,終了時に削除しましょう。
AppDelegate.cs
のDidFinishLaunching
, WillTerminate
が実装すべき場所です。このようになります。
MainWindowController
のコンストラクタで,作成した一時ディレクトリのパスを受け取りましょう。
画像のダウンロード
日本語URLが飛んできたときも大丈夫なように,Punycode対応もしておきましょう。ImageUrlDropped
イベントを購読して,下記のように実装します。
コンストラクタで受け取った一時ディレクトリにパスを追加して,その場所にダウンロードしています。前回作成したFindImage
にパスを渡せば,あとはよろしくやってくれるはずです。では画像URLをブラウザからドラッグ&ドロップしてみましょう。
サンドボックス有効にしていないので,ホームフォルダ配下に.browser
フォルダが作成されているのがわかります。もちろん被る可能性があるので,Guidを使うなど工夫の余地はあります。サンドボックスを有効にした場合には自分の管理下であることが保証できるので,名前は何でもかまいません。
今後やること
Xamarin.Mac 基礎は完了しました。ここまでで基本的な機能は実装できているので,ここから先は「優しさ」になっていきます。