9VAeきゅうべえiPad版が、iPhoneで動作させると、ビルドエラーがないのに、最初で落ちるのは、UIPopoverControllerが使えないためだった。
UIPopoverControllerは、メニューバーからプルダウンメニューを表示させるのにサンプルコードが使ってた。これが iPoneで使えないので、代わりを見つけないといけない。
そもそも、iPhoneの小さな画面でメニューバーがいるのか、出せるのかが問題になるが、ファイル開くとか、GIF出力とかメニューに入っているので、そのまま移植できたら作るのもメンテも楽である。それで参考になる記事を探す。
iPhoneでPopOverがなかったのは、入力中に外側の画面の表示をさせる仕様を作りたくなかったんでしょう。この記事によると、iOS9 以上なら回避策があるらしい。
iOS端末 画面サイズ・対応OS早見表 - 文系プログラマの勉強ノート
を見ると、iPhone6SからiOS9になってる。iPhone4s以降なら iOS9に上げられるらしい。
iPhone5の人は、iOS9に上げてもらうことにして、iOS9を最低レベルにしよう。ということで、iOS9を最低レベルにしてビルドしてみたが
iOS9にしてもUIPopoverControllerで落ちる
ios - Popover getting crashes in iPhone - Stack Overflow
下の記事によると、アプリの名前を iTunesにするとエラーが出なくなるらしい。
objective c - UIPopoverController for iphone not working? - Stack Overflow
しかし、ちょっと採用しにくいな。
ということで、Popoverを諦めて、iPhoneでよく使われるスライドメニューに変更してみよう。以下の記事にプロジェクトがついていたので、これを改造することにする。
How To Add a Slide-Out Sidebar Menu in iOS Apps | iOS Programming
新しいプロジェクトに 9VAeを追加すると、以下の記事と同じバグが発生。みんな同じところでつまずくわけだ。
ios - 'release' is unavailable: not available in automatic reference counting mode - Stack Overflow
答えはここにあるらしい
ios - Custom dealloc and ARC (Objective-C) - Stack Overflow
ARCは Auto Reference Countで、オブジェクトの解放を勝手にやってくれる仕組みらしい。エラーの起こった場所は、音楽を再生するときに、以前に使っていたオブジェクトがあれば解放せよというコードだったのだが、これを入れなくても、勝手に解放してくれるということかな。と考えて単にエラー箇所をコメントアウトした。
プロジェクトからいらん画面を削除する
StoryBoardでオブジェクトを選んで、deleteキーを押すとホイホイ消せるようだ。とりあえずいらんもんを消す。時々プログラムを実行して、ちゃんと動くことを確かめながら消していくのがポイント。動かなくなったら元に戻す。
ここに、9VAeの Viewを追加するのだが、それは、次の記事にまとめる