3 ms·
> To distribute the app as a zip file, the process is simpler: pick the upload option from Xcode after selecting “Developer ID” and it’ll produce a notarized ve
by interleave 4y ago
> To distribute the app as a zip file, the process is simpler: pick the upload option from Xcode after selecting “Developer ID” and it’ll produce a notarized version of your app, which you can then zip up and distribute directly.
While possible, I highly recommend going the extra mile of shipping a .dmg from the start if your app requires any extra permissions (file access, network, etc.)
macOS turns out to be very, very hesitant to provide file access to apps that were downloaded as zips and will do so SILENTLY.
I spent more than three weeks banging my head against this. Here's the full run-down with all the details: https://forum.obsidian.md/t/streamline-a-stream-of-consciousness-writer-for-obsidian/50108/18 https://forum.obsidian.md/t/streamline-a-stream-of-conscious... if you're interested.
- lapcat 4y agoI suspect you were just running into App Translocation AKA Gatekeeper Path Randomization.
- interleave 4y agoThank you, I appreciate your pointer! Based on your comment and mike_hearn's, Gatekeeper Path Randomization squatted in squarely my blind spot :)
- mike_hearn 4y agoPermissions aren't affected by zip vs dmg, they are assigned to bundle id+signing identity pairs I think, but if the user doesn't move the app out of the dmg or Downloads folder then it'll be run from a randomly generated read only mount. That is the main difference.
- interleave 4y agoThank you for clarifying! In every test, I copied the app to /Applications before starting it. For reproducibility, here are the exact steps I took, with .zip[^1] and .dmg[^2] respectively on a test machine: 1. Download the archive from github 2. Extract/mount the archive 3. Drag the app to /Applications 4. Open the app 5. Configure a specific file-path for indexing And here's the difference I observed: - Zip: Silent failing, no indexing of files, no exceptions, no errors, "app doesn't work" - Dmg: Files are indexed as intended, "app works" Is this what you would have expected as well? [1]: Streamline.zip from https://github.com/akaalias/getstreamline/releases/tag/v3.5.2 https://github.com/akaalias/getstreamline/releases/tag/v3.5.... [2]: Streamline.dmg from https://github.com/akaalias/getstreamline/releases/tag/v3.5.3 https://github.com/akaalias/getstreamline/releases/tag/v3.5....
- mike_hearn 4y agoDefinitely not expected, no. The two are different versions of the app, though.
- interleave 4y agoGood call – the two differences are the type of packaging and the version number in the manifest.
- mike_hearn 4y agoAre you definitely sure about that? I'm not trying to be awkward but the binaries are actually different - they have differently sized text sections, one has an extra undefined symbol, relocations are different and their disassembly is substantially different too. Try downloading both and then using otool to see: otool -fahl Streamline.app/Contents/MacOS/Streamline >/tmp/sl1 otool -fahl Streamline\ 2.app/Contents/MacOS/Streamline >/tmp/sl2 diff -u /tmp/sl{1,2}|less
- interleave 4y agoOh, this is not awkward at all - You are spending your time on this with me. So I appreciate your questions and input very much! From 3.5.2 to 3.5.3 I did remove image assets from a view[^1], so the app contents are not the same. I have an idea: How about I bump the version to 3.5.4 without changing anything else, and create a release with both, .zip and .dmg to compare them. Ideally, I'd use a completely new Mac (to avoid re-using an existing permission) to... - first install and run the app from .zip, expecting the app to be shadow-banned - secondly install and run the app from .dmg, expecting the app to work What do you think? [^1]: https://github.com/akaalias/Streamline/commit/d113095604ce4c4f07ca36e1f27daf7700ec13c4 https://github.com/akaalias/Streamline/commit/d113095604ce4c...
- mike_hearn 4y agoI don't use Obsidian so can't really test the indexing feature I'm afraid.
- deleted 4y ago[deleted]