Page MenuHomeFeedback Tracker

Support for callExtension on macOS
New, NormalPublic

Description

Hello,
The newest macOS port is very well done, and really enjoyable (besides some bugs that will surely be ironed out). Its performance quite good, and it brings a breathe of fresh air for us Mac users.
One of the very few things missing compared to the Windows branch, though, is support for the external callExtension interface. I've been told on Discord that this is due to Apple's policy that prevents Steam apps to be able to call executables that haven't been signed. But this can really hinder the experience while using some specific mods, and it is truly the only step left to allow almost complete interoperability among platforms.

Is there any workaround that someone could suggest / try to pass through on Steam to be allowed? I was thinking that maybe callExtension could be developed so that it needs to use the executable signature check included in macOS.
It's true that implementing the signature control practically prevents ALL executables contained in mods (since they're not signed), but from there, tech-savvy users could add those executables to the macOS whitelist and retain access to their executions, even though in a more convoluted form.

I'm a developer as well, and I'd love to discuss this with some developers from Bohemia's partner for this porting, maybe we could come up with a working solution, both technically and legally.

Details

Severity
Tweak
Resolution
Open
Reproducibility
Always
Operating System
MacOS x64
Category
Modding

Event Timeline

danidr created this task.Aug 27 2023, 3:30 PM
killerswin2 added a subscriber: killerswin2.EditedSep 3 2023, 12:40 AM

I don't think that is gonna happen. Apps/Libraries have to submitted to apple and approved for Notarization. You also have to hardened-runtime exception entitlements, and sign every shared library that it your application uses. BUT the best part is to get a cert to sign from apple you have to pay for the enrollment about 99 dollars (299 for "enterprise" grade). Now you can get a fee waiver but you still need to spend the 99 dollars to even get the cert and distribution rights.

https://developer.apple.com/news/?id=06032019i
https://developer.apple.com/support/enrollment/
https://developer.apple.com/support/membership-fee-waiver/

This is a good break down on the whole process for pygames.
https://glyph.twistedmatrix.com/2018/01/shipping-pygame-mac-app.html

Godot wiki on it.
https://docs.godotengine.org/en/stable/tutorials/export/exporting_for_macos.html

danidr added a comment.EditedSep 3 2023, 2:16 PM

I don't think that is gonna happen. Apps/Libraries have to submitted to apple and approved for Notarization. You also have to hardened-runtime exception entitlements, and sign every shared library that it your application uses.

Yes I get what you mean; this is a very common issue with software on macOS. What other games/software did (like, for example, X-Plane), is:

  • They DO allow calling external libraries, such as dylibs, from outside their app package.
  • These libraries won't run unless signed, of course, which is the problem you mention; they will just silently fail instead. All modders, though, add a line in readme, suggesting to run sudo xattr -rd com.apple.quarantine path/to/library, which whitelists the library, basically telling macOS "yes, I know this software is not signed; but pretty please, run it anyway. I'll take the responsibility".

Therefore, Arma 3 could allow executing external dylibs with the callExtension command, waiting for their return. They WILL usually silently fail, but modders that use such a call in their mods could simply warn macOS users that they need to manually whitelist libraries, and voilà, the extension will work without breaking any dev agreement. Of course the ported version should look for dylibs instead of dlls.

Please please please reconsider this. It is basically the last step for a full compatibility with, for example, ACE, which is one of the most used mods on Arma. I even recompiled their dlls as dylibs, but when I tried to run them, the callExtension would just return null (IIRC), not even getting to the point of calling the library.

Other SIGNED software in the Apple ecosystem allows this; unless there is some gotcha with the Steam platform + macOS licensing that you did not mention there, I can't see why Arma couldn't do the same actually, X-Plane is on Steam too, and it allows this.

This could also allow for a third-party solution to the "no head tracking" issue. callExtension support would allow modders to implement a UDP server that can send head positioning/rotation to Arma, using existing tools such as FreeTrack to bring this feature on macOS as well.