聲明

如果覺得CrossOver有幫助到你的話,請購買支持,好的軟體需要足夠的資金才能持續下去!!

前言

最近因為入手了 Vision Pro,順手也買台 MacBook Air,由於需要陪T小姐玩遊戲,所以久違的研究了一下如何在 MacOS 中玩遊戲的方法。

基本方案大致上都是透過 WINE 這個歷史悠久的東西,它能夠跨平台執行 Windows 的 Software,不過使用起來十分麻煩,對每個軟體的支援度有不同的差異,為了能夠執行一個軟體,通常需要若干不同努力。這時候就出現了 CorssOver
Whisky 這一類的APP,會針對常見的遊戲、APP做好基礎的設定,降低上手的難度。

選擇 Whisky?CrossOver?

Whisky 是目前比較活躍的一個開源 App,不但免費,而且社群也有很多好心人會幫助你,而 CrossOver 則提供專人服務,但是是收費的軟體。我一開始是選擇 Whisky,但是 Steam 一直裝不起來,換用 CrossOver 後幾乎可以說是一鍵安裝,不愧是 WINE 的金主爸爸。

使用方法

取得方式建議直接從官網下載,可以免費14天試用,目前版本是 24.0.3,切記不要在來路不明的地方下載。

雖然14天試用已經很佛心了,然而還是不夠用。這14天中我只測試了 Steam 跟 Raft,我自己是還想試看看 霍格華滋 能不能玩,可惜試用期已經結束了,我的打算是如果它不能支援,我就會選擇繼續努力用 Whisky,反之,我就會購買。所以,再次使用對我而言至關重要,於是動了破解的念頭。

破解 CrossOver 的主要思考方向就是找出紀錄時間的方式,重新改成最新的時間。稍微搜尋了一下,還真在 GitHub 上被我找到了方法,加以修改一下就能用了。

破解過程

  • 取得當前時間
  • 改寫 plist 中的時間紀錄
    • ~/Library/Preferences/com.codeweavers.CrossOver.plist
    • ~/Library/Preferences/com.codeweavers.CrossOver.plist
  • 重設 bottles 的時間
  • 改寫 bottle 中的 Registry

順手修改了下 Script,這樣每次執行就會自動更改時間。Script 如下

shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/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

# 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

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

使用方法

  1. 複製 Script,另存新檔,檔名叫 crossover
  2. 用 Chmod +x 設定為可執行
    plaintext
    1
    2
    3
    4
    感謝好心人石亜哲補充
    在該文件底下,開啟終端機
    輸入 chmod +x crossover 即可(這時候文件就變成可執行檔了)
    將crossover複製到 應用程式/CrossOver.app/Contents/MacOS 替換
  3. 將 /Applications/CrossOver.app/Contents/MacOS/CrossOver 另存為 CrossOver.origin
  4. 複製 Script 到 /Applications/CrossOver.app/Contents/MacOS/