Phase 0: Repo-Gerüst und vier Verifikations-Spikes
Vier Annahmen des Plans vor jedem Implementierungscode geprüft:
A (SMC): Lüftersteuerung bestätigt — F0md/F1md (klein!) als Auto/Manuell-
Umschalter, F0Tg als Ziel, Grenzen aus F0Mn/F0Mx. SMC-Integer sind
little-endian, nicht big-endian wie im verbreiteten Intel-Beispielcode.
Ladelimit: CHWA/CH0B/CH0C/bfE0/bfF0 existieren auf Mac17,9 nicht.
Key noch nicht identifiziert, deshalb smc-diff.sh für eine
Differenzmessung ohne jeden Schreibzugriff.
B (Media): mediaremote-adapter läuft unter 26.6.1, aus dem Quellcode gebaut.
Liefert vollständige Metadaten inkl. Cover aus Google Chrome — der
Fall, den AppleScript nicht erreicht.
C (Audio): Process Tap + privates Aggregate-Device liefern echte Samples
(469 Callbacks/5 s, 0 stille Puffer). Konflikt gefunden: SoundSource
6.1.1 mit ARK.driver ist bereits installiert.
D (Group): App-Group-Container ist aus einem nicht-sandboxed Prozess erreichbar.
Damit trägt die Sandbox-Entscheidung, die Bridge-App entfällt.
Spikes sind Wegwerfcode zur Verifikation, kein Produktionscode.
This commit is contained in:
74
Spikes/build-mediaremote-adapter.sh
Executable file
74
Spikes/build-mediaremote-adapter.sh
Executable file
@@ -0,0 +1,74 @@
|
||||
#!/bin/bash
|
||||
# Spike B — mediaremote-adapter aus dem Quellcode bauen (ohne cmake)
|
||||
#
|
||||
# Repliziert das CMakeLists.txt des Projekts mit clang. Erzeugt das
|
||||
# Framework-Bundle, das die Perl-Trampolin-Datei per DynaLoader lädt.
|
||||
#
|
||||
# Quelle: https://github.com/ungive/mediaremote-adapter (BSD-3-Clause)
|
||||
|
||||
set -euo pipefail
|
||||
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
|
||||
|
||||
SRC="${SRC:-/tmp/mra}"
|
||||
OUT="${OUT:-/tmp/mra-build}"
|
||||
NAME=MediaRemoteAdapter
|
||||
FW="$OUT/$NAME.framework"
|
||||
|
||||
[[ -d "$SRC" ]] || { echo "Quellen fehlen unter $SRC" >&2; exit 1; }
|
||||
|
||||
rm -rf "$OUT"
|
||||
mkdir -p "$FW/Versions/A/Headers" "$FW/Versions/A/Resources"
|
||||
|
||||
SOURCES=(
|
||||
"$SRC"/src/adapter/{env,get,globals,keys,now_playing,repeat,seek,send,shuffle,speed,stream,test}.m
|
||||
"$SRC"/src/private/MediaRemote.m
|
||||
"$SRC"/src/utility/{Debounce,helpers}.m
|
||||
)
|
||||
|
||||
echo "→ Framework-Binary"
|
||||
xcrun clang -dynamiclib -fobjc-arc -fvisibility=default -O2 \
|
||||
-arch arm64 \
|
||||
-I"$SRC/include" -I"$SRC/src" \
|
||||
-framework Foundation -framework AppKit -framework UniformTypeIdentifiers \
|
||||
-install_name "@rpath/$NAME.framework/Versions/A/$NAME" \
|
||||
-o "$FW/Versions/A/$NAME" \
|
||||
"${SOURCES[@]}"
|
||||
|
||||
cp "$SRC/include/$NAME.h" "$FW/Versions/A/Headers/"
|
||||
|
||||
cat > "$FW/Versions/A/Resources/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>CFBundleExecutable</key><string>$NAME</string>
|
||||
<key>CFBundleIdentifier</key><string>com.vandenbe.$NAME</string>
|
||||
<key>CFBundleName</key><string>$NAME</string>
|
||||
<key>CFBundlePackageType</key><string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key><string>0.1</string>
|
||||
<key>CFBundleVersion</key><string>0.1.0</string>
|
||||
</dict>
|
||||
</plist>
|
||||
PLIST
|
||||
|
||||
ln -sf A "$FW/Versions/Current"
|
||||
ln -sf "Versions/Current/$NAME" "$FW/$NAME"
|
||||
ln -sf Versions/Current/Headers "$FW/Headers"
|
||||
ln -sf Versions/Current/Resources "$FW/Resources"
|
||||
|
||||
echo "→ Test-Client"
|
||||
xcrun clang -fobjc-arc -O2 -arch arm64 \
|
||||
-I"$SRC/src/test" \
|
||||
-framework Foundation -framework MediaPlayer \
|
||||
-o "$OUT/${NAME}TestClient" \
|
||||
"$SRC"/src/test/{main,NowPlayingTest}.m
|
||||
|
||||
echo "→ ad-hoc signieren"
|
||||
codesign --force --deep --sign - "$FW"
|
||||
codesign --force --sign - "$OUT/${NAME}TestClient"
|
||||
|
||||
cp "$SRC/bin/mediaremote-adapter.pl" "$OUT/"
|
||||
|
||||
echo
|
||||
echo "Fertig: $OUT"
|
||||
ls -la "$OUT"
|
||||
Reference in New Issue
Block a user