オールObjective-Cで書かれたプロジェクトをSwift化した #BoostyRocket

September 23, 2014

Icon

新作Boosty RocketをSwift化してみました。バージョン 1.2.1で反映されますお楽しみ下さい。

さくっと行くかと思ったら、いかない。なぜなら1つのプロジェクトを別の言語に変えたのは初めての経験だったので全体像把握してなかったんですね。ということで、問題は作業量で実際の変更自体でのハマリはそれほどありませんでした。

あとで見返すために実行した際のメモを残しておきます。

bridgeファイルを追加する

Objective-CをSwiftから利用することができるようにbridgeファイルを追加します。これは既存のプロジェクトにSwiftのファイルを追加しようとしたら、自動的に追加確認メッセージが出てきて追加できました。

AppDelegateをSwift化する

記述も少ないのでとりあえずここをSwift化しました。AppDelegateはプロジェクトをSwiftで作成した際に自動生成されるデフォルトのものをコピペで利用しました。mainは不要になるので削除しました。

その他のファイルをSwift化する

方向性としては2つあります(あると思います)。1つは利用される側(importされる側)から、もうひとつは利用する側(importする側)からのSwift化です。

利用される側(importされる側)からSwift化する

利用される側のファイルからSwift化していく場合、<プロジェクト名>-Swift.hという自動生成されるファイルをObjective-C側でimportして書いていくことになりますが、僕は途中からこのファイルが壊れてしまったようでうまくObjective-CでSwiftを利用できなくなったので利用する側からSwift化することにしました。

その後、Objective-C側でSwiftファイルを利用できなくなった理由として、IntなどのSwift独自の型を利用していたためとわかりました…

利用する側(importする側)からSwift化する

利用する側からSwift化していく場合、Swiftファイルから利用したいObjective-Cのファイルを一時的に先ほどのbridgeファイルに書いていくことになります。

整理する

Objective-CとSwiftでは考え方がもちろん違うため、ファイルやメソッドの名称を整理します。また、好みによってNSNumberをIntにする等の変更を加えます。

後記

Boosty Rocketはそんなに大きなプロジェクトではないのですが、なんだかんだで1日くらい移行作業に時間がかかりました。。。でも、Swift化して扱いやすくなったのでよかった!

別にObjective-Cのままでも良かったんですが、Swift化した理由として、「Swiftで書いたアプリをストアに並べておきたい」「Swiftで書かれたゲームとしてどこかのリストに載ったら嬉しい」というくらいです。Swiftはすぐ一般的になると思うので、最初のうちだけですけどね。

あと、Objective-CからSwiftに変更するのは結構単純作業の繰り返しなので面倒。最初からSwiftで書くのがイイね!!!

今回Swift化したアプリ

1.2.1で利用できます。お楽しみに!(動作上全く変化はわからないけれどw)


Profile picture

Written by morizotter who lives and works in Tokyo building useful things. You should follow them on Twitter