Skip to content

Instantly share code, notes, and snippets.

@daredoes
Created February 26, 2026 04:55
Show Gist options
  • Select an option

  • Save daredoes/eac8c97bcdead7c55cffc5d9684caeec to your computer and use it in GitHub Desktop.

Select an option

Save daredoes/eac8c97bcdead7c55cffc5d9684caeec to your computer and use it in GitHub Desktop.
unlimited CrossOver 24 trial (MacOS) (local) (cron)

๐Ÿ›ก๏ธ CrossOver Trial Auto-Reset (Local & Secure)

Based on the following script

This script automates the trial reset for CrossOver on macOS. Unlike other versions found online, this script is 100% self-contained and does not connect to any external URLs.

๐Ÿ”’ Security Audit

  • No "Phone Home": Removed all curl and wget commands. No data is sent or received from the internet.
  • Local Execution: During installation, the script copies its own local code (cp "$0") to your application folder.
  • Transparent: No hidden binaries or obfuscated code. You can read every line of the logic right here in this Gist.
  • Non-Invasive: Uses standard macOS crontab and defaults commands.

๐Ÿš€ Quick Start

1. Download the Script

Save the crossover_reset.sh file from this Gist to your Downloads folder.

2. Open Terminal

Press Cmd + Space, type Terminal, and hit Enter.

3. Make the Script Executable

Copy and paste the following command and press Enter:

chmod +x ~/Downloads/crossover_reset.sh

4. Install the Auto-Reset

Run the installer to set up the weekly automated reset:

~/Downloads/crossover_reset.sh install

๐Ÿ› ๏ธ Commands

Once installed, the script lives in ~/CrossOverLicence/main.sh. You can manage it with these commands:

Command Action
install Copies the script to your home folder and schedules a weekly reset.
run Manually triggers a trial reset immediately.
uninstall Completely removes the script and the scheduled task from your system.

โ“ How it Works

  • Persistence: It adds a single entry to your crontab (the built-in macOS task scheduler) to run every Sunday at midnight.
  • The Reset: It updates the FirstRunDate in the CrossOver preferences and clears the license registration flags within your existing Bottles.
  • Verification: You can verify the scheduled task at any time by typing crontab -l in your Terminal.

โš ๏ธ Troubleshooting

If a specific app within a Bottle still shows a trial pop-up:

  1. Open Terminal.
  2. Run the script manually: ~/CrossOverLicence/main.sh run
  3. Restart CrossOver.
#!/bin/bash
# Configuration
FOLDER_NAME="CrossOverLicense"
INSTALL_PATH="$HOME/$FOLDER_NAME/main.sh"
BOTTLES_PATH="$HOME/Library/Application Support/CrossOver/Bottles"
# 1. The Core Logic
# This function resets the trial by updating the system plist and cleaning bottle registries.
execute_logic() {
echo "Renewing trial..."
local date_str=$(date +"%Y-%m-%d %H:%M:%S")
# Reset global trial dates
defaults write com.codeweavers.CrossOver FirstRunDate -date "$date_str"
defaults write com.codeweavers.CrossOver SULastCheckTime -date "$date_str"
# Reset individual bottles
if [ -d "$BOTTLES_PATH" ]; then
find "$BOTTLES_PATH" -name "system.reg" -maxdepth 2 | while read -r reg_file; do
local bottle_dir=$(dirname "$reg_file")
rm -f "$bottle_dir"/.version "$bottle_dir"/.update-timestamp
# Clean the license section from system.reg using sed
sed -i.bak '/^\[Software\\+CodeWeavers\\+CrossOver\\+cxoffice\]/,/^$/d' "$reg_file"
echo "Reset bottle: $(basename "$bottle_dir")"
done
else
echo "No bottles found at default path."
fi
}
# 2. The Installer
# Creates a local copy and adds a entry to the user's crontab.
install_cron() {
echo "Installing local script and cron job..."
mkdir -p "$HOME/$FOLDER_NAME"
# Copy THIS file to the permanent location
cp "$0" "$INSTALL_PATH"
chmod +x "$INSTALL_PATH"
# Update Crontab: Removes old entries for this script and adds a new one (runs every Sunday)
#
(crontab -l 2>/dev/null | grep -v "$FOLDER_NAME"; echo "0 0 * * 0 \"$INSTALL_PATH\" run") | crontab -
echo "-------------------------------------------------------"
echo "SUCCESS: Script installed to $INSTALL_PATH"
echo "CRON: Scheduled to run every Sunday at midnight."
echo "To verify, run: crontab -l"
}
# 3. The Uninstaller
uninstall() {
crontab -l | grep -v "$FOLDER_NAME" | crontab -
rm -rf "$HOME/$FOLDER_NAME"
echo "Uninstalled and cron job removed."
}
# Execution Switch
case "$1" in
"run") execute_logic ;;
"install") install_cron ;;
"uninstall") uninstall ;;
*)
echo "Usage: ./crossover_reset.sh {install|uninstall|run}"
echo "Example: Run './crossover_reset.sh install' to set up the weekly auto-reset."
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment