LoginSignup
1
1

More than 3 years have passed since last update.

ProvisioningProfileの有効期限をチェックする

Posted at

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
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1