Distribute Free Mac Software on Website

I have written a small number of programs with Xojo. They are offered for free on my website. The number of potential customers is small. I am not a registered Apple Developer. I am not trying to put apps on the App Store.

Currently, I store zipped versions of my applications on Amazon S3. I have my own personal website. These apps are linked on this website so when the user clicks on the link the zipped file from AWS downloads to their Download folder. It seems to automatically “unzip” within the Download folder. The user is instructed to manually move the app to the Application folder and then launch it. These are 64 bit apps.

Because I am not a registered developer, the potential user has to jump through a lot of hoops to launch the application for the first time. You cannot jump double-click on the app. If you do, it will simply tell you that it is unauthorized and cannot be opened.

It seems to still be possible to to right-click on the app and choose Open and then read some more warnings, and if you insist that you still want to open the app, you can. After you have opened it for the first time, it will subsequently open without difficulty. This general process has become more complicated and more “out there” with the new MacOS versions.

I have tested this on an Intel Mac running Big Sur and this still seems to work. I do not know if this works on an Apple Silicon Mac running Big Sur because I do not own one.

In any case, I would like to make life a little easier for the handful of people who might want to use one of my apps. At the very least, I would like to make them less anxious.

I understand that it will cost me $100 dollars a year to become registered with Apple. I am willing to pay that tax. But I do not know how to move forward from here. What else do I have to do?

I read about App Wrapper 4. That is $200 dollars and then I guess $50.00 dollars a year as best as I can understand the website. Is this what I should be doing? If I spent all this money, would I be able to achieve my basic goal of distributing free software without having my customers getting anxious and having to navigate complex “weird” instructions. Would it be simple for me or do I still have lots of complexity to deal with? Is there a cheaper more sensible way to go?

Spending all this money to give away free software is a painful. But more painful still would be spending money and then not be able to really figure out how to simply distribute the software on my website. I am scared that I will be entering into some complicated process for myself.

Any advice?

3 Likes

You should get Apple developer and notarize your apps and distribute them as disk image.
If you don’t like to pay App Wrapper for the convenience, you can write a few shell scripts to do the same.

1 Like

You misunderstood the website - its only 50 $ yearly. Those 200 $ are for another product: the Xojo Developer Kit.

As Christian already wrote - you can do the neccessary code-signing and notarization without AppWrapper, only the Apple Developer account is a must have. But with AppWrapper its a lot easier……

3 Likes

Jurg Otter has a script which does the heavy lifting. There is an alternative free app SDNotary from Late Night Software which also does notarisation like AppWrapper.

Be prepared to be really frustrated. Like hair pulling and cursing frustrated. Codesigning and notarisation process sucks.

2 Likes

I do this too. But as others have said, it’s not $200 for appWrapper. The following is an outline of what I do.

If you follow the developer path, you would become a registered developer and go to the developer site and have to download some keys that you import into your keychain (I think two are needed, but I could be wrong). Somehow I managed to get two copies of each, but appWrapper doesn’t seem to mind.

You then logon to another Apple site to get an app-specific password, which appWrapper will need. This site is related to your AppleID, but note - if you change your AppleID, then your app-specific passwords become invalid and you need to get a new one (one for each app).

Armed with all of this, what I do is then use appWrapper to codesign the app. You’d do that for each of yours, each with its own app-specific password. What I then do is have a folder with the codesigned app, and any other bits for the app (e.g. user guide). I then make a dmg from the folder with Disk Utility. I then use appWrapper to have the dmg notarised by Apple. Once that comes back OK, I put the dmg on my website and folks can download it, and the dmg can be opened and the app will run.

2 Likes

If you follow the developer path and start making use of AppWrapper I’d suggest you put your apps on the Apple Store, and have your website link to each app on the Apple Store. No more need of notarization or creating your own DMG or .zip
This is what I’ve been doing for the last 11 years.

Tim, do you do something special so when the user “opens the dmg” the application ends up in the Application folder and the “user guide” ends up somewhere else? Or does the entire dmg’d folder (app and manual) just end up in the Application folder which seems to be basically how Xojo itself handles things at least as far as the documentation is concerned.

Most (but unfortunately not all) of my apps do not need support files apart from what are really not support files, but rather just the equivalent of manuals. I do not know if AppWrapper helps in terms of creating dmg’s that move real support files into the ~Library/Application Support/com.bearboat.MyApp/ area.

Thanks for piping in. This sounds great, but I hear so many stores on podcasts and such about people having difficulty with App Store submissions that I am scared of that additional layer of complication and confusing rejection. :thinking:

1 Like

No, it just behaves like an ordinary dmg and it’s up to the user to move files where they want them to end up.

Not as far as I’m aware, but then there are many buttons/features/etc that I don’t know the purpose of.

If appWrapper didn’t exist, I wouldn’t be bothering to figure out codesigning and notarising using CLI tools - the messages don’t help (or didn’t help me, anyway). One such that appWrapper passes back to you is that “you have to accept the contracts” which means Apple has changed its Ts&Cs again so please logon to your developer account and click the buttons to accept these new condistions.

Once your AppWrapped app is ready for the AppStore it is sandboxed, therefore you may need to set entitlements (in AppleWrapper) but essentially avoid calling system events: try it and see what happens. If it works OK, just submit it to the Apple Store and see what they say. Usually my apps go through, sometimes the reviewer notices something that can easily be fixed, and a few times they make me angry.
As for your userguides, can’t you load them into the app itself and open them with an htmlViewer?

Half of what my app does ist not possible in the AppStore. The AppStore review is mind numbingly stupid.

4 Likes

Yep, a couple of weeks ago I submitted new versions of three of my apps that access Apple Contacts app. In the entitlements in AppWrapper I had given this same reason: “needed by the app”. All these years no reviewer complained, and so this time too two reviewers did not say anything, while the third one sent me an obscure machine-message to which I answered, I’m sorry but I don’t understand how to proceed. Quickly the human answer came: just say that the app does not distribute the data collected from Contacts. After writing it, the app went through.
A little annoying experience, but I’ll keep it in mind and next time I’ll add that line into the other two apps too.

1 Like

You may want to use appvisor.com to make sure your freeware is displayed on all software repositories. Their basic service is $20 or so for 200 repositories, if I remember right. Also, check sourceforge.net, which is one of the biggest freeware list.

1 Like

I have no doubt this is true for more sophisticated apps, but my experience was smooth as silk. That said, my apps are kept simple; all Xojo, no declares, and only one plugin: Valentina.

Once I figured out how to actually get my certificates, I used App Wrapper and ExeWrapper with a very minimal learning curve. Frankly, I was surprised as how easy it was.

2 Likes

You can use Xcode to create, download and install all neccessary certificates. Just open Xcodes preferences, select your Apple ID in the list and then click on “Manage certificates”. You’ll see a list of your certificates and you can create new with the plus symbol…

For first time users the way of submitting an app to the Mac App Store may be a bit difficult, but with the help of AppWrapper (and Transporter) and the appstoreconnect.com website it is possible.
Advantages of putting apps in the MAS are the easy update procedure (for the view of the users) and a big audience.
App Store Reviews can be a bit frustrating (in more then 30 updates I was asked six times, why my app wants to access the contacts.app), but most of the time its quick and easy…

I apologize that this isn’t clear. I will add it to my to-do list to improve it.

The first year of App Wrapper is $49.99, after that if you wish to keep it up to date, it’s $39.99 a year. $200 includes the source codefor the Ohanaware App Kit (which is what we use in App Wrapper and our other products).

I have to charge for updates as it’s pretty much a full time job keeping up with Apple’s rabid pace of change and the things they break on almost a quarterly basis now.

1 Like

It doesn’t. App Wrapper can work with the Apple installer functions to create an installer, however in recently years Apple have deprecated the API for creating more complex installers, basically forcing you as the developer to complete the installation process from within your application (if needed).

So you’d includes these files in your resources folder, on launch you check for the existence of these files in the Users area, if not there, copy them across from the Resources folder.

1 Like

I have been invited to apply for a special program within Apple, if I am approved, App Wrapper will be able to download and manager certificates, identifiers, provision profiles automatically, you just need to log-into App Wrapper using your Apple Developer account. I have a lot to do before I apply, but wish me luck when I am ready to do so.

15 Likes

I have no problem at all with this. I am happy to pay $49 and $39 annually in perpetuity which for me is not all that many more years :slight_smile:

And I definitely wish you luck with more access to Apple innards to spare the rest of us.

4 Likes

As an amateur who initially struggled a lot with working out how to distribute my software, I just wanted to add my 2 cents about the work flow that works for me. Hopefully it might help streamline the process for you

  1. In Xojo, build the app (I just build once as universal binary now)
  2. Run the following signscript in Terminal. I think I adapted this from @Christian_Schmitz’s Filemaker signscript and from the Xojo documentation on code signing, I think. I have it saved as a unix executable file that opens and runs in Terminal. I think it can also work by copy and pasting the text into Terminal. You first need to open the script in a text editing program like TextEdit and use “Replace All” to put in your individual details. This script first removes extended attributes (which make notarization fail) then code signs everything
# replace path to app: /Users/username/path/to/Builds\ -\ AppName/macOS\ Universal/
# replace name of app: AppName.app
# replace name of certificate: "Developer ID Application: Your Name (1234ABCD)"

# Special characters like spaces need to be escaped in paths. e.g. space character gets a backslash before the space.


# now we sign all the parts
cd /Users/username/path/to/Builds\ -\ AppName/macOS\ Universal/

# remove extended attributes, if present
xattr -cr AppName.app

# sign from inside to outside
codesign -f --options runtime -s "Developer ID Application: Your Name (1234ABCD)" AppName.app/Contents/Frameworks/*.dylib
codesign -f --options runtime -s "Developer ID Application: Your Name (1234ABCD)" AppName.app/Contents/Frameworks/*.framework
codesign -f --options runtime -s "Developer ID Application: Your Name (1234ABCD)" AppName.app

# test it
codesign -v -v AppName.app
spctl -v -a AppName.app

# needs to write accepted for success!
  1. I then use DMG Canvas to make an installer. DMG Canvas - Disk Image Layout and Building for macOS It’s a once off purchase of US$20. It’s quite intuitive to use and it will create the installer, code sign it, upload the file for notarization then staple the confirmation to the installer. It seems to me similar to AppWrapper, but I think the functionality is more basic. The only reason I use DMG Canvas is that I came across it first, before I had heard of AppWrapper being recommended in these forums, which seems to be the more popular choice

Once in a while notarization will fail and the reply message from Apple will include something like “You must first sign the relevant contracts online. (1048)”, which means you need to log into your Apple developer account and accept some updated terms and conditions, before notarization will start working again!

I find the whole process very frustrating. I’ve got it working for now, but whenever Apple changes something – first Gatekeeper, then notarization – the process breaks and I need to search the forums again for the new solution!

I hope this helps you.

4 Likes