转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn]
如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~
以这个电脑音频频谱显示工具为例:https://github.com/1061700625/SpectraTray
使用Swift

不需要Apple Develop ID,推荐!
原理是通过swift来做一个启动器。
0、准备干净的环境。
bash
python -m venv tray
source tray/bin/activate
pip install -i https://pypi.org/simple pystray pillow numpy SoundCard pyobjc
1、创建原生启动器 App。
bash
mkdir -p SpectraTray.app/Contents/{MacOS,Resources}
mkdir -p SpectraTray.app/Contents/Resources/pysrc
cp app.py SpectraTray.app/Contents/Resources/pysrc/
cp -R tray SpectraTray.app/Contents/Resources/tray
cp SpectraTray.ico SpectraTray.app/Contents/Resources/
2、写 Swift 启动器。
bash
cat > main.swift <<'SWIFT'
import Foundation
import AVFoundation
func runPython() {
let bundleURL = Bundle.main.bundleURL
let py = bundleURL.appendingPathComponent("Contents/Resources/tray/bin/python3").path
let script = bundleURL.appendingPathComponent("Contents/Resources/pysrc/app.py").path
let task = Process()
task.executableURL = URL(fileURLWithPath: py)
task.arguments = [script]
// 完全后台(不弹终端)
task.standardOutput = FileHandle.nullDevice
task.standardError = FileHandle.nullDevice
do { try task.run() } catch { }
exit(0)
}
// 先触发一次麦克风权限(允许后 python 才能录到 BlackHole)
AVCaptureDevice.requestAccess(for: .audio) { _ in
runPython()
}
RunLoop.main.run()
SWIFT
swiftc main.swift -o SpectraTray.app/Contents/MacOS/SpectraTray
3、写 Info.plist。
bash
cat > SpectraTray.app/Contents/Info.plist <<'PLIST'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleName</key><string>SpectraTray</string>
<key>CFBundleDisplayName</key><string>SpectraTray</string>
<key>CFBundleIdentifier</key><string>local.spectratray</string>
<key>CFBundleExecutable</key><string>SpectraTray</string>
<key>CFBundlePackageType</key><string>APPL</string>
<key>CFBundleShortVersionString</key><string>0.0.2</string>
<key>CFBundleVersion</key><string>1</string>
<key>CFBundleIconFile</key><string>SpectraTray.ico</string>
<key>LSBackgroundOnly</key><true/>
<key>NSMicrophoneUsageDescription</key><string>用于捕获系统音频(如 BlackHole)并显示实时频谱</string>
<key>LSApplicationCategoryType</key><string>public.app-category.utilities</string>
</dict>
</plist>
PLIST
4、去掉 quarantine。
bash
xattr -dr com.apple.quarantine SpectraTray.app
5、刷新图标。
bash
touch SpectraTray.app
6、启动 SpectraTray.app