iOSのバージョンが上がるたびにdeprecatedが

というわけで、今回はこんな愚痴ともとれるタイトルをつけさせていただきたいと思います。

iOSはバージョンアップが比較的早いOSですので最新の機能が反映されやすい状態になっています。しかしながらこれがプログラマからするとかなりの負担になることもある、ということを今回はちょっと書いていきたいと思います。先に言っておきますがこの場合のdeprecatedとは「推奨されない」という意味を持ち、指定されている機能を使わない様にすることといった意味や今後この機能が廃止されるという警告を含んでいます。

 

iOS7の更新もやばかったがiOS8の更新もやばかったのね

iOS6からiOS7に上がったときはUIが大幅に刷新された影響でそれに関してのdeprecatedが大量に出たターンでした。テキストやらボタンやらで独自の処理をやっていたパターンだと見た目でOSの状態に合わせる、となるとかなりの修正量が必要になったと思います。特にアプリ内で黒を基調としていた状態から白を基調にする様になるパターンに変えるのにバージョン判定により状態を切り替える、というのが頻発することに。

そしてiOS7からiOS8です。今回の変更で最大の問題点はUIActionSheetとUIAlertViewが(コンパイラ上では警告されないが)UIAlertControllerとなることでdeprecatedになったことで、それに付随してiOS7までUIActionSheetでできた「UIActionSheetをシートが標準で現れるUIViewと見なしてシート上に別のUIを配置する」という裏技が完全にできなくなったことですか。UIDatePickerをUIActionSheetに乗せて・・・というパターンは多かったらしく、わざわざこれのためのコードを作った人もいるくらいですからね。ちなみにUIActionSheetやUIAlertViewがUIViewを継承しているのに対してUIAlertControllerがUIViewControllerを継承していることからも分かる様にUIAlertControllerで別のUIを配置することはできないようですのであしからず。がんばってそれができる様なViewを作って処理をしましょう。これに関してはどのくらいUIActionSheetを利用しているか?にも依存しますのでどんなコードが良いのかを示すことは簡単にはできません。臨機応変に。

 

ちなみに、iOSのバージョン判定ですが、コードとしてはものすごい簡単で

BOOL isGreateriOSVersion(int ver)
{
    return [UIDevice currentDevice].systemVersion.floatValue >= (float)ver;
}

というルーチンでも作ってこれを利用すれば問題は無いでしょう。

 

次のバージョンでは何がdeprecatedになるのやら

昔からiOSでアプリを作っている人や修正を請け負っている人だと気になるところだと思います。もちろん私もこういう記事を書いているくらいですから気になります。まあ、さすがに二年たったくらいでUIがまたもや大幅刷新される、ということは無いと思いますが、それでもdeprecatedによってアプリが動かなくなる、というのはかなり厳しいですよね。需要があるアプリであれば仕事にはなるのでそのあたりを考えると何ともいえなくなってしまうのが考え物ですか。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この記事のトラックバック用URL