根据Developer.Apple.com,配置文件可能无效的一个原因是证书现已过时。此帖子涵盖了检查证书:Validate certificate and provisioning profile
我更感兴趣的是,如何测试配置文件现在是否陈旧。现在我发现有很长的延迟,所以无法破译失效的原因。如果我可以运行此命令,说每次我的构建作业在Jenkins上运行,那么我可以更好地通过记录从有效到无效的确切时间来分析失败。
答案 0 :(得分:1)
您可以编写一个shell脚本来遍历文件,从mobileprovision文件中获取日期,并根据当前日期进行检查。
#!/bin/sh
for provisioning_profile in ~/Library/MobileDevice/Provisioning\ Profiles/*.mobileprovision;
do
printf "Checking ${provisioning_profile}... "
# pull the expiration date from the plist
expirationDate=`/usr/libexec/PlistBuddy -c 'Print :ExpirationDate' /dev/stdin <<< $(security cms -D -i "${provisioning_profile}")`
# convert it to a format we can use to see if it is in the past (YYYYMMDD)
read dow month day time timezone year <<< "${expirationDate}"
ymd_expiration=`date -jf"%a %e %b %Y" "${dow} ${day} ${month} ${year}" +%Y%m%d`
# compare it to today's date
ymd_today=`date +%Y%m%d`
if [ ${ymd_today} -ge ${ymd_expiration} ];
then
echo "${provisioning_profile} EXPIRED"
fi
done
您可以使用security命令和plist buddy从文件中提取ExpirationDate。然后为了简单起见,我只是将该日期转换为易于比较的格式(YYYMMDD),并以相同的格式将其与今天的日期进行比较。我打印出它找到的配置文件。
理想情况下,您可能需要更改它以提前一段时间发出警告(我建议30天)。这样,您就有时间重新生成配置文件,并为您提供时间来构建新的配置文件并将其发送到您的测试设备。
答案 1 :(得分:0)
通过简单的gem安装,可以使用fastlane的太空船api实现,开发人员门户文档显示了一个确切的示例。
broken_profiles = Spaceship.provisioning_profile.all.find_all do |profile|
# the below could be replaced with `!profile.valid?`, which takes longer but also verifies the code signing identity
(profile.status == "Invalid" or profile.status == "Expired")
end
https://github.com/fastlane/fastlane/blob/master/spaceship/docs/DeveloperPortal.md