2015年4月12日日曜日

Xcodeを6.3に更新しました

先日、理不尽な更新によって、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 件のコメント:

コメントを投稿