diff --git a/contrib/osx/README.md b/contrib/osx/README.md index 2f5dd1b19..1df7a8d4d 100644 --- a/contrib/osx/README.md +++ b/contrib/osx/README.md @@ -11,7 +11,7 @@ This guide explains how to build Electrum binaries for macOS systems. This needs to be done on a system running macOS or OS X. -The script is only tested on Intel-based Macs, and the binary built +The script is only tested on Intel-based (x86_64) Macs, and the binary built targets `x86_64` currently. Notes about compatibility with different macOS versions: @@ -22,40 +22,50 @@ Notes about compatibility with different macOS versions: imposes a minimum supported macOS version. - If you want to build binaries that conform to the macOS "Gatekeeper", so as to minimise the warnings users get, the binaries need to be codesigned with a - certificate issued by Apple, and starting with macOS 10.15 the binaries also - need to be notarized by Apple's central server. The catch is that to be able to build - binaries that Apple will notarise (due to the requirements on the binaries themselves, + certificate issued by Apple, and starting with macOS 10.15 (targets) the binaries also + need to be notarized by Apple's central server. To be able to build + binaries that Apple will notarize (due to the requirements on the binaries themselves, e.g. hardened runtime) the build machine needs at least macOS 10.14. See [#6128](https://github.com/spesmilo/electrum/issues/6128). + - There are two tools that can be used to notarize a binary, both part of Xcode: + the old `altool` and the newer `notarytool`. `altool` + [was deprecated](https://developer.apple.com/news/?id=y5mjxqmn) by Apple. + `notarytool` requires Xcode 13+, and that in turn requires macOS 11.3+. -We currently build the release binaries on macOS 10.14.6, and these seem to run on -10.13 or newer. - -Before starting, you should install [`brew`](https://brew.sh/). +We currently build the release binaries on macOS 11.7.10, and these seem to run on +10.14 or newer. (note: 10.13 might also work, haven't tested) #### Notes about reproducibility - We recommend creating a VM with a macOS guest, e.g. using VirtualBox, and building there. -- The guest should run macOS 10.14.6 (that specific version). +- The guest should run macOS 11.7.10 (that specific version). - The unix username should be `vagrant`, and `electrum` should be cloned directly to the user's home dir: `/Users/vagrant/electrum`. - Builders need to use the same version of Xcode; and note that full Xcode and Xcode commandline tools differ! - - Xcode CLI tools are sufficient for everything, except it is missing `altool`, - which is needed for the release-manager to notarise the `.dmg`. - - so full Xcode is needed, to have `altool`. - - however, brew now consider macOS 10.14 too old, and for some reason it - requires Xcode CLI tools. (`Error: Xcode alone is not sufficient on Mojave.`) - - So, we need *both* full Xcode and Xcode CLI tools. Both with version 11.3.1. - The two Xcodes should be located exactly as follows: + We use the Xcode CLI tools as installed by brew. (version 13.2) + + Sanity checks: ``` $ xcode-select -p - /Users/vagrant/Downloads/Xcode.app/Contents/Developer + /Library/Developer/CommandLineTools $ xcrun --show-sdk-path - /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk + /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk + $ pkgutil --pkg-info=com.apple.pkg.CLTools_Executables + package-id: com.apple.pkg.CLTools_Executables + version: 13.2.0.0.1.1638488800 + volume: / + location: / + install-time: XXXXXXXXXX + groups: com.apple.FindSystemFiles.pkg-group + $ gcc --version + Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/4.2.1 + Apple clang version 13.0.0 (clang-1300.0.29.30) + Target: x86_64-apple-darwin20.6.0 + Thread model: posix + InstalledDir: /Library/Developer/CommandLineTools/usr/bin ``` - Installing extraneous brew packages can result in build differences. For example, pyinstaller seems to pick up and bundle brew-installed `libffi`. @@ -64,41 +74,12 @@ Before starting, you should install [`brew`](https://brew.sh/). (or run e.g. `git clean -ffxd` to rm all local changes). -#### 1. Get Xcode - -Notarizing the application requires full Xcode -(not just command line tools as that is missing `altool`). - -Get it from [here](https://developer.apple.com/download/more/). -Unfortunately, you need an "Apple ID" account. - -(note: the last Xcode that runs on macOS 10.14.6 is Xcode 11.3.1) - -Install full Xcode: -``` -$ shasum -a 256 "$HOME/Downloads/Xcode_11.3.1.xip" -9a92379b90734a9068832f858d594d3c3a30a7ddc3bdb6da49c738aed9ad34b5 /Users/vagrant/Downloads/Xcode_11.3.1.xip -$ xip -x "$HOME/Downloads/Xcode_11.3.1.xip" -$ sudo xcode-select -s "$HOME/Downloads/Xcode.app/Contents/Developer/" -$ # agree with licence -$ sudo xcodebuild -license -``` - -(note: unsure if needed:) -``` -$ # try this to install additional component: -$ sudo xcodebuild -runFirstLaunch -``` - -Install Xcode CLI tools: -``` -$ sudo rm -rf /Library/Developer/CommandLineTools -$ shasum -a 256 "$HOME/Downloads/Command_Line_Tools_for_Xcode_11.3.1.dmg" -1c4b477285641cca5313f456b712bf726aca8db77f38793420e1d451588673f9 /Users/vagrant/Downloads/Command_Line_Tools_for_Xcode_11.3.1.dmg -$ hdiutil attach "$HOME/Downloads/Command_Line_Tools_for_Xcode_11.3.1.dmg" -$ sudo installer -package "/Volumes/Command Line Developer Tools/Command Line Tools.pkg" -target / -$ hdiutil detach "/Volumes/Command Line Developer Tools" -``` +#### 1. Install brew + +Install [`brew`](https://brew.sh/). + +Let brew install the Xcode CLI tools. + #### 2. Build Electrum