Stopped working on MacOS 15.4
Stopped working on MacOS 15.4.
App was working fine until this morning, when I updated to MacOS 15.4 and now it doesn't detect or change sample rate.
Same. This and the blank settings page when launching the app are significant issues.
### Below error for this app. Looks like MacOS 15.4 has stricter permissions. LLS is not able to read the audio sample rate in the first place. Also, not sure why is this application looking for screen capture permission.
- Two equal instances have unequal identities. <type=Application identifier=application.com.vincent-neo.LosslessSwitcher.33904274.33904281 AUID=501> and <type=Application identifier=application.com.vincent-neo.LosslessSwitcher.33904274.33904281>
- Prompting policy for hardened runtime; service: kTCCServiceMicrophone requires entitlement com.apple.security.device.audio-input but it is missing for requesting={TCCDProcess: identifier=com.vincent-neo.LosslessSwitcher, pid=6885, auid=501, euid=501, binary_path=/Applications/LosslessSwitcher.app/Contents/MacOS/LosslessSwitcher},
- Prompting policy for hardened runtime; service: kTCCServiceMicrophone requires entitlement com.apple.security.device.audio-input but it is missing for accessing={TCCDProcess: identifier=com.vincent-neo.LosslessSwitcher, pid=6885, auid=501, euid=501, binary_path=/Applications/LosslessSwitcher.app/Contents/MacOS/LosslessSwitcher}, requesting={TCCDProcess: identifier=com.apple.tccd, pid=547, auid=0, euid=0, binary_path=/System/Library/PrivateFrameworks/TCC.framework/Support/tccd},
- Request message contains a target_token to accessing_process (TCCDProcess: identifier=com.vincent-neo.LosslessSwitcher, pid=6885, auid=501, euid=501, binary_path=/Applications/LosslessSwitcher.app/Contents/MacOS/LosslessSwitcher) but TCCDProcess: identifier=com.apple.audio.coreaudiod, pid=561, auid=202, euid=202, binary_path=/usr/sbin/coreaudiod is not a TCC manager for service: kTCCServiceScreenCapture.
Validated on Mac OS 15.4 beta 2. Error logs below:
Two equal instances have unequal identities. <type=Application identifier=application.com.vincent-neo.LosslessSwitcher.33905505.33905513 AUID=501> and <type=Application identifier=application.com.vincent-neo.LosslessSwitcher.33905505.33905513>
Prompting policy for hardened runtime; service: kTCCServiceMicrophone requires entitlement com.apple.security.device.audio-input but it is missing for requesting={TCCDProcess: identifier=com.vincent-neo.LosslessSwitcher, pid=1744, auid=501, euid=501, binary_path=/Applications/LosslessSwitcher.app/Contents/MacOS/LosslessSwitcher},
Prompting policy for hardened runtime; service: kTCCServiceMicrophone requires entitlement com.apple.security.device.audio-input but it is missing for accessing={TCCDProcess: identifier=com.vincent-neo.LosslessSwitcher, pid=1744, auid=501, euid=501, binary_path=/Applications/LosslessSwitcher.app/Contents/MacOS/LosslessSwitcher}, requesting={TCCDProcess: identifier=com.apple.tccd, pid=633, auid=0, euid=0, binary_path=/System/Library/PrivateFrameworks/TCC.framework/Support/tccd},
Request message contains a target_token to accessing_process (TCCDProcess: identifier=com.vincent-neo.LosslessSwitcher, pid=1744, auid=501, euid=501, binary_path=/Applications/LosslessSwitcher.app/Contents/MacOS/LosslessSwitcher) but TCCDProcess: identifier=com.apple.audio.coreaudiod, pid=645, auid=202, euid=202, binary_path=/usr/sbin/coreaudiod is not a TCC manager for service: kTCCServiceScreenCapture.
AddInstanceForFactory: No factory registered for id <CFUUID 0x600003aa9d40> F8BB1C28-BAE8-11D6-9C31-00039315CD46
Ok... This is pretty weird since LosslessSwitcher never needed the screen capture or microphone permission in the first place.
LosslessSwitcher works by reading off log entries left by the Music app
I'm sure this has something to do with new security implementation in MacOS 15.4. I explicitly gave screencapture and microphone permission to LLS, still the same issue. I tried re-signing the app forcefully, and few other tricks, all to no avail.
I love this app, hope you can find the fix the issue 😔 .
I fear that it has something to do with Music app no longer logging information necessary for the sample rate detection.
However, as I do not have a spare Mac to install a beta on, and do not wish to do so currently on my main, I will wait till 15.4 is stable, before looking into it further.
I may be able to help you triage, if you can share steps to capture the info you are after, I am happy to do it for share it here or over email
Below is the capture of logs for Apple Music app. I can see sample rate there.
➜ ~ log stream --process 1252 | grep -i "sample rate" | |--> Leaf: [FigSimpleAlternateFilter PreferredAudioFormat:0x6000078940e0 priority:750 preferredFormat:Maximum preferredMixableNumberOfChannels:2 ac3CanPassthrough:NO ec3CanPassthrough:NO atmosCanPassthrough:NO preferLossyEncodings:YES sampleRateContraints:<channel count 2: max sample rate 96000.000>] Ag== 2 -> 1: | |--> Leaf: [FigSimpleAlternateFilter PreferredAudioFormat:0x600007895340 priority:750 preferredFormat:Maximum preferredMixableNumberOfChannels:2 ac3CanPassthrough:NO ec3CanPassthrough:NO atmosCanPassthrough:NO preferLossyEncodings:YES sampleRateContraints:<channel count 2: max sample rate 96000.000>] | |--> Leaf: [FigSimpleAlternateFilter PreferredAudioFormat:0x60000b8fce70 priority:750 preferredFormat:Maximum preferredMixableNumberOfChannels:2 ac3CanPassthrough:NO ec3CanPassthrough:NO atmosCanPassthrough:NO preferLossyEncodings:YES sampleRateContraints:<channel count 2: max sample rate 96000.000>] | |--> Leaf: [FigSimpleAlternateFilter PreferredAudioFormat:0x60000b8ff800 priority:750 preferredFormat:Maximum preferredMixableNumberOfChannels:2 ac3CanPassthrough:NO ec3CanPassthrough:NO atmosCanPassthrough:NO preferLossyEncodings:YES sampleRateContraints:<channel count 2: max sample rate 96000.000>]
Try finding sampleRate: ACAppleLosslessDecoder Input format: asbdSampleRate
Below are the logs.
is it possible that apple is using a new format identifier (qlac) instead of alac and that's throwing the app off it's game?
Logs:
default 21:25:51.606718+1100 Music <<<< FAQ >>>> subaq_buildCAAudioQueue: [0x12cfcab90:0x129a9e740] R.06 Creating AudioQueue with format:'qlac', framesPerPacket:4096, sampleRate:192000
default 21:25:51.606975+1100 Music ACCPEDecoderWrapper.cpp:319 (0x6000007b2b50) Input format: 2 ch, 192000 Hz, qlac (0x00000003) 0 bits/channel, 0 bytes/packet, 4096 frames/packet, 0 bytes/frame
default 21:25:51.607043+1100 Music ACAppleLosslessDecoder.cpp:680 (0x129c6abe0) Input format: 2 ch, 192000 Hz, alac (0x00000003) from 24-bit source, 4096 frames/packet
default 21:25:51.607054+1100 Music ACAppleLosslessDecoder.cpp:683 (0x129c6abe0) Output format: 2 ch, 192000 Hz, lpcm (0x0000000C) 24-bit little-endian signed integer
default 21:25:51.608813+1100 Music ACCPEDecoderWrapper.cpp:319 (0x6000047c4ba0) Input format: 2 ch, 192000 Hz, qlac (0x00000003) 0 bits/channel, 0 bytes/packet, 4096 frames/packet, 0 bytes/frame
default 21:25:51.608870+1100 Music ACAppleLosslessDecoder.cpp:680 (0x12fa052a0) Input format: 2 ch, 192000 Hz, alac (0x00000003) from 24-bit source, 4096 frames/packet
default 21:25:51.608880+1100 Music ACAppleLosslessDecoder.cpp:683 (0x12fa052a0) Output format: 2 ch, 192000 Hz, lpcm (0x0000000C) 24-bit little-endian signed integer
default 21:25:51.610250+1100 Music <<<< FAQ >>>> subaq_buildCAAudioQueue: [0x12cfcab90:0x129a9e740] R.06 Created new AudioQueue for format:'qlac' (0x716C6163), channelsPerFrame:2, framesPerPacket:4096, sampleRate:192000 [LayoutTag: 0x00650002, Channels: 2, TimePitch (Algorithm 'tido'), UnaccompaniedByVisuals, PauseAfterConfigChange]
default 21:25:51.611798+1100 Music play> cm>> mediaFormatinfo '
Thanks. The log entries seems normal to me.
Found below when I run the app code directly instead of launching app. This is same as the message when running app directly. For some reason MacOS seems to believe that app is looking for screen capture.
Request message contains a target_token to accessing_process (TCCDProcess: identifier=com.vincent-neo.LosslessSwitcher, pid=14146, auid=501, euid=501, binary_path=/Users/sifar/Library/Developer/Xcode/DerivedData/Quality-cmfbffxtbhnwdjdrkbkiuezgojrs/Build/Products/Debug/LosslessSwitcher.app/Contents/MacOS/LosslessSwitcher) but TCCDProcess: identifier=com.apple.audio.coreaudiod, pid=611, auid=202, euid=202, binary_path=/usr/sbin/coreaudiod is not a TCC manager for service: kTCCServiceScreenCapture.
So the app doesn't work after this latest update. What's the fix?
Update: Same behavior and same error logs on Mac OS 15.4 Beta 3 that was launched this morning.
Just deleted app, updated to Seq. 15.4 today, reinstalled, opened it and cannot find a trace of it anywhere except finder. When I try to delete the app it says I can't because it is open, yet it is not functioning nor visible in dock or status bar or anywhere.
Can anyone test if things are the same for v1.0.0? (The absolute earliest release)
@vincentneo , this is interesting. The very first version is able to read the sample rate and switch. However it is always switching to the next song in queue and not for the current song. This issue was intermittent with latest build before MacOS 15.4 and latest build of app. However, with original version of app, this issue is consistent.
@sifaralways thanks. I might have an idea as to why it doesn't work in 15.4 now
@vincentneo , lovely. Any chance you can comment on fix timelines? Can I help you with fix in anyway?
v1.0.0(the first release) is working for me , its switches to the correct sample rate, I'm on 15.4 beta 4
@sifaralways
Any chance you can comment on fix timelines? Can I help you with fix in anyway?
No concrete fix timeline so far, but perhaps sometime in April or May, I will have more time to look into this.
Basically I think there are 2 things that need changes:
- v1.1 uses the private media remote API. Being a private API, things might have changed under the hood in macOS 15.4, to the extent that it no longer works the same way it currently does. This is used to trigger the sample rate check improvements in v1.1 where code can be more precisely run when music tracks change, compared to v1.0 which only actively checks the logs disregarding the actual track that is playing.
- the blank window issue/missing controls - I suspect this can only be completely fixed by either moving the SwiftUI app lifecycle back to AppKit or to reimplement the menu bar stuff on the newer SwiftUI API which may require dropping some older macOS versions.
v1.0.0(the first release) is working for me , its switches to the correct sample rate, I'm on 15.4 beta 4
do you have a link to that version 1.0?
@darren0263 you can find it here https://github.com/vincentneo/LosslessSwitcher/releases/tag/1.0.0
hey @vincentneo, now that 15.4 RC is out, will you get bandwidth to look into the issue please?
hi @vincentneo , confirming that same issue is happening on MacOS 15.5 Beta 1 as well
@darren0263 you can find it here https://github.com/vincentneo/LosslessSwitcher/releases/tag/1.0.0
Okay, thanks, just tried it and sharing that... v1.0 works on 15.4 release v1.1 doesn't, including after reinstall.
Hello everyone, ma bad for declare an issue that already exists, I haven't seen this one. I try the 1.0 version of LS and it works, thanks for the tips.
when can we expect a fixed version?
Anyone, have you tried the latest version of LS 1.1 on macOS, with the 15.4.1 update? Does it work?
no, not working.