In my previous post, I managed to get Whisky, with Apple’s Game Porting Toolkit, working on macOS Ventura without Homebrew. Here I manage to get Steam running after jumping through hoops.

I managed to download and install Steam without issue, and I assume you will get this far without guidance too, but getting Steam running is tricky. I had all the usual problems:

Blank Login Dialog

I solved this following Andrew Tsai’s instructions in his “Fix Steam login 'black screen' Game Porting Toolkit macOS” video.

This involves copying login session files from Steam on macOS to Steam x86 running in Windows via GPTK:

  • Make sure Whisky (Wine) / Steam (macOS or x86) is not running.
  • Using Finder, Go > Go to folder... and go to ~/Library/Application Support/Steam (or just open ~/Library/Application\ Support/Steam),
  • Multi-select the registry.vdf file, and the config and userdata folders, and Copy them,
  • Using Whisky, select your Bottle and click Open C Drive (or just open ~/Library/Containers/com.isaacmarovitz.Whisky/Bottles/Win10/drive_c, changing Win10 to whatever you called your Bottle),
  • Navigate to Program Files (x86)\Steam\ or wherever Steam is installed, and Paste the copied files, replacing any flies that previously existed.

If this works, then running Steam will show a “Connecting to steam account” dialog instead. But...

SteamWebHelper Crash

Soon you’ll get the next error, a “Program Error” dialog because “steamwebhelper.exe encountered a serious problem and needs to close.”

SteamWebHelper crash

According to this CrossOver Support forum post, the solution is to run steam.exe -allosarches -cef-force-32bit

Whisky configuration with steam.exe Arguments

Steam Blank Page

If you get this far, you’ll see Steam’s main window is blank! This is normally where a webview shows the Store page. Clicking the Library or Community will not change the blank screen.

The solution is to go to the menu View > Small Mode, and you’ll see your game library listed properly!

Steam Small Mode

Double-click to install, and once that’s done, double-click to run, and cross your fingers that the game works in Wine with GPTK. Here is Dorfromantik, which is a Windows-only game, running on macOS.

Dorfromantik running on macOS via Game Porting Toolkit

Preventing Steam Updates

Some users also report issues with steam updates. In the console, I noticed Steam got stuck after Background update loop checking for update and Downloading manifest messages.

An old Steam Community post led me to disable updates by creating a file in the Steam (x86) folder called steam.cfg with this line:

BootStrapperInhibitAll=Enable

Scripting

Living on the edge... a script to run Wine in the Whisky app from Terminal, with common commands automated (like kill and stop) and a shortcut to steam.exe with the workaround. The usual disclaimers about my unsafe and uncommented code... i.e. “don’t” and / or “good luck.”

Don’t blindly download or run anything, including this script!

#!/bin/bash
whisky=/Applications/Whisky.app/Contents/Resources/Libraries/Wine/bin
prefix=~/Library/Containers/com.isaacmarovitz.Whisky/Bottles/Win10
esync=1
hud=1
is_function() { declare -F "$1" > /dev/null; }
help() {
 w=$(basename $0)
 echo "$w ps|stop|kill  - show wine processes, or stop / kill wine"
 echo "$w prefix|drivec - open Finder to \$WINEPREFIX or \$WINEPREFIX/drive_c"
 echo "$w steam         - run steam.exe -allosarches -cef-force-32bit"
 echo "$w [command]     - run any Windows executable, e.g. explorer, winecfg, regedit, cmd"
}
ps() {
 /bin/ps -e | grep -E 'wine(64|server)' | sed 's,/Users/.*/com.isaacmarovitz.Whisky/Libraries/Wine/bin/,,'
}
stop() {
 echo Stop wine
 cd "$whisky" 
 ./wineserver -k9
}
kill() {
 echo Kill Wine
 killall win64server wine64-preloader
}
prefix(){
 open "$prefix"
}
drivec() {
 open "$prefix/drive_c"
}
steam() {
 run "C:\Program Files (x86)\Steam\steam" -allosarches -cef-force-32bit
}
run() {
 echo Run "$@"
 cd "$whisky"
 WINEPREFIX="$prefix" WINEESYNC="$esync" MTL_HUD_ENABLED="$hud" ./wine64 "$@"
}
echo WINEPREFIX=$prefix
if type "$1" &>/dev/null; then
 "$1"
else
 run "$@"
fi

Updated 28 June 23: Small script improvements
Updated 16 July 23: Ditto, to remove redundant info from ps