CocoaPodsにtest_specというのがあるのを今更ながら知った

CocoaPods 1.6.0 Betaのブログ記事(2018年8月)を今更ながら読んでいたら、s.test_specという定義ができるのを遅まきながら知った。

Pod::Spec.new do |s|
  # ... rest of root spec entries go here

  # Unit Test Sources - Those do not require an app host to run. 
  # They also require 'OCMock' dependency.
  s.test_spec 'Tests' do |test_spec|
    test_spec.source_files = 'Tests/**/*.{h,m}'
    test_spec.dependency 'OCMock'
  end

  # SnapShot Tests Sources - Those *do* require an app host to run.
  s.test_spec 'SnapshotTests' do |test_spec|
    test_spec.requires_app_host = true
    test_spec.source_files = 'SnapshotTests/**/*.{h,m}'
  end

おまけで、cocoapods-generateという、podspecからXcodeのプロジェクトを生成してくれるプラグインも紹介されていてよさそうだった。SwiftPM(Swift Package Manager)の$ swift package generate-xcodeprojと一緒の感じですね。

Xcodeのプロジェクト生成だとXcodeGenという、YamlJSONの定義から生成するツールもある。

2018年振り返り

総括

今年は割と潜っていた感じがするので、来年はもっとアクティブに活動できるといいですね。それと今年は新しくリリースした・新たにコミッターになったOSSがなかった年だったっぽいので、何か新しいものに関わったり、Swiftにももっとコミットしていきたいです。沢山旅行もしたいしお金も欲しいしお酒も飲みたい!✈️💰🍻

Swift 4.2のBatch Modeについて

https://swift.org/blog/swift-4-2-released/Support for batch mode compilation resulting in faster build timesと言及されているものについて。

この件はWWDC 2018のセッションでも紹介がありました: https://developer.apple.com/videos/play/wwdc2018/401

  • これまでSwiftのビルドは簡単にまとめると、デバッグビルド(インクリメンタルビルド)では1ファイルずつコンパイル、リリースビルドではWhole Moduleモードと呼ばれるモードで、モジュール内の全ファイルを一度にまとめてコンパイル、という感じであった
    • Whole Moduleモードでは、モジュール内で継承されていないclassfinalが付いていなくても、実質的にfinal扱いするという最適化もできたりする
  • デバッグビルドが1ファイルずつコンパイルするのに比べて、Whole Moduleモードでまとめてコンパイルする方が速いケースがあった
    • このcompilation modeは最適化のモードとは分離されていて、SWIFT_COMPILATION_MODEというビルド設定で変更できる
    • 以前まではWhole Module Optimizationと呼ばれる最適化として提供されていたが、Swift 4.1(Xcode 9.3)からcompilation modeと最適化のモードが分離されるようになった
  • Swift 4.2からはインクリメンタルビルドにBatch Modeというものが実装され、デバッグビルドでも複数ファイル単位でコンパイルできるようになり、ビルドが高速化した

デバッグビルドが速くなって嬉しいですね。

iOSDC Japan 2018でCarthageのLTをします #iosdc

こんにちは。すでに会社のDeveloper Blogでも公開されていますが、iOSDC Japan 2018でCarthageの最新情報についてLTをします。

iOSアプリ開発に欠かせないパッケージマネージャーのCarthageですが、その新機能になかなか気付かないこともあるでしょう。本LTでは、昨年のiOSDC Japanからの1年分のアップデートの中から要注目の箇所をピックアップして紹介することで、開発者の皆様の日々の開発体験の向上に寄与したいと思います。

最近なかなかリソースを取れずにCarthageの進捗があまり芳しくないのは事実ですが、この一年分を振り返ってみるとそれなりの内容にはなるかと思います。

iOSDC Japanでは3年連続のLT登壇となります。今年もきっとLTタイムにはビールなどが用意されていると思うので、楽しい気分でワイワイやっていきましょう🍻

過去のLT情報

Swift Package Managerの略称はSwiftPMが推奨

SPMという表記をたまに見かけるけど、Swiftであることがよく分からないですよね。

https://twitter.com/aciidb0mb3r/status/1007293445168250880

(@aciidb0mb3rさんはAppleの人で、Swift Package Managerの主要開発者の一人です)

NimbleでSwiftコンパイラーのバグ(リグレッション)に遭遇した話

Xcode 10 beta 1(Swift 4.2)でNimblethrowAssertion()/raiseException()マッチャーなどを使うとランタイムクラッシュする事象が発生して、その成り行きが面白かったのでここに記します。

ここまで

ここから

問題なかったらワークアラウンドのPRはrevertできるのでめでたい(期待)😇。

追記

Xcode 10 beta 2には該当の修正はまだ含まれていませんでした……残念。beta 3に期待。