删除过期的配置文件

3

如何仅使用终端识别和删除~/Library/MobileDevice/Provisioning Profiles中的过期配置文件?

是否有一种只能通过终端完成的方法?


我设置了bash标签,而不是ios-provisioning,以便正确地突出显示答案的语法。 - nacho4d
1个回答

10
您可以编写一个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 expirationDate and current date to epoch (Unix Timestamps) then compare both.
    timestamp_expiration=`date -jf"%a %b %d %T %Z %Y" "${expirationDate}" +%s`
    timestamp_now=`date +%s`

    if [ ${timestamp_now} -ge ${timestamp_expiration} ];
    then
        echo "EXPIRED"
        # rm -f "${provisioning_profile}"
    else
        echo "not expired"
    fi

done

您可以使用安全命令和plist buddy从文件中提取ExpirationDate。 然后,为了简单起见,我将该日期转换为易于比较的格式(UNIX时间戳或自1970年以来的秒数),并将其与今天的日期以相同的格式进行比较。 我打印出每个状态的状态。 注意:我不删除它,因为我希望您在取消注释删除行之前验证脚本结果。 我在我的电脑上运行了它,并加入了一个旧的配置文件。 在我的测试中,它正确地识别了过期的配置文件。

太棒了!!!感谢。 - Duck
1
只需要稍微修改你的脚本,将rm -f ${provisioning_profile}这一行实际上改为rm -f "${provisioning_profile}",因为配置文件中包含空格,如果不加引号,该文件将无法被删除。 - Duck
1
是的,大多数通过Xcode安装的应用程序不会有空格,但我已经更新了它,以防人们手动复制它们或使用类似fastlane的工具。感谢您的跟进! - wottle
我使用 fastlane,但是即使路径 ~/Library/MobileDevice/Provisioning Profiles 包含一个空格也会破坏脚本... - Duck
1
优秀的脚本。我刚刚稍微修改了一下,使日期比较真正精确。在供应配置文件到期日期之前,时区没有被考虑在内。而且它仅比较YYYMMDD。新版本的脚本考虑时区并比较秒数。 - nacho4d
不错。我从来没有像现在这样仔细管理我的预配资料,但是我很欣赏这些改进。 - wottle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接