How to add a custom URL scheme programmatically on macOS? - macos

I need to create a URL scheme that will allow me to open a file with its default software.
For this, I have an .app file that contains the function to open a file via a sent parameter:
myCustomProtocol://Users/xxx/indesign/A.indd
So I managed to make it work by doing everything manually via: https://hublog.hubmed.org/archives/001154
I would now like to automate this URL scheme creation via a script (for the moment, I use SwiftDefaultApps: https://github.com/Lord-Kamina/SwiftDefaultApps).
The .app file will be provided to the user but I must be able to install the custom protocol when installing an application.
Here I have to create a URL scheme programmatically that runs this .app file (like this example with Zoom).
I did my research before making this post but did not find any clear answers.
Thank you in advance !

Just launch the .app file manually and restart the Mac (?) to register the url scheme in macos.
I can then call my custom protocol.
Source: https://github.com/chrisliuqq/mac-custom-url-scheme-to-script

Related

open a sideloaded UWA app with parameters

I have created a wpf app and have been learning how to deploy it as a side loaded windows store app through an appinstaller package.
I now want to launch the app through a shell command with parameters. I did setup a protocol, but it doesnt seem to open the app. to make things worse I do not have permission to see the contents of the windowsApps folder it should be installed in.
can anybody explain how i can launch this app with an argument? Also can anybody explain how the file structure is setup inside the windowsApps folder?
In the end i setup a protocol in the declarataions of my package manifest for my app to allow it to be opened through a url eg myapname:
here is an explanation of how this works
the full uri that is called is passed in the app parameters so i put custom handling in to allow me to pass waht i want in as a querystring
so for example i could call mayapp:?arg1=myvalue or myapp:localhost:80?myarg=myvalue

How to red an external file during the installation of an .appxbundle

I want to distribute my UWP app using side-loading.
I have created the .appxbundle using Visual Studio, and also EV code-signed it.
So, when the user clicks on the .appxbundle file, my app is properly installed and the user can start working with it!
In this way, I can place such .appxbundle on my website, and the users can download and install it. Marvelous.
Now, I would like to customize each download, by adding a file with some tracking information to attribute a download e.g. to a specific ad campaign that I am running.
So my server can generate a ZIP file containing the .appxbundle and a little .txt file containing the tracking info (I need to generate a separate file because the signed .appxbundle takes too long - several minutes - to regenerate each time).
The user then unzips the ZIP file, clicks on the .appxbundle and installs the app.
The tricky part is that, during the installation of the app, I would like to copy the .txt file into the LocalState folder of the app that is being installed.
Is it possible?
How can I do that?
Thanks!
If your users are going to install the app by clicking a ms-appinstaller:// link, you can attach extra data using the activationUri.
This can be a custom URL scheme that you register for your app with any url parameters. The appinstaller will call this url once the app is installed.
We use this to pass login information to the app, like this:
ms-appinstaller:?source=https://localhost:8000/myApp.appinstaller&activationUri=my-app-track-install:?campaign=billboards
If your app registers for the my-app-track-install url scheme in the Appxmanifest, then from the apps perspective the first launch is then a url activation with the url you added as activationUri. In your case you would track the install, and then proceed to launch the app normally.
You can find more info on this in the example and remark for this (semi-related) api-documentation:
https://learn.microsoft.com/en-us/uwp/api/windows.applicationmodel.package.getappinstallerinfo?view=winrt-19041

MacOS Get default application for file type

I am working on a Mac app. I ultimately want to use default app icons within my app. From the Info.plist and the Resource folder of an app I can get the .icns file and convert that to the image format I need. But I need to know the default application associated with the particular file extension, if any.
So how to get the default application that the system currently associates with a given file extension?
Don't go digging in other apps' bundles. It's always best to work at the level of abstraction that suits the question you want to ask. If you want to get the icon that the Finder (or a Mail attachment, etc) would display for a file of a particular type, use the NSWorkspace iconForFileType: method.
I think what you're looking for is part of the OSX Launch Services: LSCopyDefaultApplicationURLForContentType API. This returns the info on apps that can open specific Uniform Type Identifiers. There's also a similar API called LSCopyDefaultApplicationURLForURL to check which app opens a specific known file.

How to copy additional files to OSX

I have a simple FireMonkey application which loads an image file. It's my first try with OSX. It's started on OSX via paserver from the "scratch-dir". But my image file is obviously not there and cannot be loaded. What do I have to do to make Delphi copy this image file to OSX or bundle it?
You can use the Project-Deployment option to add addtional files
If you manually copy the image to the Resource folder into the application bundle on your Mac, your application can access the file without specifying a path.
Unfortunately, I don't know a way to get Delphi to include the file automatically.

Remove Sandboxing

I have another question dealing with app sandboxing. So I need access to the users' home directory and at the same time the app should be able to shut down the Mac. This requires to not using sandboxing.
My problem is that I don't know how to remove sandboxing and being able to submit the app to the Mac App Store. I think that the archives are sandboxed because I had turned it on once..
How to remove sandboxing from the archives properly?
Thanks for your help!
On Xcode 11, you can turn off Sandboxing by removing it from the Signing & Capabilities tab:
If I understand what you are asking correctly, you'll need to remove the entitlements.plist from your project and make sure that the Summary view of your target in Xcode has sandboxing turned off:
As Derek Wade pointed out, you can make an App like GarageBand X (which behaves obnoxiously with third party plugins like Amplitube due to Sandboxing) NOT run in a sandbox by editing the binary itself with a HEX editor like HexFiend. Look for:
<key>com.apple.security.app-sandbox</key>
Immediately following that bit you'll see the true tag, which as suggested I switched to 'fals' (no extra bytes) and now GarageBand will happily interact with third party VST plugins. Huzzah.
I found if you go into the .app package, under Contents/MacOS, there should be a binary file that matches the name of your app. Copy that file to your desktop. Edit the desktop copy of the file with TextEdit. You should find within the file, the text representation (xml) of the Entitlements for the app. Find the Sandbox entitlement flag (usually set to <true/>) and change it to <false/>. You will have to unlock the file when editing. Save the file (located on the desktop). Rename the original file in the .app package (i.e. append .old to the filename). Copy the desktop file back to the .app Package location (you may have to authorize it). This should remove the sandboxing.
You cannot remove Sandbox if the user ran you application via Sandbox.
That's the whole point - don't you think ?

Resources