检查配置文件过期

Posted

技术标签:

【中文标题】检查配置文件过期【英文标题】:Checking for provisioning profile expiration 【发布时间】:2015-09-23 18:36:22 【问题描述】:

最近我发布了一个企业应用程序(通过 HockeyApp 分发),其配置文件已过期。结果,该应用程序根本无法启动。当配置文件过期时,不会向用户显示任何警报,这是一种非常不幸的情况。

Xcode 在配置文件到期前几周警告我,所以我更新了配置文件,警告消失了。不幸的是,我忘记在 Xcode 的构建设置中实际更新配置文件,所以我发布了一个在发布几天后过期的应用程序。

我希望明年配置文件再次过期时避免这种惨败。我可以做些什么来强制检查配置文件不会很快过期吗?

【问题讨论】:

【参考方案1】:

这是一个 python 脚本,如果配置文件在 15 天内到期,它将中止构建。此脚本旨在作为构建阶段脚本运行。

请注意,此脚本在作为 Xcode Bot 集成的一部分运行时也可以工作。

#!/usr/bin/python

import glob, os, plistlib, subprocess, sys
from os import path
from datetime import datetime

def read_mobileprovision(mobileprovision_path):
    # From http://***.com/questions/6398364/parsing-mobileprovision-files-in-bash/10490095#10490095
    return plistlib.readPlist(subprocess.Popen(['security', 'cms', '-D', '-i', mobileprovision_path], stdout=subprocess.PIPE).stdout)

if os.environ['PLATFORM_NAME'] != 'iphoneos':
    sys.exit(0)

provisioning_profiles_dir = '/Library/Developer/XcodeServer/ProvisioningProfiles' if os.environ['USER'] == '_xcsbuildd' else path.expanduser('~/Library/MobileDevice/Provisioning Profiles')
provisioning_profile_uuid = os.environ['EXPANDED_PROVISIONING_PROFILE']
mobileprovision_path = path.join(provisioning_profiles_dir, provisioning_profile_uuid + ".mobileprovision")
if not path.exists(mobileprovision_path):
    for mobileprovision in glob.iglob(path.join(provisioning_profiles_dir, "*.mobileprovision")):
        if read_mobileprovision(mobileprovision)['UUID'] == provisioning_profile_uuid:
            mobileprovision_path = mobileprovision
            break

print(mobileprovision_path)

expiration_date = read_mobileprovision(mobileprovision_path)['ExpirationDate']
print("Expiration Date: ".format(expiration_date))

remaining_days = (expiration_date - datetime.now()).days
print("Remaining Days: ".format(remaining_days))

if remaining_days < 15:
    sys.exit("error: Provisioning Profile  is expiring in  days.".format(mobileprovision_path, remaining_days))

【讨论】:

以上是关于检查配置文件过期的主要内容,如果未能解决你的问题,请参考以下文章

代码设计错误:删除过期配置文件后找不到配置文件

nginx配置静态文件过期时间

配置文件即将过期

配置文件过期后企业应用商店中的应用

如何更新已过期的配置文件(在 testflight 中)

删除过期的配置文件