Files
2025-11-30 08:48:20 +08:00

117 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
# Final iPhone Screenshot Script
# Usage: ./ios_screenshot.sh [output_path]
OUTPUT_PATH="${1:-screenshot.png}"
echo "📱 Taking iPhone screenshot..."
# Record timestamp before taking screenshot
BEFORE_TIMESTAMP=$(date +%s)
DESKTOP_PATH="$HOME/Desktop"
# Check if device is connected
DEVICE_COUNT=$(xcrun devicectl list devices 2>/dev/null | grep -c "connected")
if [ "$DEVICE_COUNT" -eq 0 ]; then
echo "❌ No connected iOS devices found"
echo "Please connect your iPhone via USB and ensure it's trusted"
exit 1
fi
# Click button 3 (Take Screenshot)
APPLESCRIPT_RESULT=$(osascript -e '
tell application "Xcode"
activate
delay 0.5
end tell
tell application "System Events"
tell process "Xcode"
keystroke "2" using {shift down, command down}
delay 1.5
try
set allElements to entire contents of window 1
set buttonCount to 0
repeat with element in allElements
try
if class of element is button then
set buttonCount to buttonCount + 1
if buttonCount = 3 then
click element
return "clicked_button_3"
end if
end if
end try
end repeat
return "button_3_not_reached"
on error e
return "error: " & e
end try
end tell
end tell')
if [[ "$APPLESCRIPT_RESULT" == "clicked_button_3" ]]; then
# Wait for screenshot to be saved
sleep 1
# Look for screenshots created after our timestamp (within 30 seconds)
AFTER_TIMESTAMP=$((BEFORE_TIMESTAMP + 30))
VALID_SCREENSHOTS=()
for screenshot in "$DESKTOP_PATH"/Screen*Shot*.png "$DESKTOP_PATH"/Screen*shot*.png "$DESKTOP_PATH"/Screenshot*.png; do
if [ -f "$screenshot" ]; then
FILE_TIMESTAMP=$(stat -f %B "$screenshot" 2>/dev/null)
if [ -z "$FILE_TIMESTAMP" ] || [ "$FILE_TIMESTAMP" -eq 0 ]; then
FILE_TIMESTAMP=$(stat -f %m "$screenshot" 2>/dev/null)
fi
if [ "$FILE_TIMESTAMP" -ge "$BEFORE_TIMESTAMP" ] && [ "$FILE_TIMESTAMP" -le "$AFTER_TIMESTAMP" ]; then
VALID_SCREENSHOTS+=("$screenshot:$FILE_TIMESTAMP")
fi
fi
done
if [ ${#VALID_SCREENSHOTS[@]} -eq 0 ]; then
echo "❌ No new screenshot found"
exit 1
fi
# Get the most recent screenshot
NEWEST_SCREENSHOT=""
NEWEST_TIMESTAMP=0
for screenshot_info in "${VALID_SCREENSHOTS[@]}"; do
screenshot_path="${screenshot_info%:*}"
timestamp="${screenshot_info#*:}"
if [ "$timestamp" -gt "$NEWEST_TIMESTAMP" ]; then
NEWEST_TIMESTAMP="$timestamp"
NEWEST_SCREENSHOT="$screenshot_path"
fi
done
# Copy to desired location
cp "$NEWEST_SCREENSHOT" "$OUTPUT_PATH"
if [ $? -eq 0 ]; then
echo "✅ Screenshot saved to: $OUTPUT_PATH"
# Auto-delete original if it's recent (within 10 seconds)
CURRENT_TIME=$(date +%s)
TIME_DIFF=$((CURRENT_TIME - NEWEST_TIMESTAMP))
if [ "$TIME_DIFF" -le 10 ]; then
rm "$NEWEST_SCREENSHOT"
fi
else
echo "❌ Failed to copy screenshot"
exit 1
fi
else
echo "❌ Failed to take screenshot: $APPLESCRIPT_RESULT"
exit 1
fi