xyk blog

最近は iOS 開発の記事が多めです。

Fastlaneでplistを更新する

fastlane: 2.3.0

Fastlaneでplistを更新する方法を調べたのでメモ。
update_info_plistというアクションを使う。
fastlane/update_info_plist.rb at master · fastlane/fastlane · GitHub

app_identifierdisplay_nameについてはアクションのパラメータに直接渡せるが、それ以外は更新するロジックをブロックに書いて渡す。

以下はURL Schemeを環境別に更新する例。
正確なパラメータ名はplistファイルをxmlエディタで開いて確認する。

Fastfile

platform :ios do

  lane :update_url_scheme_dev do
    update_url_scheme(scheme: 'Dev')
  end

  lane :update_url_scheme_beta do
    update_url_scheme(scheme: 'Beta')
  end

  private_lane :update_url_scheme do |options|
    update_info_plist(
            plist_path: 'path/to/Info.plist',
            block: lambda { |plist|
              plist['CFBundleURLTypes'].each {|urlType|
                if urlType['CFBundleURLName'] == 'com.example.default-url-identifier'
                  urlSchemes = urlType['CFBundleURLSchemes']
                  urlSchemes.map! {|urlScheme|
                    TARGET_URL_SCHEME = 'myapp'
                    if urlScheme.start_with?(TARGET_URL_SCHEME)
                      "#{TARGET_URL_SCHEME}-#{options[:scheme].downcase}"
                    else
                      urlScheme
                    end
                  }
                end
              }
            }
    )
  end

end

実行

$ fastlane ios update_url_scheme_beta