ほとラボ

It works!

時かけスクリーンセーバーを作った

f:id:hoto17296:20180610193421g:plain

あの映画もう12年前だよ何を今更という感じだけど、Swift の練習ということで。

github.com

作ったもの

macOS 用のスクリーンセーバー。

アニメ映画「時をかける少女」を観た人はわかると思うけど、タイムリープするときの時計っぽいアレを模したやつ。

数字フォントに関しては id:kironono さん作のフォントを利用させていただいた。

ola.kironono.com

できたこと

  • Swift でスクリーンセーバーを作った
  • 画面サイズに合わせたフォントサイズで現在時刻を表示する
  • 文字の色とフォントを変える・文字をぼかす

普段 iOS アプリを書いている勢からすると楽勝な内容かもしれないが、 XCode もろくに起動したことがない全くの未経験マンがやると「画面に文字を表示する」だけで1時間以上かかったりしたので、めっちゃ大変だった・・・。

できなかったこと

フォントファイルを埋め込んで使用する

現状では、上記の数字フォントを Mac にインストールしないと使えない。 本当はスクリーンセーバーそのものにフォントを埋め込んでそれを使うようにしたい。

通常の macOS アプリでできるやり方1だと、何故かスクリーンセーバーだとできなかった。

このへんとか試してみたけど無理げ。

有識者の意見求む〜〜〜

上位桁と下位桁で 0 のフォントを変える

実際のあのシーンの時計っぽいアレは、上位桁と下位桁で 0 の形が違っているらしく、フォントにも両方の文字が含まれている。

この対応は頑張れば出来たと思うけど、ちょっと面倒だったのでいったんやらずにリリースした。

Swift 所感

  • 補完便利
    • 普段 Python とか JavaScript とかを Vim で「補完とかそんなに使わなくてもいけるっしょ」というノリでコードを書いているので、XCode のあまりの「何でもしてくれる感」にお腹いっぱいになった
  • デバッグしづらすぎワロタ
    • Swift.print() とか使ってもコンソールに何も出力されなくてデバッグが超大変だった
    • スクリーンセーバー特有なのかもしれない
  • Swift そのものはわかりやすいが API がわからん
    • macOS と iOS で使う API がゴッソリ違うので Web 上の情報があまりアテにならない
      • AppKit の情報少ない・・・
    • 親クラス ScreenSaverView がどうなってるか知りたくてもよくわからない
      • 公式ドキュメントには大した情報が載ってない
      • ソースコードは非公開? 探しても見つからなかった
      • ライブラリのコードは公開されてるのがデフォな文化圏にいるので驚きだった

まぁ総じて Swift 楽しい。

というか初めてやるなら iOS アプリ書いたほうがいいな普通に。


  1. フォントファイルをプロジェクトに追加してターゲット設定して info.plist を設定してどうのこうの