「Flutter Advent Calendar 2022」に参加させて頂きます!2日目です。
動機
コマンドライン一発でApp Store Connectにipaファイルを転送したい。そのためにはExportOptions.plistを作成する必要がある。ただ、このファイルにTeamIdを入れたくない。
解決方法
- ExportOptions.plist.templateを作る
- 1の中のチームIDを{TEAM_ID}に変更する
- コンパイル時に以下のコマンドを実行して、(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>