Confirm that your Mac is Apple Silicon and runs macOS 14 or later.
- Confirm that the remote is paired in System Settings → Bluetooth.
- Hold the remote Home and Menu buttons together to put it back in pairing mode.
- Confirm that its name is MI RC, Xiaomi Bluetooth Remote 2 Pro, or 小米蓝牙语音遥控器.
- Left-click the SayAll menu bar icon and choose Reconnect Now.
- If the status does not change, quit and relaunch SayAll, then confirm that Bluetooth access is still granted.
The app connects only to the supported Xiaomi Bluetooth remote. It does not fuzzy-match other Xiaomi Bluetooth devices.
- Open Connection & Voice and confirm that Bluetooth is connected.
- Choose Refresh Audio Devices, then select MiRemoteV 2ch or another available loopback device.
- Choose Send 1-Second Test Tone. If the control is unavailable, select the audio device again.
- In QuickTime Player, create a new audio recording with the same device and hold the remote voice button while watching the input level.
- Confirm that the target app also uses the same device as its microphone.
SayAll never changes system default input or output, so it and the target app must use the same device.
This usually means the remote and audio path work, but Doubao is not using an ordinary virtual audio device.
- Install MiRemoteV 2ch from Install SayAll.pkg in the DMG.
- Quit Doubao completely and reopen it.
- In SayAll, choose Refresh Audio Devices and select MiRemoteV 2ch.
- Click an editable text field so that its insertion cursor is visible, then hold the remote voice button.
For details, read the Doubao Input Method Compatibility Guide.
- Open Button Mapping and enable Custom Button Controls.
- Grant Input Monitoring and Accessibility from the Permissions page in that order.
- Quit and reopen SayAll so macOS applies newly granted permissions.
- Return to Button Mapping and press a physical button. Its matching button should highlight and its mapping row should be selected.
When custom mapping is disabled, macOS may still handle some remote buttons as a regular Bluetooth keyboard, but SayAll mappings do not run.
SayAll uses the button connection method allowed by the current system and reduces duplicate original system actions where possible.
Try the following:
- Confirm that Input Monitoring and Accessibility are both granted.
- Restore default button mappings and try again.
- Quit other utilities that rewrite keyboard or media keys.
- Right-click the menu bar icon, choose Show Logs, and record the button and state at the time of the issue.
The Menu action uses the native macOS context-menu key rather than Shift-F10. If an alert sound remains, report the physical button, current mapping, foreground app, and the button status shown by SayAll.
The Fn function applies only to the supported Xiaomi Bluetooth remote; it never changes a MacBook keyboard or other devices.
- Confirm that Bluetooth status shows a successful connection.
- Quit and relaunch SayAll so the device mapping can be applied again.
- Confirm that the remote is a Xiaomi Bluetooth Remote 2 Pro.
- Inspect Voice Trigger under Connection & Voice.
SayAll restores the remote voice-button setting that existed before launch when it quits.
Starting with v1.3.0, official releases sign the app, install/uninstall PKGs, and DMG with Developer ID identities and notarize them with Apple. If macOS still blocks installation, delete the local download, download it again from this project's GitHub Releases, and verify it with the SHA-256 manifest from the same release; do not use an untrusted copy.
Remote-Mic-<version>.dmg.sha256 lists both Apple Silicon and Intel DMGs. If you downloaded only one DMG, select its exact filename:
grep -F " Remote-Mic-<version>.dmg" \
"Remote-Mic-<version>.dmg.sha256" | shasum -a 256 -c -
If Console contains any of the following messages, the problem is not the appcast, download network, or update signature. The installed copy of Sparkle has lost executable permissions:
The remote port connection was invalidated from the updater.
Autoupdate may not have executable permissions.
failed to probe status service for com.hd838a.RemoteMic
The older 1.4.2 / 1.4.3 installer PKGs changed every regular file in the app to mode 0644 and restored executable permissions only on the main binary. This prevented Autoupdate, Updater, and both XPC services from launching. Checking again or reinstalling the same old PKG does not repair it, and a broken updater cannot update itself.
The preferred recovery is to download the latest DMG for the Mac architecture, mount it, and run its single install PKG. The Release no longer uploads the same Installer PKG again as a standalone asset; remote-management scripts should read the signed and notarized installer from the DMG. If only a remote shell is available, you can also repair the permissions directly:
sudo chmod 755 \
"/Applications/SayAll.app/Contents/MacOS/RemoteMic" \
"/Applications/SayAll.app/Contents/Frameworks/Sparkle.framework/Versions/B/Sparkle" \
"/Applications/SayAll.app/Contents/Frameworks/Sparkle.framework/Versions/B/Autoupdate" \
"/Applications/SayAll.app/Contents/Frameworks/Sparkle.framework/Versions/B/Updater.app/Contents/MacOS/Updater" \
"/Applications/SayAll.app/Contents/Frameworks/Sparkle.framework/Versions/B/XPCServices/Installer.xpc/Contents/MacOS/Installer" \
"/Applications/SayAll.app/Contents/Frameworks/Sparkle.framework/Versions/B/XPCServices/Downloader.xpc/Contents/MacOS/Downloader"
codesign --verify --deep --strict "/Applications/SayAll.app"
Remote repair does not require physical access to the Mac. Sparkle's installation confirmation UI does require an unlocked graphical session, however. Fetching the appcast successfully while the screen is locked proves only that the feed is reachable; it is not proof of a completed upgrade.
Right-click the menu bar icon and choose Show Logs. The log file is:
~/Library/Logs/RemoteMic/runtime.log
Logs do not contain voice content, Bluetooth addresses, or unique device identifiers. When reporting an issue, include macOS version, Mac chip, remote model, reproduction steps, and the relevant log excerpt.