With the new macOS 15, Apple introduced the new Local Network Privacy feature. This is causing issues for our customers as - even though they granted the required permission for our software - connections to a server in their local network are being blocked. The situation is not fixed by recent macOS updates.
As far as I know, this issue exists for machines running on Apple Silicon. Systems running macOS versions (e.g. Sonoma) are not affected.
Currently, the workaround is to re-enable the permission under Settings > Privacy & Security > Local Network. The list shows our application with an enabled checkbox. Users now have to de-select the box and then re-select it again for the application to work. They have to do this after each and every reboot of their system, which is slightly annoying (so at the moment we recommend to not upgrade macOS to Sequoia, if possible)
I did some research and saw that other products are also affected by this bug. Is there a solution to this issue or any plans to fix it?
And I believe you've found the problem:
This means, that all gui apps that are part of our application share the same executable (there's separate instances of the file on disk, but they all have the same UUID).
This is a bad idea. The issue here is that, in general, the system "primary" executable identifier is bundle id. So, two apps are "the same" if the bundle ID and "different" if they have different bundle IDs. However, the problem here is that there are cases where it cannot/does not use the bundle ID. As a few examples:
-
Crash logs are correlated/identified based on build UUID. Part of this is technical, since the crash collection system can only rely on information that's already in-process and it's possible for a process to crash before it "knows" it's bundle id (assuming it has one at all). Part of this is also practical, since crash logs need to be tied to specific "builds", not just apps.
-
Parts of the TCC system rely on build UUIDs (as well as code signature data), since permission grants need to be more tightly "bound" than JUST the bundle ID.
-
Part of the networking system also use build UUIDs, though there isn't a strong technical requirement (like most of the other cases). I think it was originally done this way partly because the network API usage is very broad (so it needs to work in processes that don't have bundle IDS) and partly to try and avoid circular dependencies between the low level networking layer and Foundation/CoreFoundation.
Obviously 2 & 3 are an issue for your app, but the larger issue here is that it's simply a bad ideas to ship different apps with non-unique build UUIDs. It's the kind of detail that won't cause and immediate/obvious failure, but will instead cause odd problems "later" which won't have any obvious connection to the build UUID. Those kind of bugs are a nightmare to try and sort out.
That leads to here:
You're correct, we're using some launcher technology. To package and install our application, we're using a tool called Install4j.
Basically, I think you need to contact them and they need to fix this. Their tool should be generating unique UUIDs for the objects it generates to avoid exactly these issues.
__
Kevin Elliott
DTS Engineer, CoreOS/Hardware