InHouse配布のiOSアプリは、ProvisioningProfileの有効期限が切れるとアプリが起動しなくなる。
アプリが起動しない状況を未然に防ぐため、
ProvisioningProfileの有効期限をチェックする機構を検討した。
前提条件
- ProvisioningProfileはFastlane Matchで管理されていること
仕組み
主にFastlaneを利用する。
1. Fastlane MatchにてProvisioningProfileを取得する
2. OpenSSLにてProvisioningProfileをデコードし、Plistファイルを得る
3. Plistファイルから有効期限を取得する
サンプル
Fastlaneにて有効期限をチェックするサンプル
lane :check_provisioningprofile do
# Fastlane MatchにてProvisioningProfileを取得する
match(
readonly: true,
git_url: #{matchリポジトリのURL},
app_identifier: #{Bundle ID},
output_path: "/tmp/check_provisioningprofile"
)
Dir.glob("/tmp/check_provisioningprofile/*.mobileprovision") do |mobileprovision|
# OpenSSLにてProvisioningProfileをデコードし、Plistファイルを得る
sh("openssl smime -inform der -verify -noverify -in #{mobileprovision} > /tmp/decoded.plist")
# PlistファイルからProvisioningProfileの名称を取得する
profile_name = get_info_plist_value(path: "/tmp/decoded.plist", key: "Name")
# Plistファイルから有効期限を取得する
expiration_date_value = get_info_plist_value(path: "/tmp/decoded.plist", key: "ExpirationDate")
expiration_date = DateTime.parse(expiration_date_value.to_s)
# 有効期限が30日後に迫っていたらエラーとする
warning_threshold = DateTime.now + 30
if warning_threshold > expiration_date
UI.user_error!("It will expire soon.\n---> #{profile_name}")
end
end
end