CocoaLumberjackを使ってdebug ipaでログを保存する
ipaファイルを作成してsqaにテストを任せ、アプリがクラッシュしてしまった際 にどこでクラッシュしているのかログで確認できると修正が早く行えます。
ipaをdebugにすればログ出力されるものだと思ったいたのですが、試してみたところログが出力されなかったのでCocoaLumberjackを使ってアプリ内にログを保存するという方式をとることにしました。
コード
AppDelegate
AppDelegateに以下のような記述を行います。こちらのサイトを参考にさせていただきました。
import CocoaLumberjack
... 省略
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
dynamicLogLevel = DDLogLevel.verbose
DDLog.add(DDTTYLogger.sharedInstance)
let fileLogger = DDFileLogger()
fileLogger.rollingFrequency = 60 * 60 * 24
fileLogger.maximumFileSize = 1024 * 1024
fileLogger.logFileManager.maximumNumberOfLogFiles = 10
DDLog.add(fileLogger)
return true
}
ログ出力
あとは任意の場所でDDLogDebugを使ってログ出力をするだけです。
このログデバッグはリリースビルドには含める必要がない為DEBUG時のみに設定しています。
#if DEBUG
DDLogDebug("Hello World!")
#endif
fastlaneでipa作成時でたエラー
fastlaneでipaを作成しようとしたのですが以下のようなエラーがでました。
error: SWIFT_VERSION '5.0' is unsupported, supported versions are: 3.0, 4.0, 4.2. (in target 'CocoaLumberjack')
解決策としてはPodsを選択してCocoaLumberjackのSwift Language Versionを4.2に設定し直してあげることでipaを正常に吐き出すことができました。
circle ciでも同じエラーが出た!
Swift Language Versionを修正してGithubにpushしたのですが同じようにエラーが出ました。
error: SWIFT_VERSION '5.0' is unsupported, supported versions are: 3.0, 4.0, 4.2. (in target 'CocoaLumberjack')
Swiftのversionを定義している部分が思いつかず結構ハマっていましたが、問題はCocoaPodsの中に定義しているライブラリのversionを指定していないことでした。
2019/6/5日現在CocoaLumberjackのversionは3.5.3でSwift5に対応済みでした。
はじめは以下のようにpodファイルの中に定義をしてライブラリを使っていました。
pod 'CocoaLumberjack/Swift'
バージョンを指定しないとSwift5に対応済みの3.5.3が自動的に入ってしまう為、Swift5に対応前のversionを以下のように指定することでcircle ciのビルドが通るようになりました。
pod 'CocoaLumberjack/Swift', '3.5.1'
参考文献
iPhoneアプリの実機動作確認中にログを残す「CocoaLumberjack」
How to set Swift version 5 (for recent dev snapshots) in Xcode build settings?
carthage SWIFT_VERSION ‘5.0’ is unsupported, supported versions are: 3.0, 4.0, 4.2.エラー