iOSでのSwift OSS
安達氏はSwiftでの開発で、先述のQuickとNimbleのほか、「Alamofire」(HTTP通信用ライブラリ)、「SwiftJSON」(JSONハンドリング用ライブラリ)、「BrightFutures」(非同期処理用ライブラリ)というOSSを使用しているそうです。これらのOSSをプロジェクト配下へ取り込むのに安達氏がとっている方法は、「プロジェクトに移動した上でgit submoduleコマンドを利用する」というもの。その詳細な手順は、安達氏が執筆したブログエントリ「[Swift] HTTP通信OSS Alamofire 導入編 | Developers.IO」に解説されています。
ただし、Dynamic Libraryに対応していないiOS 7では、ソースファイルをプロジェクトに入れるといった工夫が必要となるとのこと。この工夫が必要なOSSは、先述のうちAlamofire、SwiftJSON、BrightFuturesの3つで、ソースファイルをコピーするのではなく、ソースファイルへの参照をリンクする形で行っているそうです。「ファイルの追従をgit moduleの更新で極力行うようにしているため、この方法をとっている」(安達氏)
一方、Quick、Nimbleはテストターゲットのみに含まれるため、テストをiOS 8向けとしDynamic frameworkでプロジェクトに入れているとのことでした。
Moduleの穴
4つ目のトピック「Moduleの穴」では、最初に、SwiftでNSObjectのクラス名を取得したとき、モジュール名まで含まれてしまう事象への対応方法を紹介。「モジュール名を取り除いたクラス名を取得するユーティリティを作成することで対応した」(安達氏)
また、MSManagedObjectというサブクラスを用いたテストで実行時に落ちてしまうトラブルがあった際には、@objc()キーワードを用いてObjective-Cから見たときのサブクラス名を変更することで解決できることが紹介されました。
後方互換性
最後は「後方互換性」をトピックとして、CI(安達氏の環境ではTravisを利用中とのこと)稼働時のXcodeのマイナーアップデート対応や、Swift 1.2などが取り上げられましたが、ハイライトはSwift言語の作者であるChris Lattner氏の哲学の紹介でした。
安達氏は、Lattner氏の著書『The Architecture of Open Source Applications』(m-takagi氏により邦訳プロジェクトが進行中)に、「過去の決断も積極的に見直して過去との互換性を気にせずにAPIを大きく変更していく」「過去の決断を躊躇せず再考」「結局のところ、パーフェクトな存在を目指すのではなく、常に向上し続ける事が大切」と、同氏が後方互換性を考慮していないことを示唆する部分があると指摘。「Swiftとは、Lattner氏のこのような考え方に従って向き合っていく必要があると思う」(安達氏)と述べて、このセッションを締めくくりました。
【関連リンク】
・「ゲンバのSwift」セッションのスライド
・yad氏(安達勇一氏)の連載「アップルの新プログラミング言語『Swift』を探検しよう」(CodeZine)