测试iOS移动配置文件的命令行方式仍然有效吗?

时间:2016-08-25 16:28:06

标签: ios shell jenkins provisioning-profile ios-provisioning

根据Developer.Apple.com,配置文件可能无效的一个原因是证书现已过时。此帖子涵盖了检查证书:Validate certificate and provisioning profile

我更感兴趣的是,如何测试配置文件现在是否陈旧。现在我发现有很长的延迟,所以无法破译失效的原因。如果我可以运行此命令,说每次我的构建作业在Jenkins上运行,那么我可以更好地通过记录从有效到无效的确切时间来分析失败。

2 个答案:

答案 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