【Flutter】ExportOptions.plistにTeamIdを入れたくない

Flutter Advent Calendar 2022」に参加させて頂きます!2日目です。

動機

コマンドライン一発でApp Store Connectにipaファイルを転送したい。そのためにはExportOptions.plistを作成する必要がある。ただ、このファイルにTeamIdを入れたくない。

解決方法

  1. ExportOptions.plist.templateを作る
  2. 1の中のチームIDを{TEAM_ID}に変更する
  3. コンパイル時に以下のコマンドを実行して、(TEAM_ID)をチームIDに置換する

sedはLinux系のコマンドなので、デフォルトではWindowsでは使えません。MacやCodeMagic(無料枠)では使えました。

sed s/{TEAM_ID}/チームID/ ios/ExportOptions.plist.template > ios/ExportOptions.plist

コマンドをCode Magicの「Pre-build script」に設定して、チームIDはCode Magicに入り、Githubに入れなくてすむようにした。

したかったこと

ソースをGithubで公開した上で、Code Magicを使用してCICDした。でも、Team IDって公開していいのかよく分からんので、とりあえず、非公開にしたい。そこでビルド時にExportOptions.plistを動的に生成することにした。

できなかったこと

本当はFlutterのコマンドライン実行時のオプションとしてチームIDを渡したかった。ただその場合、Info.plistまでは伝播させて使えそうだが、ExportOptions.plistにデータを渡す手段が分からなかった。結局、力業(sedで置換)で解決した。

ソース

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>destination</key>
    <string>upload</string>
    <key>manageAppVersionAndBuildNumber</key>
    <true/>
    <key>method</key>
    <string>app-store</string>
    <key>signingStyle</key>
    <string>automatic</string>
    <key>stripSwiftSymbols</key>
    <true/>
    <key>teamID</key>
    <string>{TEAM_ID}</string>
    <key>uploadBitcode</key>
    <false/>
    <key>uploadSymbols</key>
    <true/>
</dict>
</plist>