The new generation of Apple Macs and Macbooks come with a major change in the CPU. They have an Apple processor, the M1 Apple silicon chip, a RISC / ARM64 architecture.
Old intel based applications will continue to run under the Rosetta2 emulator. Applications compiled for ARM64 will run natively.
I am collecting here the steps needed to build a MacOS universal binary for our Software Product Analytics library, "SoftMeter".
I will keep updating this post until all steps are gathered and the library is relased.
What needs to be done.
----------------------------------
The library must be compiled as a "fat" (universal) binary. A universal binary looks no different than a regular app, but is a binary that contains two executables, one for the usual (until today) x86_64 for intel type of processors, and one for the Apple's M1 ARM64 processor. MacOS will choose which version to execute.
What do you need to have
--------------------------------------
Adjust your compilation (build) settings
--------------------------------------------------------
You only need to clear any custom setting you have put under the architecture settings. Xcode comes with the default,
"Standard architectures (Apple silicon, Intel)" which is coded as
ARCHS=arm64 x86_64.
Also, make that the "build only active architecture" is NO.
Verify that the compiled binary contains both architectures
----------------------------------------------------------------------------------
In terminal run the command
lifo -info path-to-your-binary-file
For example if you run this command against our SoftMeter dylib,
lipo -info libSoftMeter.dylib
you will get the result:
Architectures in the fat file: libSoftMeter.dylib are: x86_64 arm64
Note: you must use the command for the binary file inside your app bundle (not the .app bundle itself). I.e. the file under
myapp.app/contents/MacOS/myapp
This works in the same way also for the screensaver bundles (.saver).
Digitally sign your binary
------------------------------------
Digitally signing your binary does not change. The "fat" binary is still a single file.
Notarize your binary with Apple
---------------------------------------------
Notarizing with Apple your binary does not change. The "fat" binary is still a single file.
.............
Appendix - Useful links
-------------------------------
Porting Your macOS Apps to Apple Silicon
https://developer.apple.com/documentation/xcode/porting_your_macos_apps_to_apple_silicon?language=objc
Building a Universal macOS Binary
https://developer.apple.com/documentation/xcode/building_a_universal_macos_binary?language=objc
Our website post
https://www.starmessagesoftware.com/blog/compile-macos-desktop-application-arm64-apple-silicon-m1-chip-cpu