最近我发布了一个企业应用程序(通过HockeyApp分发),其配置文件已过期。因此,该应用程序根本无法启动。当供应配置文件到期时,没有向用户显示警报,这是非常不幸的情况。
Xcode在供应配置文件到期前几周警告我,所以我更新了配置文件并且警告消失了。不幸的是,我忘了在Xcode的构建设置中实际更新配置文件,因此我发布的应用程序在发布后几天就已过期。
我希望明年在配置文件再次到期时避免这种惨败。我可以采取哪些措施来强制检查配置文件不会很快过期吗?
答案 0 :(得分:6)
这是一个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://stackoverflow.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))