[Swift 2.3] 既存のプロジェクトをSwift 2.3に対応させる方法

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Swift 2.3

こんにちは!
モバイルアプリサービス部の田中孝明です。

Xcode 8(iOS 10 SDK)に対応する際、Swift 3.0に対応される場合が多いでしょうが、Deployment Targetの関係上、Swift 3.0対応ができない(もしくは困難)場合もあります。

代表的なもので言えば、組み込んでいるライブラリが対応していない場合でしょうか。
通信ライブラリのAlamofireと非同期画像取得ライブラリのAmamofireImageは便利な反面、Swift 3.0対応版のDeployment TargetがiOS 9以上になりました。

お客様の要望上、iOS 8のサポートを切れない場合があり、やむなくSwift 3.0対応を見送ることもあるでしょう。

その際、Xcode 8 + iOS 10 SDKでビルドできるように、既存のプロジェクトをSwift 2.3に対応しておくという方法があります。

今回はプロジェクトをSwift 2.3に対応する方法を記します。

Swift 2.3対応とSwift 3.0対応に関しては第三回AKIBA.swiftにて植岡さんが既存プロジェクトを最新のXcodeに対応する方法 として発表していただきましたので、そちらも併せて参照頂ければ幸いです。

プロジェクトの設定

Xcode 8をインストールし、Swift 2.3に対応させたいプロジェクトを開きます。

プロジェクトのBuild SettingsUse Lagacy Swift Language Versionの値をYesに変更します。

スクリーンショット 2016-10-06 14.52.20

こちらを設定することでXcode 8でも古いSwiftのバージョン(Swift 2.3)でビルドすることができるようになりました。

CocoaPodsの設定

ライブラリ管理ツールのCocoaPodsをSwift 2.3で対応できるようにしておきます。
Podfileをエディタで開き、各ライブラリのバージョンをSwift 2.3対応版を指定しておきます。

  pod 'Alamofire', '3.5.1'
  pod 'SwiftyJSON', '2.4.0'
  pod 'ZXingObjC'
  pod 'KeychainAccess', '2.4.0'
  pod 'ActionSheetPicker-3.0'
  pod 'AlamofireImage', '2.5.0'
  pod 'Fabric'
  pod 'Crashlytics'
  pod 'AWSMobileAnalytics'
  pod 'RealmSwift'
  pod 'objc-geohash'


Podfileの最後に各ライブラリのビルド設定にSwift 2.3を指定する処理を追記しておきます。

post_install do |installer|
  installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
          config.build_settings['SWIFT_VERSION'] = '2.3'
      end
   end
end


あとはPodの更新を行えば各ライブラリがSwift 2.3でコンパイルできる状態で取得されます。

pod install

あとはコンパイラのエラー、もしくは警告の内容を参照し、ビルドができる環境になればXcode 8への対応が完了します。

まとめ

Swift 2.3対応ですが、恒久対応にはならない点に注意してください。 あくまでXcode 8 + iOS 10 SDKでビルドできる環境を提供しているだけであり、次のXcodeのバージョン以降、徐々にサポートが切られていく可能性があります。

指定するDeployment Targetに合致するライブラリの選定、ライブラリの独自実装、またはDeployment Targetの変更を提案するなど、なるべく早い段階でSwift 3.0へ移行したほうがよいでしょう。

参考文献

Swift 2.3
第三回AKIBA.swift
AKIBA.swift 第3回で登壇してきました