tMerge pull request #4938 from SomberNight/mac_build_qr_scanner_old_xcode - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 4360d07918967485ad4998034d816a3fcd8664d8 DIR parent ba33bc4ad85e759d67093fcc1edae51e6ab5a692 HTML Author: ThomasV <thomasv@electrum.org> Date: Wed, 19 Dec 2018 12:03:41 +0100 Merge pull request #4938 from SomberNight/mac_build_qr_scanner_old_xcode mac: build qr scanner using old xcode Diffstat: M contrib/osx/README.md | 43 ++++++++++++++++++++++++++----- M contrib/osx/make_osx | 7 +++++-- 2 files changed, 41 insertions(+), 9 deletions(-) --- DIR diff --git a/contrib/osx/README.md b/contrib/osx/README.md t@@ -3,22 +3,52 @@ Building Mac OS binaries This guide explains how to build Electrum binaries for macOS systems. -The build process consists of two steps: ## 1. Building the binary -This needs to be done on a system running macOS or OS X. We use El Capitan (10.11.6) as building it on High Sierra -makes the binaries incompatible with older versions. +This needs to be done on a system running macOS or OS X. We use El Capitan (10.11.6) as building it +on High Sierra (or later) +makes the binaries [incompatible with older versions](https://github.com/pyinstaller/pyinstaller/issues/1191). Before starting, make sure that the Xcode command line tools are installed (e.g. you have `git`). +#### 1.1a Get Xcode + +Building the QR scanner (CalinsQRReader) requires full Xcode (not just command line tools). + +The last Xcode version compatible with El Capitan is Xcode 8.2.1 + +Get it from [here](https://developer.apple.com/download/more/). + +Unfortunately, you need an "Apple ID" account. + +After downloading, uncompress it. + +Make sure it is the "selected" xcode (e.g.): + + sudo xcode-select -s $HOME/Downloads/Xcode.app/Contents/Developer/ + +#### 1.1b Build QR scanner separately on newer Mac + +Alternatively, you can try building just the QR scanner on newer macOS. + +On newer Mac, run: + + pushd contrib/osx/CalinsQRReader; xcodebuild; popd + cp -r contrib/osx/CalinsQRReader/build prebuilt_qr + +Move `prebuilt_qr` to El Capitan: `contrib/osx/CalinsQRReader/prebuilt_qr`. + + +#### 1.2 Build Electrum cd electrum ./contrib/osx/make_osx -This creates a folder named Electrum.app. +This creates both a folder named Electrum.app and the .dmg file. + -## 2. Building the image +## 2. Building the image deterministically (WIP) The usual way to distribute macOS applications is to use image files containing the application. Although these images can be created on a Mac with the built-in `hdiutil`, they are not deterministic. t@@ -33,4 +63,4 @@ Copy the Electrum.app directory over and install the dependencies, e.g.: Then you can just invoke `package.sh` with the path to the app: cd electrum - ./contrib/osx/package.sh ~/Electrum.app/ -\ No newline at end of file + ./contrib/osx/package.sh ~/Electrum.app/ DIR diff --git a/contrib/osx/make_osx b/contrib/osx/make_osx t@@ -1,7 +1,7 @@ #!/usr/bin/env bash # Parameterize -PYTHON_VERSION=3.6.4 +PYTHON_VERSION=3.6.7 BUILDDIR=/tmp/electrum-build PACKAGE=Electrum GIT_REPO=https://github.com/spesmilo/electrum t@@ -73,6 +73,8 @@ info "Downloading libusb..." curl https://homebrew.bintray.com/bottles/libusb-1.0.22.el_capitan.bottle.tar.gz | \ tar xz --directory $BUILDDIR cp $BUILDDIR/libusb/1.0.22/lib/libusb-1.0.dylib contrib/osx +echo "82c368dfd4da017ceb32b12ca885576f325503428a4966cc09302cbd62702493 contrib/osx/libusb-1.0.dylib" | \ + shasum -a 256 -c || fail "libusb checksum mismatched" DoCodeSignMaybe "libusb" "contrib/osx/libusb-1.0.dylib" "$APP_SIGN" # If APP_SIGN is empty will be a noop info "Building libsecp256k1" t@@ -92,7 +94,8 @@ info "Building CalinsQRReader..." d=contrib/osx/CalinsQRReader pushd $d rm -fr build -xcodebuild || fail "Could not build CalinsQRReader" +# prefer building using xcode ourselves. otherwise fallback to prebuilt binary +xcodebuild || cp -r prebuilt_qr build || fail "Could not build CalinsQRReader" popd DoCodeSignMaybe "CalinsQRReader.app" "${d}/build/Release/CalinsQRReader.app" "$APP_SIGN" # If APP_SIGN is empty will be a noop