先日、理不尽な更新によって、Xcodeが6.2になった話を書きました。
その後、以前に作ったアプリの簡単な機能追加を頼まれたので、Xcode 6.2のまま作成して納品しました。その際、シミュレーターでは正常に動き、実機でのみクラッシュするという、修正してない箇所での新しい問題が生じました。原因を見つけてソースコードを修正し、無事に作り終わりました。やはり、互換性問題は生じるものですね。
新しいアプリのほうは、本番でも無事に動いているようです。大きな問題が発生せず、安心しました。
こんな感じで過ごしているうちに、Xcodeの6.3が正式に公開されました。Swiftがバージョン1.2となり、細かな機能アップが含まれています。
実験マシンではベータ版をインストールして、iOS実験専用アプリを開いて見ていました。キャスト関係の仕様が変わったようで、多量のコンパイル・エラーが出ていました。その場で直そうかと思ったのですが、正式版が出てからでも遅くないだろうと、とりあえず無視してました。
正式版が登場したので、同じように実験マシンにインストールして、様子を確認です。以前と同じように、多量のコンパイル・エラーが出ていました。これは大きな問題ですね。
まだ使わないから放置するという選択もあるのですが、SwiftやAPIの仕様も変わったことですし、いつかは対応しなければなりません。新しいXcodeを使う必要が生じたとき、互換性エラーの修正から始めるのでは、たまったものではありません。今回はエラーの数が多いので、事前に修正しておいた得策だと思いました。
という考えから、あまり乗り気ではないのですが、開発マシンのXcodeも6.3に更新しました。Swiftの正式版が登場してから、まだ1年も経過していません。今までも少しずつ仕様変更がありましたが、登場から2年間ぐらいは、同じような状況が続くのでしょうね。新しいプログラミング言語なので、更新に付き合うしかないと諦めました。正直、できるだけ早めに、安定して欲しいです。
Xcode 6.3への対応は、iOS実験専用アプリから始めています。いろいろなライブラリが含まれていて、最初に試すのには一番良いアプリです。この際ですからSDKを最新の8.3に設定して、エラーを消すように修正しました。
Xcodeには、Swiftの仕様変更に自動で対応させる機能があり、一括してソースコードを更新できます。これを使えば手間を省けるのですが、どんな箇所がどのように変わったのか、知れる機会を失います。余計な手間はかかるものの、1つ1つエラーメッセージを読みながら、手動で修正する道を選びました。
キャスト関係の変更が、一番影響ある部分でしょうか。今までは「as」とキャストしていた箇所を、「as!」と書くように求められます。
DictionaryとNSDictionaryのキャストも仕様が変わり、データ型を明記するように求められます。描画機能でも描画属性でNSDictionaryが使われていますが、ここでもデータ型を明記してキャストするように求められました。
split関数でもエラーが出ました。記述方法が少し変わったようです。分割条件式ブロックの前に「isSeparator:」を付けるように求められます。
UIButtonなどで使われているtouchesBeganなどの関数(UIResponderに含まれている機能です)では、touchesのデータ型が、NSSetからSwiftのSetに変更されました。ボタンなどの機能を拡張している箇所で、データ型を修正しなければなりませんでした。
今回たまたま気付いたのですが、iOS関連でも警告を受けました。NSCalendarのidentifierで、NSJapaneseCalendarをNSCalendarIdentifierJapaneseに変更しなさいという警告が出ていました。少し調べてみると、iOS8から非推奨になっているようで、いずれ使えなくなるのでしょうね。
他にもあったと思いますが、思い出せたのは以上です。
iOS実験専用アプリは、エラーが消えてビルドに成功しました。オフしている機能もあるので、順番にオンしながら、正常に動くかどうか確かめたいと思います。
他のアプリも、いずれ対応させなければなりません。新しく作った独自ライブラリも増えてきたので、ライブラリを組み込みながら、Swift 1.2への対応も一緒に進めようと考えています。
アプリの数が多い人ほど、大変そうですね。皆さんも、地道に頑張ってください。
(使用開発ツール:Xcode 6.3, SDK iOS 8.3)
0 件のコメント:
コメントを投稿