2015年8月12日水曜日

古典調律アプリ「Meantone」を2.0にバージョンアップしました

4年前に最後のバージョンアップをしたまま放置されていた古典調律アプリ「Meantone」をv.2.0にバージョンアップしました。
ちなみにアイコンは、バロックの巨匠、モンテヴェルディの肖像です。

iOSがバージョンアップした際、Meantoneのプログラムの不具合が顕在化し、それについてiTunesでも何人かに指摘されているのは分かっていました。
ただ、iOSのバージョンアップのスピードが速すぎるのと、ここ数年、Make系の活動に夢中になっていたこともあり、申し訳ないと思いつつもなかなか手がつかずにいました。

昨年Appleから新しい言語Swiftが公表されましたが、今後iPhoneで何かやるにはどうしてもSwiftの知識が必要になるだろうし、これを機会にちょっとSwiftの勉強をしてみようと昨年から考えていました。
また、仕事でやっているわけでもないので、この際Objective-Cからきっぱり足を洗って、過去のソースも全て捨てて(一部捨ててませんが)、プログラムを書き直してみようと思い立ったわけです。

そんなわけで、有料アプリを買っていただいた方々のためにも、まずこのアプリをSwift化しようと考えました。


コンピュータ言語を語れるほどの専門知識はありませんが、Swiftはある意味Objective-Cと逆の方向性を持った言語のように感じます。

Objective-Cは、あまりコンパイルエラーを出さず、ランタイム時(実動作時)に不具合を発生します。プログラムの書き方には自由度があるのですが、その分だけ、プログラマは自分自身で非常に気をつけてプログラムを書く必要がありました。

ところが、世のコンピュータ言語は複雑になり過ぎました。
プログラマがより生産的であろうとすると、開発の後段でたくさんのテストを行って不具合を取るより、言語自体が不具合を発生させないような仕組みを持つべきだという考えも当然出てきます。

私にはSwiftは、コンパイル時に不具合をなるべく出して堅牢なソフトとするため、かなり厳格な書法をユーザーに課している言語に見えます。その辺の感覚は、Objective-Cと一線を画す感じがしました。

特に驚くのが、クラス(のポインタ)が入る変数に?や!のような記号を付けて、この変数にヌルが入るかどうかを明確に意識させる点です。
最初はここまで冗長に書かされて、ややバカにされている感じもしましたが、結局は自分もこの手の不具合を相当出しているので、そういう意味ではSwiftのおかげで変数の扱いの意識が高まったとは言えると思います。(←今更何言ってんの!とか突っ込まれそうですが)


もう一つ、今回後半で苦労したのが、iPhoneの画面サイズの問題。

今やiPhoneアプリは、3.5inch, 4inch, 4.7inch, 5.5inchの4種類の画面をサポートしなければいけなくなりました。どの一つでも欠けていると、Appleはアプリを受け付けてくれません。
このようなときに、どの画面でも画面パーツがうまく表示されるように調整できるというAuto Layoutを使ってみたのですが、これがさっぱりうまくいきません。個別の理屈は分かっても、全くうまく制御が出来ないのです。ある数値を入れると、パーツがいきなり変な場所にフッ飛んでしまったりとか・・・
仕方がないので、結局昔からあるAuto resizeという方法で何とかうまくゴマかして各画面に対応しました。

企業が商品として出すアプリだと、きっちり正攻法でAuto Layoutを使い、デザインをどのサイズでもきっちり作ってくるのでしょうが、個人開発ではそこまで対応する余裕がありません。

Meantoneでも、3.5inchでは妙にきちきちで、5.5inchでは逆に画面に無駄なスペースが生まれているのはそのためです。
参考までに、3.5inchと、5.5inchの画面を貼っておきます。



ここ数ヶ月、少しずつ時間を捻出して何とかここまで作りましたので、ぜひ使っていただいて、ご感想、ご意見などいただければと思います。

0 件のコメント:

コメントを投稿