删除过期的配置文件

Posted

技术标签:

【中文标题】删除过期的配置文件【英文标题】:Deleting expired provisioning profiles 【发布时间】:2016-05-21 07:35:37 【问题描述】:

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

有没有办法只从终端做到这一点?

【问题讨论】:

为了正确突出答案的语法,我设置了 bash 标签而不是 ios-provisioning 【参考方案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 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

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

【讨论】:

B R I L L I A N T ! ! !谢谢 稍微修改一下您的脚本,rm -f $provisioning_profile 行实际上应该是 rm -f "$provisioning_profile",因为配置文件包含空格且不带引号的文件不会被删除。 是的,大多数情况下,通过 Xcode 安装时不会有空格,但我确实更新了它,以防人们手动复制它们或使用类似 fastlane 的东西。感谢您的跟进! 我使用 fastlane ? 但即使是路径 ~/Library/MobileDevice/Provisioning Profiles 也包含会破坏脚本的空格... 优秀的脚本。我只是修改了一点,以使日期的比较非常准确。在配置配置文件到期日期之前,未考虑时区。它也只比较 YYYMMDD。新版本的脚本会考虑时区并比较偶数秒。

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

rocketmq消息文件(commitlog)删除策略分析

activemq设置使用内存数和配置自动删除无法消费的消息以及过期的消息

如何从帐户中删除 IOS 团队配置文件?

redis key过期监听

未找到配置文件:未找到未过期的配置文件

检查配置文件过期