コネヒト開発者ブログ

コネヒト開発者ブログ

Xcode14対応

こんにちは!コネヒトでiOSエンジニアをやっていますyanamuraです。

ママリのiOSアプリでXcode14でビルドが通るように対応を行いました。そんなに大変ではありませんでしたが、多少修正するところがあったのでまとめてみました。

やったこと

ライブラリのアップデート

ママリではRealmを使っていて、バージョンを上げる必要がありました。RealmSwiftを10.28.1、RxRealmを5.0.4にアップデートしました。

また、Xcode14にするとSwiftのバージョンが5.7になります。ママリではswift-formatを使っていて、こちらのバージョンを0.50700.1にアップデートしました。

ソースコードの修正

以下のようなエラーがコンパイル時に出るようになったので修正を行いました。

The compiler is unable to type-check this expression in reasonable time: try breaking up the expression into distinct sub-expressions

コンパイルエラーが発生した箇所はcombilneLatestでネストしている部分でした。

このようにcombineLatestの数の制限を突破するためにネストしている箇所が!

Observable.combineLatest(
    Observable.combineLatest(
      x,
      y
    ),
    a,
    b,
    c,
    …
    )
)

このようにネストしている箇所を外に出してやることでエラーは解消できました。

let xy = Observable.combineLatest(
      x,
      y
)

Observable.combineLatest(
    xy,
    a,
    b,
    c,
    …
    )
)

archiveに失敗する問題対応

上記対応でビルドはできるようになったのですが、archiveで失敗するようになりました。

CocoaPodsで追加しているライブラリで署名のエラーが出ました。

Signing for “XXX” requires a development team. Select a development team in the Signing & Capabilities editor

CocoaPodsのほうでもissueとしてあがっていました。 https://github.com/CocoaPods/CocoaPods/issues/11402

解決方法としてはこちらのようにTeam IDを設定するか https://github.com/CocoaPods/CocoaPods/issues/11402#issuecomment-1149585364

post_install do |installer|
  installer.generated_projects.each do |project|
    project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings["DEVELOPMENT_TEAM"] = " Your Team ID  "
         end
    end
  end
end

CODE_SIGNING_ALLOWEDをNOにすることで解決できました。 https://github.com/CocoaPods/CocoaPods/issues/11402#issuecomment-1201464693

post_install do |installer|
  installer.pods_project.targets.each do |target|
    if target.respond_to?(:product_type) and target.product_type == "com.apple.product-type.bundle"
      target.build_configurations.each do |config|
          config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
      end
    end
  end
end

まとめ

Xcode14にあげることで、iOS16の実機デバッグができるようになりますし、Swift5.7の新機能が使えるようになります。

Swift5.7ですぐに使いたいのがif letなどの短縮で

var startDate: Date?

if let startDate = startDate {
…

と書いていたのが以下でよくなりますね!

var startDate: Date?

if let startDate {
…

Swift 5.7については公式のだとSwift language announcements from WWDC22 が見やすい感じになっていますのでXcode14対応が終わったら見てみると良いかなと思います。

例年春頃にはXcode14にあげないとAppStoreに申請できなくなってしまうのでお気をつけください。


コネヒトでの開発に興味を持っていただいた方はカジュアルにお話しましょう〜 TwitterのDMなどでも大丈夫ですのでお気軽にどうぞ www.wantedly.com