Swiftを試してみたかったので、OS X向けに簡単なフォトフレームアプリを作ってみた。

(ところで、OS Xのアプリ開発に関する日本語の比較的新しい情報(ブログ等)ってiOSに比べると圧倒的に少ないと思うのだけど、やはり金にならないから開発者数が少ないのだろうか・・・?)

KonachanFrame

konachan.netからランダムに画像を取ってきて表示するシンプルなアプリ。プレビューのスライドショー機能と違うのは、表示する画像を取得してくるところ。それ以外はプレビューの方が極めて高機能である(

このアプリを動かす推奨環境としては、まずは、OS X 10.9(Mavericks)以上を使っていること。これはマルチディスプレイ利用時に、各ディスプレイでアプリケーションをフルスクリーンで使うことができるようになったためである(参考:OS X:Mavericks で複数のディスプレイを使う)。次に、MBP or MBAをサブディスプレイ(TwitterやIRCを開いておく画面)として使うことが多い人。このような環境でKonachanFrameをサブディスプレイの方でフルスクリーン起動しておくと、サブディスプレイが簡易デジタルフォトフレームになる。実に素晴らしい資源の無駄遣い!

というのも、私も以前はサブディスプレイの方にTwitterやIRCを開いていたが、日中作業しているときは閉じてた方が生産性が上がることに(ようやく)気が付いて、それから基本閉じるようにしている(重要な通知はNotification Centerに飛ばしているが)。そして、空いたスペースに画像でも表示しておこうかという動機で作ってみた。

アプリ単体のスクリーンショット。これをフルスクリーンで使用すれば良い感じになる。Viewの背景色を黒色にしているため、MacBook Pro Retinaを使ってる人は画像とベゼルが一体化してるかのように見えるはず。

Mission Control. 左半分がメインディスプレイ、右半分がサブディスプレイ

上の画像の右半分を拡大。アプリアイコンに関しては以下のツイートを参照

ソースコード

henry0312/KonachanFrame

  • AppDelegate.swift
     アプリケーション全体のコントローラ。自動生成されたものを編集して使った。
  • Konachan.swift
     モデル
     konachanのAPIを叩いて、画像URLを取得する。このアプリケーションで一番(?)重要な部分(コード自体は40行ぐらいだが)
  • KonachanController.swift
     コントローラ
  • KonachanView.swift
     ビュー
  • main.swift
     自動生成されたファイル
  • PreferencesController.swift
     設定画面を操作するためのコントローラ
  • Utility.swift
     アプリケーション全体で使うユーティリティ

Konachan.swiftはmoebooruのAPIならどのサイトでもたぶん使えると思う(未確認)。

疑問点

シンプルなMVC構成になったと思うけど、いくつかよくわからず、もっと良い方法があるんじゃないの・・・と思いながら書いた部分がある。

例えば、KonachanControllerからKonacanViewにアクセスするために

(NSApp.delegate as AppDelegate).konachanView

AppDelegateのプロパティからkonachanViewへの参照を取得したが、こういう使い方するのだろうか?NSViewControllerを使うほどでもないような気がして使ってないが、これを使えばもっと良い感じに書けるのだろうか?(NSViewControllerの使い方よくわかっていない・・・)

他にも間違いや改善点があれば是非教えて欲しい。

完成までの流れ

Swiftのドキュメントを読む

Language Guideまで全部読んだ。比較的簡単な英語で、Swiftだけでなく一般的なプログラミング作法についてまで(もちろん、Appleの考え方ではあるが)書かれてあっておもしろかった。今後、Swift関連の日本語の書籍が出てくると思うが(すでに出てるのもあると思うが)、言語自体のドキュメントに関してはこれに勝るものはない。

丁寧に読んだため6日かかった(1日2〜3時間?)。

Swiftに関しては確かにモダンな言語だなぁと思う。ドキュメントを読んでると「何でこんな設計にしたんだ?」と感じるところがちょいちょい出てくるが、その多くはObjective-Cと互換性を保つためには仕方なかったのかも・・・と今は考えてる。私はC++(C++11),Ruby,PHPをよく書くが、言語自体の学習コストもかなり小さいと思った。

ちなみに、OptionalsはSwiftのコア機能の1つだと言っても過言ではないかと。大変便利。あと、強い静的型付け言語+型推論で、個人的には好きな言語の1つになった。OS Xにしか開発環境が提供されないのが残念だが・・・。

Swift <=> Objective-Cのドキュメントを読む

数時間でざっくりと読んだ。

Xcodeの使い方を思い出す

私が最後にXcodeを使ったのはまだARCが入る前だったような気がする(3年以上前?)。完全に使い方を忘れていたので、上記のチュートリアルをSwiftを使って読み進めた。

Your First Mac Appで出てきたサンプルコードをSwiftで書き直したのでGistにあげておく。

実際のコードを書く

テストコードを含めて平日の3日ぐらいで作った。その際に以下のサイトとStack Overflowを主に利用した。

また、以下のCocoaチュートリアル(動画)は非常に役に立った。

どうやら、Swiftのチュートリアルも始まるそうなので、期待している。


ようやくまともな言語でOS X / iOS開発が出来るようになるのかなという印象。フレームワークの使い方やXcode自体の使い方などを学習するのに必要なコストはSwiftでもObjective-Cでも変わらないので、開発のハードルが下がったとは思わない。その辺りに慣れれば開発速度はSwiftの方が早くなるかも。Xcodeの補完がうまく働いてるときは書いてて気持ち良かった。

とりあえず、まだ一般に公開されていないSwiftの今後の動向はしばらく目が離せそうにない。