解析描述文件脚本

#!/bin/bash

# 获取当前目录下的所有 .ipa 文件
ipas=($(find . -name "*.ipa" -path "./APP/*"))

# 初始化一个变量以保存最早的过期日期
earliest_expiration_date=""

earliest_left_days=0

calculate_remaining_days() {
    # 参数1: 描述文件的过期日期(示例,格式为"Mon DD, YYYY at HH:MM:SS GMT+TZ",您需要替换为实际日期)
    expiration_date=$1

    # 移除末尾的Z并将T替换为空格
    expiration_date="${expiration_date%Z}"
    expiration_date="${expiration_date//T/ }"

    # 将描述文件的过期日期转换为时间戳
    expiration_timestamp=$(date -u -j -f "%Y-%m-%d %H:%M:%S" "$expiration_date" +%s)

    # 获取当前日期的时间戳
    current_timestamp=$(date +%s)

    # 计算剩余秒数
    remaining_seconds=$((expiration_timestamp - current_timestamp))

    # 计算剩余天数
    remaining_days=$((remaining_seconds / 86400)) 

    # 返回剩余天数
    echo $remaining_days
}


# 遍历每个 .ipa 文件
for ipa_file in "${ipas[@]}"; do
    # 删除已存在的 Payload 文件夹
    rm -rf Payload

    # 解压 .ipa 文件
    unzip -q "$ipa_file"

    # 获取 .app 文件夹的名称
    app_folder=$(find Payload -type d -name "*.app" -print)

    if [ -n "$app_folder" ]; then
        # 提取 app 名称
        app_name=$(basename -s .app "$app_folder")
    else
        app_name="N/A"
    fi

    # 初始化描述文件过期时间
    expired_time="N/A"

    html_content=""

    # 获取描述文件路径
    mobileprovision_files=$(find "$app_folder" -name "embedded.mobileprovision" -print)

    for mobileprovision_file in $mobileprovision_files; do

        if [ -e "$mobileprovision_file" ]; then

            # echo $(security cms -D -i "$mobileprovision_file")

            # 提取描述文件中的过期时间
            expired_time=$(security cms -D -i "$mobileprovision_file" | grep -A1 ExpirationDate | tail -n 1 | cut -d '>' -f 2 | cut -d '<' -f 1)

            # 提取 App ID Name
            app_id_name=$(security cms -D -i "$mobileprovision_file" | grep -A1 "Name" | tail -n 1 | cut -d '>' -f 2 | cut -d '<' -f 1)

            # 提取 App ID
            app_id=$(security cms -D -i "$mobileprovision_file" | grep -A1 "application-identifier" | tail -n 1 | cut -d '>' -f 2 | cut -d '<' -f 1)

            # 提取 Group ID
            application_groups=$(/usr/libexec/PlistBuddy -c "Print :Entitlements:com.apple.security.application-groups:0" /dev/stdin <<< $(security cms -D -i "$mobileprovision_file"))

            # 提取 Team
            team=$(security cms -D -i "$mobileprovision_file" | grep -A1 "TeamName" | tail -n 1 | cut -d '>' -f 2 | cut -d '<' -f 1)

            # 提取 Platform
            platform=$(security cms -D -i "$mobileprovision_file" | grep -A1 "Platform" | tail -n 1 | cut -d '>' -f 2 | cut -d '<' -f 1)

            # 提取 UUID
            uuid=$(security cms -D -i "$mobileprovision_file" | grep -A1 "UUID" | tail -n 1 | cut -d '>' -f 2 | cut -d '<' -f 1)

            # 提取 Creation Date
            creation_date=$(security cms -D -i "$mobileprovision_file" | grep -A1 "CreationDate" | tail -n 1 | cut -d '>' -f 2 | cut -d '<' -f 1)

            # 提取 Expiration Date
            expiration_date=$(security cms -D -i "$mobileprovision_file" | grep -A1 "ExpirationDate" | tail -n 1 | cut -d '>' -f 2 | cut -d '<' -f 1)

            # 提取环境
            aps_environment=$(security cms -D -i "$mobileprovision_file" | grep -A1 "aps-environment" | tail -n 1 | cut -d '>' -f 2 | cut -d '<' -f 1)

            # 剩余天数
            left_days=$(calculate_remaining_days $expiration_date)

            # 检查left_days是否小于30,如果是,将css_style设置为设置红色文本颜色的CSS样式
            if [ $left_days -lt 30 ]; then
                css_style="color: red; text-align: center;"
            else
                css_style="text-align: left;"
            fi

            # 检查是否是第一个描述文件或者过期时间更早
            if [ -z "$earliest_expiration_date" ] || [[ "$expiration_date" < "$earliest_expiration_date" ]]; then
                earliest_expiration_date="$expiration_date"
            fi

            # 计算多个描述文件中最快过期的那一个
            earliest_left_days=$(calculate_remaining_days $earliest_expiration_date)

            echo $application_groups
            group_id=',' read -ra group_array <<< "$application_groups"

            html_content+="
            <tr>
                <td style=\"$css_style\">$app_id</td>
                <td style=\"$css_style\">$application_groups</td>
                <td style=\"$css_style\">$aps_environment</td>
                <td style=\"$css_style\">$team</td>
                <td style=\"$css_style\">$creation_date</td>
                <td style=\"$css_style\">$expiration_date</td>
                <td style=\"$css_style\"><span style=\"$css_style\">$left_days</span></td>
            </tr>
            "
        fi
    done

    # 删除解压的文件
    rm -r Payload
done

# 头部HTML
html_header="
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
    <title>iOS App描述文件信息</title>
</head>
<body>
<div id='container'>
    <center>
        <h1>$app_name 描述文件信息</h1>
    </center>
    <div id='content'>
        <table border='1' cellpadding='2' style='border-collapse:collapse;margin-top:10px'>
            <tr>
                <th>App ID</th>
                <th>Group ID</th>
                <th>Environment</th>
                <th>Team</th>
                <th>创建时间</th>
                <th>过期时间</th>
                <th>剩余天数</th>
            </tr>
"

# 尾部HTML
html_footer="
        </table>
    </div>
</div>
</body>
</html>
"

# 添加HTML头部和尾部
html_output="${html_header}${html_content}${html_footer}"

echo $html_output

# 将HTML输出到文件或打印
echo  "$html_output" >"./APP/info.html"

# 完成后显示输出文件
# cat "$output_file"

# 清理输出文件
# rm "$output_file"

results matching ""

    No results matching ""

    results matching ""

      No results matching ""