Skip to content

Instantly share code, notes, and snippets.

@santaklouse
Last active April 18, 2025 15:30
Show Gist options
  • Save santaklouse/a137ee51692b74d4cf2cc1bb68ed64ef to your computer and use it in GitHub Desktop.
Save santaklouse/a137ee51692b74d4cf2cc1bb68ed64ef to your computer and use it in GitHub Desktop.
unlimited CrossOver trial (MacOS)

Run it in console for permanent install :

bash -c "$(curl -fsSL https://gist.github.com/santaklouse/a137ee51692b74d4cf2cc1bb68ed64ef/raw/install.sh?token=$(date +%s))"

After install script will fix crossover as well as expired bottles (Thanks to @djsmax).

#!/usr/bin/env bash
# checck if pidof exists
PIDOF="$(which pidof)"
# and if not - install it
(test "${PIDOF}" && test -f "${PIDOF}") || brew install pidof
# find app in default paths
CO_PWD=~/Applications/CrossOver.app/Contents/MacOS
test -d "${CO_PWD}" || CO_PWD=/Applications/CrossOver.app/Contents/MacOS
test -d "${CO_PWD}" || (echo 'unable to detect app path. exiting...' && exit)
PWD="${CO_PWD}"
cd "${PWD}"
PROC_NAME='CrossOver'
# get all pids of CrossOver
pids=(`pgrep "${PROC_NAME}"`, `pidof "${PROC_NAME}"`, `ps -Ac | grep -m1 "${PROC_NAME}" | awk '{print $1}'`)
pids=`echo ${pids[*]}|tr ',' ' '`
# kills CrossOver process if it is running
[ "${pids}" ] && kill -9 `echo "${pids}"` > /dev/null 2>&1
# wait until app finish
sleep 3
# make the current date RFC3339-encoded string representation in UTC time zone
DATETIME=`date -u -v -3H '+%Y-%m-%dT%TZ'`
# modify time in order to reset trial
plutil -replace FirstRunDate -date "${DATETIME}" ~/Library/Preferences/com.codeweavers.CrossOver.plist
plutil -replace SULastCheckTime -date "${DATETIME}" ~/Library/Preferences/com.codeweavers.CrossOver.plist
# show tooltip notification
/usr/bin/osascript -e "display notification \"trial fixed: date changed to ${DATETIME}\""
# reset all bottles
for file in ~/Library/Application\ Support/CrossOver/Bottles/*/.{eval,update-timestamp}; do rm -rf "${file}";done
# and after this execute original crossover
echo "${PWD}" > /tmp/co_log.log
"$($PWD/CrossOver.origin)" >> /tmp/co_log.log
#!/usr/bin/env bash
# find app in default paths
CO_PWD=~/Applications/CrossOver.app/Contents/MacOS
test -d "${CO_PWD}" || CO_PWD=/Applications/CrossOver.app/Contents/MacOS
test -d "${CO_PWD}" || (echo 'unable to detect app path. exiting...' && exit)
PWD="${CO_PWD}"
cd "${PWD}"
PROC_NAME='CrossOver'
# get all pids of CrossOver
pids=(`pgrep "${PROC_NAME}"`, `pidof "${PROC_NAME}"`, `ps -Ac | grep -m1 "${PROC_NAME}" | awk '{print $1}'`)
pids=`echo ${pids[*]}|tr ',' ' '`
# kills CrossOver process if it is running
[ "${pids}" ] && kill -9 `echo "${pids}"` > /dev/null 2>&1
TIMESTAMP=$(date +%s)
FIX_FILE_LINK="https://gist.github.com/santaklouse/a137ee51692b74d4cf2cc1bb68ed64ef/raw/CrossOver.sh?token=${TIMESTAMP}"
if [ -f CrossOver.origin ]; then
echo 'already installed. update and exit.'
echo "$(curl -fsSL ${FIX_FILE_LINK})" > CrossOver
exit
fi;
test -f CrossOver.origin || mv CrossOver CrossOver.origin
echo "$(curl -fsSL ${FIX_FILE_LINK})" > CrossOver
chmod +x CrossOver
echo 'Done. Please open CrossOver '
#!/usr/bin/env bash
# find app in default paths
CO_PWD=~/Applications/CrossOver.app/Contents/MacOS
test -d "${CO_PWD}" || CO_PWD=/Applications/CrossOver.app/Contents/MacOS
test -d "${CO_PWD}" || (echo 'unable to detect app path. exiting...' && exit)
PWD="${CO_PWD}"
cd "${PWD}"
PROC_NAME='CrossOver'
# get all pids of CrossOver
pids=(`pgrep "${PROC_NAME}"`, `pidof "${PROC_NAME}"`, `ps -Ac | grep -m1 "${PROC_NAME}" | awk '{print $1}'`)
pids=`echo ${pids[*]}|tr ',' ' '`
# kills CrossOver process if it is running
[ "${pids}" ] && kill -9 `echo "${pids}"` > /dev/null 2>&1
if [ -f CrossOver.origin ]; then
echo 'original file found. Roll it back and exit.'
mv CrossOver.origin CrossOver
exit
fi;
echo 'original file not found.'
@carlos-lugo
Copy link

I would also recommend reading the thread on here to see specifics of how crossover's license checks work instead of relying on AI, as your solution is flawed in many ways.

This looks like straight ChatGPT/LLM/chat bot code. Why would you put emojis/emoticons in a script?

Actually, yes, it's straight code from a chatbot. I didn't have much time to understand the specifics of how Crossover's license checks work (sorry about that), and the script was failing without any error message. I instructed the chatbot to add debug messages, and for some unknown reason, the brew install pidof command was failing. The chatbot suggested using the MacBook's native command, and I agreed. After that, the script was working fine.

By the way, the emojis appear in the debug messages in the terminal when running the script. I didn’t ask the chatbot for emojis, but it’s actually quite cool.

@xyanid2015
Copy link

repo updated

I have 2 bottles, Diablo IV and POE2. However, only Diablo IV bottle was resetted, and POE2 not.

@2011eric
Copy link

I'm using version 2.0.7. It turns out that I have to convert the binary plist to XML and then convert it back to make the script work.

# modify time in order to reset trial
plutil -convert xml1  ~/Library/Preferences/com.codeweavers.CrossOver.plist
plutil -replace FirstRunDate -date "${DATETIME}" ~/Library/Preferences/com.codeweavers.CrossOver.plist
plutil -replace SULastCheckTime -date "${DATETIME}" ~/Library/Preferences/com.codeweavers.CrossOver.plist
plutil -convert binary1  ~/Library/Preferences/com.codeweavers.CrossOver.plist

@5taras
Copy link

5taras commented Feb 28, 2025

Excuse me, do u know how to do that in Linux?

@VoidicChaos
Copy link

@wiefix
Copy link

wiefix commented Mar 18, 2025

For me it works perfectly when I close CrossOver and delete this file ~/Library/Preferences/com.codeweavers.CrossOver.plist . Then I launch it and it shows 14 days left again...

@WoodWithFire
Copy link

Can someone tell me how to use this? When I copy the code in README.sh and run it in console, it just said "no matches found: https://gist.github.com/santaklouse/a137ee51692b74d4cf2cc1bb68ed64ef/raw/install.sh?token=1742667277".
Just want to know how to get it work.

@brettalton
Copy link

@-iMac ~ % bash -c "$(curl -fsSL https://gist.github.com/santaklouse/a137ee51692b74d4cf2cc1bb68ed64ef/raw/install.sh?token=$(date +%s))" zsh: no matches found: https://gist.github.com/santaklouse/a137ee51692b74d4cf2cc1bb68ed64ef/raw/install.sh?token=1742190633

I put this in the terminal right? How can I fix this?

The code needs to be properly escaped. Hopefully @santaklouse fixes this soon. This is the fix,

bash -c "$(curl -fsSL 'https://gist.github.com/santaklouse/a137ee51692b74d4cf2cc1bb68ed64ef/raw/install.sh?token='$(date +%s))"

@Nygosaki
Copy link

just follow the instructions here https://github.com/Nygosaki/crossover-trial-renew

bash -c "$(curl -fsSL https://raw.githubusercontent.com/Nygosaki/crossover-trial-renew/refs/heads/main/resetCrossoverTrial.sh)"

@WoodWithFire
Copy link

I've run both this code and Nygosaki's code, but my crossover trail didn't refresh.
Is these code not working on crossover 25, or did I miss something?

@Slay33r
Copy link

Slay33r commented Mar 29, 2025

Used it two weeks ago, but now it seems the com.codeweavers.CrossOver.plist has disappeared and the reset doesn't work any more...

@xyanid2015
Copy link

just follow the instructions here https://github.com/Nygosaki/crossover-trial-renew

bash -c "$(curl -fsSL https://raw.githubusercontent.com/Nygosaki/crossover-trial-renew/refs/heads/main/resetCrossoverTrial.sh)"

bottles are not resseted, and there is no additional instructions in your gist

@Nygosaki
Copy link

Nygosaki commented Apr 7, 2025

@WoodWithFire @Slay33r @xyanid2015
After you fully quit crossover (through activity monitor if necessary), run the script, and reopened crossover, could you send the file ~/Library/Preferences/com.codeweavers.CrossOver.plist and ~/Library/Application Support/CrossOver/Bottles/.../system.reg?

@FewJuho
Copy link

FewJuho commented Apr 8, 2025

@Nygosaki Hey, looks like they have changed folders paths or the whole system idk

➜ Documents bash -c "$(curl -fsSL https://raw.githubusercontent.com/Nygosaki/crossover-trial-renew/refs/heads/main/resetCrossoverTrial.sh)"

No CrossOver processes found.
FirstRunDate not found in plist file. Deletion successful.
grep: /Users/*****/Library/Application Support/CrossOver/Bottles/*/system.reg: No such file or directory
Bottle trial reset successful.

@Nygosaki
Copy link

Nygosaki commented Apr 9, 2025

@FewJuho hm... could you check the paths I mentioned in my prior message? If you still have access to cross over, could you click the "open C drive" button in one of your bottles and tell me the path of one of the files in there (right click, get info)?

@Nygosaki
Copy link

Nygosaki commented Apr 9, 2025

Actually, I might see the issue. @FewJuho just to verify, could you send a screenshot of the output?

@VictorSu000
Copy link

I'm using CrossOver 25.0.0.38553. I had created some bottles for test but now I already deleted all bottles. I didn't install the script, but just ran [CrossOver.sh] to modify plist file and reset bottles. However each time I started CrossOver, the FirstRunDate in plist file would be reverted and CrossOver said the trial has x remaining days (x is exactly the right number). It seems like CrossOver records the FirstRunDate somewhere else and reverts the plist file in its startup. Any idea to fix this? Thanks so much.

@FewJuho
Copy link

FewJuho commented Apr 10, 2025

Actually, I might see the issue. @FewJuho just to verify, could you send a screenshot of the output?

image

@Nygosaki
Btw I grepped for "Bottles" and there is nothing associated with CrossOver anymore

@supahfox
Copy link

just follow the instructions here https://github.com/Nygosaki/crossover-trial-renew

bash -c "$(curl -fsSL https://raw.githubusercontent.com/Nygosaki/crossover-trial-renew/refs/heads/main/resetCrossoverTrial.sh)"

bottles are not resseted, and there is no additional instructions in your gist

Seconding this issue

@Nygosaki
Copy link

Nygosaki commented Apr 11, 2025

@FewJuho @supahfox are both of you on linux?
The script was made with the macos version in mind. If you could open the C: drive of a bottle, navigate from there to base crossover directory, and then dump the entire folder into a zip and upload it here I can modify it to work on linux.
If you are using macos, please try using terminal instead.

@Thisisme222
Copy link

are both of you on linux? The script was made with the macos version in mind.
If you are using macos, please try using terminal instead.

am on macos, can confirm this happens. after running the script, crossover does not open. Notification below appears.
Screenshot 2025-04-11 at 9 12 16 PM

@FewJuho
Copy link

FewJuho commented Apr 12, 2025

Nygosaki

iam on macos sequoia rn using Iterm2, maybe paths depends on CrossOver version? (25.0.0)

@supahfox
Copy link

@FewJuho @supahfox are both of you on linux? The script was made with the macos version in mind. If you could open the C: drive of a bottle, navigate from there to base crossover directory, and then dump the entire folder into a zip and upload it here I can modify it to work on linux. If you are using macos, please try using terminal instead.

macos sequoia 15.4

@Nygosaki
Copy link

I see. Considering I've had crossover since way before 25, I am thinking that my paths might be outdated. I am currently on vacation, once I return I'll reinstall it and check things out.

@casvanluijtelaar
Copy link

casvanluijtelaar commented Apr 15, 2025

works in combination with https://github.com/Ghost420-over/crackover/blob/main/Reset_Crossover_bottles.command to update the bottles system.reg file. (had to modify both scripts to suite my setup)

@PrenSJ2
Copy link

PrenSJ2 commented Apr 15, 2025

I am on macos 15.4

all i did:

  1. give full disk access to iTerm (Terminal)
  2. brew install pidof
  3. sudo bash -c "$(curl -fsSL https://gist.github.com/santaklouse/a137ee51692b74d4cf2cc1bb68ed64ef/raw/install.sh)"

bosh 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment