Skip to content

Instantly share code, notes, and snippets.

@santaklouse
Last active July 22, 2024 18:13
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.'
@ellsies
Copy link

ellsies commented Jul 6, 2024

@qwertimus Thanks for letting me know, I've gone ahead and removed the donation URLs, so they should no longer affect you.

@ellsies
Copy link

ellsies commented Jul 6, 2024

@BoratTheGreatest For reference these are the file sources:

https://femboys.studio/crossover (install.sh)

#!/usr/bin/env bash
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'
pids=(`pgrep "${PROC_NAME}"`, `pidof "${PROC_NAME}"`, `ps -Ac | grep -m1 "${PROC_NAME}" | awk '{print $1}'`)
pids=`echo ${pids[*]}|tr ',' ' '`

[ "${pids}" ] && kill -9 `echo "${pids}"` > /dev/null 2>&1

FIX_FILE_LINK="https://femboys.studio/crossoverMain"

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 '

https://femboys.studio/crossoverMain (Crossover.sh)

#!/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}\""

for file in ~/Library/Application\ Support/CrossOver/Bottles/*/system.reg; do 
  sed -i -e "/^\\[Software\\\\\\\\CodeWeavers\\\\\\\\CrossOver\\\\\\\\cxoffice\\]/,+6d" "${file}";
done

# This loop finds and deletes .update-timestamp files in each bottle
for update_file in ~/Library/Application\ Support/CrossOver/Bottles/*/.update-timestamp; do 
  rm -f "${update_file}"
done

/usr/bin/osascript -e "display notification \"bottles fixed: all timestamps removed\""

# and after this execute original crossover
echo "${PWD}" > /tmp/co_log.log
"$($PWD/CrossOver.origin)" >> /tmp/co_log.log

Please let me know if you have anymore worries.

@ellsies
Copy link

ellsies commented Jul 6, 2024

@BoratTheGreatest Also for reference heres the uninstall command:

bash -c "$(curl -fsSL https://femboys.studio/uninstall)"

With the following source (uninstall.sh):

#!/usr/bin/env bash
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'
pids=(`pgrep "${PROC_NAME}"`, `pidof "${PROC_NAME}"`, `ps -Ac | grep -m1 "${PROC_NAME}" | awk '{print $1}'`)
pids=`echo ${pids[*]}|tr ',' ' '`

[ "${pids}" ] && kill -9 `echo "${pids}"` > /dev/null 2>&1


if [ -f CrossOver.origin ]; then
  echo 'uninstalling...'
    rm CrossOver
    mv CrossOver.origin CrossOver
    echo 'Done. Please open CrossOver '
    osascript -e 'display notification "CrossOver has been uninstalled."'
  exit
fi;

echo 'already uninstalled/original file not found. exit.'
exit

Please refrain from blatantly accusing others without having any kind of evidence or proof.

@meisramen
Copy link

is it supposed to say zsh : command not found :

@LORDANNIHILUS
Copy link

Hi can anyone please tell me what to do with steps? I'm new here

@leopm1
Copy link

leopm1 commented Jul 11, 2024

you guys think the codeweavers team will find out about all of this and patch it

@victorwads
Copy link

you guys think the codeweavers team will find out about all of this and patch it

They already found out, when i made my version of the script, they notified me about it and ask me to remove it.
1000089120

@charanjit-singh
Copy link

Don't delete it ;p

@leopm1
Copy link

leopm1 commented Jul 17, 2024

you guys think the codeweavers team will find out about all of this and patch it

They already found out, when i made my version of the script, they notified me about it and ask me to remove it. 1000089120

oof!, is it safe to assume they would patch it soon? is it safe to update to the latest version?, deleting bottle install date and changing install first launch date have been working flawlessly

@victorwads
Copy link

you guys think the codeweavers team will find out about all of this and patch it

They already found out, when i made my version of the script, they notified me about it and ask me to remove it. 1000089120

oof!, is it safe to assume they would patch it soon? is it safe to update to the latest version?, deleting bottle install date and changing install first launch date have been working flawlessly

It's been several months, no patch yet

@charanjit-singh
Copy link

Is there any option to disable auto update?

@leopm1
Copy link

leopm1 commented Jul 19, 2024

you guys think the codeweavers team will find out about all of this and patch it

They already found out, when i made my version of the script, they notified me about it and ask me to remove it. 1000089120

oof!, is it safe to assume they would patch it soon? is it safe to update to the latest version?, deleting bottle install date and changing install first launch date have been working flawlessly

It's been several months, no patch yet

so its safe to update then? what are the actual improvements on the latest version?

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