MacOS – Why is OSX telling me I can’t open a document from an unidentified developer

gatekeepermacos

I thought this feature was only for apps, not for documents.

This is a C# script file, and I've told it to open it with Visual Studio Code. I can open VS Code with no problem, so it doesn't seem to be the permissions on that.

enter image description here

Best Answer

This answer applies if you set the app for that particular document, not for all documents of that type (e.g. by using Get Info on the document, and changing the "Open with" pop-up menu, but not clicking the "Change All" button).

There are two critical pieces here. First, if you set a document to open in a particular app, what it actually does is attach some metadata to the file (think of it like sticking a post-it note onto the file) that says to open it with that particular app. Second, if a document is quarantined (because it was downloaded from the internet, or created by a sandboxed app, or some other reasons), it's considered untrusted, and the gatekeeper security policy will be applied to anything like executable in the file.

These two features can interact in an unfortunate way: that "open with" note is an instruction about what to do, and therefore (sort of) executable code, and therefore the gatekeeper security policy applies to it (even though you created the note, it's "part of" the untrusted file, and therefore untrusted). Thus, double-clicking a document (with "open with" metadata) can get you the untrusted app warning/error.

Fortunately, as long as you want all files of that type (.cs in this case) to open in the same app, there's a solution: in the Info window, Open with section, select the app you want (e.g. Visual Studio Code), and then click "Change all". This removes the metadata from the file, and instead makes an entry in your Launch Services preferences saying that you prefer to have files of that type open in that app. Since the setting is now a personal setting rather than a note attached to an untrusted file, the problem goes away.