Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions dot.launchd/com.github.mtsd.xcode-archives-cleaner.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.github.mtsd.xcode-archives-cleaner</string>

<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/Users/kosuke-matsuda/.launchd/com.github.mtsd.xcode-archives-cleaner.sh</string>
</array>

<key>StartCalendarInterval</key>
<dict>
<key>Day</key>
<integer>1</integer>
<key>Hour</key>
<integer>3</integer>
<key>Minute</key>
<integer>0</integer>
</dict>

<!-- 標準出力・エラー出力をファイルにリダイレクト(オプション) -->
<key>StandardOutPath</key>
<string>/tmp/xcodearchivecleaner.log</string>
<key>StandardErrorPath</key>
<string>/tmp/xcodearchivecleaner.err</string>

<!-- スクリプト実行時の環境変数を設定(オプション) -->
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>

<!-- ログイン時にも有効にする -->
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
51 changes: 51 additions & 0 deletions dot.launchd/com.github.mtsd.xcode-archives-cleaner.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#!/bin/bash

# macOS専用スクリプトのため、macOS以外では終了
if [[ "$(uname -s)" != "Darwin"* ]]; then
echo "This script is for macOS only"
exit 0
fi

# Xcodeのアーカイブディレクトリ
ARCHIVE_DIR="$HOME/Library/Developer/Xcode/Archives"

# 削除したいアーカイブの経過日数(例:30日以上経過したもの)
DAYS_OLD=30

# OS検出して適切なdateコマンドを使用
if [[ "$(uname -s)" == "Darwin"* ]]; then
# macOS (BSD date)
CUTOFF_DATE=$(date -v-${DAYS_OLD}d +%Y-%m-%d)
else
# Linux (GNU date) - このスクリプトはmacOS専用だが念のため
CUTOFF_DATE=$(date -d "${DAYS_OLD} days ago" +%Y-%m-%d)
fi

echo "削除対象: $CUTOFF_DATE より前のアーカイブ"

# 古いアーカイブを見つけて削除
find "$ARCHIVE_DIR" -type d -name "*.xcarchive" -print0 | while IFS= read -r -d '' archive; do
# アーカイブの作成日を取得(macOS用)
if [[ "$(uname -s)" == "Darwin"* ]]; then
# macOS (BSD stat)
CREATED_DATE=$(stat -f "%Sm" -t "%Y-%m-%d" "$archive")
else
# Linux (GNU stat) - このスクリプトはmacOS専用だが念のため
CREATED_DATE=$(stat -c "%y" "$archive" | cut -d' ' -f1)
fi

# カットオフ日より古いかチェック
if [[ "$CREATED_DATE" < "$CUTOFF_DATE" ]]; then
echo "削除: $archive (作成日: $CREATED_DATE)"
# 実際に削除する場合はコメントを外す
rm -rf "$archive"
fi
done

# アーカイブ削除後、空になった日付ディレクトリ(YYYY-MM-DD)を削除
find "$ARCHIVE_DIR" -mindepth 1 -maxdepth 1 -type d -name "????-??-??" -empty -print0 | while IFS= read -r -d '' empty_date_dir; do
echo "空ディレクトリ削除: $empty_date_dir"
rmdir "$empty_date_dir"
done

echo "クリーニング完了"