LosslessSwitcher icon indicating copy to clipboard operation
LosslessSwitcher copied to clipboard

Stopped working on MacOS 15.4

Open sifaralways opened this issue 10 months ago • 104 comments

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.

sifaralways avatar Feb 21 '25 21:02 sifaralways

Same. This and the blank settings page when launching the app are significant issues.

sartajanand avatar Feb 27 '25 13:02 sartajanand

### 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.

sifaralways avatar Mar 01 '25 01:03 sifaralways

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

sifaralways avatar Mar 04 '25 05:03 sifaralways

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

vincentneo avatar Mar 04 '25 09:03 vincentneo

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 😔 .

sifaralways avatar Mar 04 '25 09:03 sifaralways

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.

vincentneo avatar Mar 04 '25 09:03 vincentneo

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

sifaralways avatar Mar 04 '25 09:03 sifaralways

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>]

sifaralways avatar Mar 04 '25 09:03 sifaralways

Try finding sampleRate: ACAppleLosslessDecoder Input format: asbdSampleRate

vincentneo avatar Mar 04 '25 10:03 vincentneo

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 '' , songEnhanced, audioCapabilities: 0x0 -> 0x10, 0x0 -> 0x10, asbdFormatID = qlac, sdFormatID = alac, high res lossless, asbdNumChannels = 2, sdNumChannels = 2, sdBitDepth = 24 bit, asbdSampleRate = 192.0 kHz, is not rendering spatial audio default 21:25:51.620837+1100 Music play> cm>> mediaFormatinfo '' , songEnhanced, audioCapabilities: 0x10, 0x10, asbdFormatID = qlac, sdFormatID = alac, high res lossless, asbdNumChannels = 2, sdNumChannels = 2, sdBitDepth = 24 bit, asbdSampleRate = 192.0 kHz, is not rendering spatial audio default 21:25:51.693597+1100 Music play> cm>> mediaFormatinfo '' , songEnhanced, audioCapabilities: 0x10, 0x10, asbdFormatID = qlac, sdFormatID = alac, high res lossless, asbdNumChannels = 2, sdNumChannels = 2, sdBitDepth = 24 bit, asbdSampleRate = 192.0 kHz, is not rendering spatial audio

sifaralways avatar Mar 04 '25 10:03 sifaralways

Thanks. The log entries seems normal to me.

vincentneo avatar Mar 04 '25 10:03 vincentneo

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.

sifaralways avatar Mar 04 '25 12:03 sifaralways

So the app doesn't work after this latest update. What's the fix?

darren0263 avatar Mar 09 '25 16:03 darren0263

Update: Same behavior and same error logs on Mac OS 15.4 Beta 3 that was launched this morning.

sifaralways avatar Mar 12 '25 08:03 sifaralways

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.

darren0263 avatar Mar 13 '25 16:03 darren0263

Can anyone test if things are the same for v1.0.0? (The absolute earliest release)

vincentneo avatar Mar 17 '25 17:03 vincentneo

@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 avatar Mar 18 '25 11:03 sifaralways

@sifaralways thanks. I might have an idea as to why it doesn't work in 15.4 now

vincentneo avatar Mar 18 '25 15:03 vincentneo

@vincentneo , lovely. Any chance you can comment on fix timelines? Can I help you with fix in anyway?

sifaralways avatar Mar 19 '25 10:03 sifaralways

v1.0.0(the first release) is working for me , its switches to the correct sample rate, I'm on 15.4 beta 4

siddharththammiraju avatar Mar 19 '25 14:03 siddharththammiraju

@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:

  1. 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.
  2. 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.

vincentneo avatar Mar 20 '25 16:03 vincentneo

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 avatar Mar 20 '25 18:03 darren0263

@darren0263 you can find it here https://github.com/vincentneo/LosslessSwitcher/releases/tag/1.0.0

vincentneo avatar Mar 20 '25 18:03 vincentneo

hey @vincentneo, now that 15.4 RC is out, will you get bandwidth to look into the issue please?

sifaralways avatar Mar 27 '25 04:03 sifaralways

hi @vincentneo , confirming that same issue is happening on MacOS 15.5 Beta 1 as well

sifaralways avatar Apr 03 '25 10:04 sifaralways

@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.

danlatorre avatar Apr 03 '25 20:04 danlatorre

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.

AnthonyBagard avatar Apr 11 '25 06:04 AnthonyBagard

when can we expect a fixed version?

steve3d avatar Apr 18 '25 08:04 steve3d

Anyone, have you tried the latest version of LS 1.1 on macOS, with the 15.4.1 update? Does it work?

ruangraung avatar Apr 23 '25 11:04 ruangraung

no, not working.

steve3d avatar Apr 24 '25 00:04 steve3d