Skip to content

Instantly share code, notes, and snippets.

@wdouglascampbell
Last active December 19, 2024 21:32
Show Gist options
  • Save wdouglascampbell/00ef0863cde09866e975e900bf27d307 to your computer and use it in GitHub Desktop.
Save wdouglascampbell/00ef0863cde09866e975e900bf27d307 to your computer and use it in GitHub Desktop.
Instructions to Build OpenConnect-GUI Universal Package for macOS 12+
Summary of Steps
1. Build aarch64 package binary using UTM VM running macOS 12 Monterey.
2. Build x86_64 package binary using Intel-based Mac running macOS 12 Monterey.
3. Copy x86_64 package binary to UTM VM running macOS 12 Monterey.
4. Create universal package binary from aarch64 package binary and x86_64 package binary.
Build aarch64 Package
=====================
Prepare VM
----------
Using a Mac with an Apple silicon processor install UTM (https://mac.getutm.app)
Download the universal IPSW file for macOS 12.6 (https://ipsw.me/install/MacBookPro17,1/21G115)
Create a new virtual machine in UTM running macOS 12.6 using download IPSW file
Note: Set virtual disk size to 110 GB.
Install Apple security updates (DO NOT upgrade the OS!)
Install Xcode
-------------
Download Xcode 14.2 from https://xcodereleases.com
Extract it by double-clicking on downloaded file (Xcode_14.2.xip)
Delete Xcode_14.2.xip to free up space
Move extracted Xcode package binary to /Applications folder
Double-click Xcode icon in Applications folder, accept the license, etc
Setup Build Environment
-----------------------
: create working directory
mkdir -p ~/Downloads/build-openconnect-gui
: install Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
: adjust gnutls homebrew formula so that it is not configured to look in a specific
: default trust store file causing the macOS access keychain to be used instead.
/opt/homebrew/bin/brew install gnutls
cp /opt/homebrew/opt/gnutls/.brew/gnutls.rb ~/Downloads/build-openconnect-gui/
sed -I '' -e '/--with-default-trust-store-file/d' ~/Downloads/build-openconnect-gui/gnutls.rb
/opt/homebrew/bin/brew uninstall gnutls
: install modified gnutls formula
/opt/homebrew/bin/brew install --build-from-source --formula ~/Downloads/build-openconnect-gui/gnutls.rb gnutls
: check if the xcode gui is selected for building applications
xcode-select -p
: switch the path if /Applications/Xcode.app/Contents/Developer is not returned
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
: install remaining dependencies using homebrew
/opt/homebrew/bin/brew install cmake openconnect qt@6 spdlog vulkan-headers pkgconfig
Get OpenConnect-GUI Source Code for v1.6.2
------------------------------------------
cd ~/Downloads/build-openconnect-gui
git clone https://gitlab.com/openconnect/openconnect-gui.git openconnect-gui-aarch64
cd openconnect-gui-aarch64
git tag
git checkout tags/v1.6.2
: modify deployment target from 10.12 to 12.0
sed -I '' -e 's/CMAKE_OSX_DEPLOYMENT_TARGET "10.12"/CMAKE_OSX_DEPLOYMENT_TARGET "12.0"/' ~/Downloads/build-openconnect-gui/openconnect-gui-aarch64/CMakeLists.txt
Build Package
-------------
/opt/homebrew/bin/cmake .
/opt/homebrew/bin/cmake --build .
: deploy Qt frameworks and libraries to app bundle
/opt/homebrew/opt/qt/bin/macdeployqt ./bin/OpenConnect-GUI.app
cp -R /opt/homebrew/Cellar/qt/6.7.3/lib/QtDBus.framework ./bin/OpenConnect-GUI.app/Contents/Frameworks
cp /opt/homebrew/opt/dbus/lib/libdbus-1.3.dylib ./bin/OpenConnect-GUI.app/Contents/Frameworks
install_name_tool -change /opt/homebrew/opt/dbus/lib/libdbus-1.3.dylib @executable_path/../Frameworks/libdbus-1.3.dylib ./bin/OpenConnect-GUI.app/Contents/Frameworks/QtDBus.framework/Versions/A/QtDBus
: re-sign code with adhoc signature
codesign --deep --force -s - bin/OpenConnect-GUI.app
Build x86_64 Package
====================
Install macOS 12.6 on an Intel-based Mac
Install Apple security updates (DO NOT upgrade the OS!)
Install Xcode
-------------
Download Xcode 14.2 from https://xcodereleases.com
Extract it by double-clicking on downloaded file (Xcode_14.2.xip)
Delete Xcode_14.2.xip to free up space
Move extracted Xcode package binary to /Applications folder
Double-click Xcode icon in Applications folder, accept the license, etc
Setup Build Environment
-----------------------
: create working directory
mkdir -p ~/Downloads/build-openconnect-gui
: install Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
: adjust gnutls homebrew formula so that it is not configured to look in a specific
: default trust store file causing the macOS access keychain to be used instead.
/usr/local/bin/brew install gnutls
cp /usr/local/opt/gnutls/.brew/gnutls.rb ~/Downloads/build-openconnect-gui/
sed -I '' -e '/--with-default-trust-store-file/d' ~/Downloads/build-openconnect-gui/gnutls.rb
/usr/local/bin/brew uninstall gnutls
: install modified gnutls formula
/usr/local/bin/brew install --build-from-source --formula ~/Downloads/build-openconnect-gui/gnutls.rb gnutls
: install modified gnutls formula
/usr/local/bin/brew install --build-from-source --formula ~/Downloads/build-openconnect-gui/gnutls.rb gnutls
: check if the xcode gui is selected for building applications
xcode-select -p
: switch the path if /Applications/Xcode.app/Contents/Developer is not returned
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
: install remaining dependencies using homebrew
/usr/local/bin/brew install cmake openconnect qt@6 spdlog vulkan-headers pkgconfig
Get OpenConnect-GUI Source Code for v1.6.2
------------------------------------------
cd ~/Downloads/build-openconnect-gui
git clone https://gitlab.com/openconnect/openconnect-gui.git openconnect-gui-x86_64
cd openconnect-gui-aarch64
git tag
git checkout tags/v1.6.2
: modify deployment target from 10.12 to 12.0
sed -I '' -e 's/CMAKE_OSX_DEPLOYMENT_TARGET "10.12"/CMAKE_OSX_DEPLOYMENT_TARGET "12.0"/' ~/Downloads/build-openconnect-gui/openconnect-gui-x86_64/CMakeLists.txt
Build Package
-------------
/usr/local/bin/cmake .
/usr/local/bin/cmake --build .
: deploy Qt frameworks and libraries to app bundle
/usr/local/opt/qt/bin/macdeployqt ./bin/OpenConnect-GUI.app
cp -R /usr/local/Cellar/qt/6.7.3/lib/QtDBus.framework ./bin/OpenConnect-GUI.app/Contents/Frameworks
cp /usr/local/opt/dbus/lib/libdbus-1.3.dylib ./bin/OpenConnect-GUI.app/Contents/Frameworks
install_name_tool -change /usr/local/opt/dbus/lib/libdbus-1.3.dylib @executable_path/../Frameworks/libdbus-1.3.dylib ./bin/OpenConnect-GUI.app/Contents/Frameworks/QtDBus.framework/Versions/A/QtDBus
: re-sign code with adhoc signature
codesign --deep --force -s - bin/OpenConnect-GUI.app
Copy OpenConnect-GUI x86_64 package binary to UTM VM running macOS 12 Monterey
==========================================================================
: create directory to hold OpenConnect-GUI x86_64 package binary
mkdir -p ~/Downloads/build-openconnect-gui/openconnect-gui-x86_64/bin
: move OpenConnect-GUI x86_64 package binary to ~/Downloads/build-openconnect-gui/openconnect-gui-x86_64/bin/
Create Universal Package
========================
: create base for universal package using aarch64 package
mkdir -p ~/Downloads/build-openconnect-gui/openconnect-gui-universal/bin
cd ~/Downloads/build-openconnect-gui
cp -pR openconnect-gui-aarch64/bin/OpenConnect-GUI.app openconnect-gui-universal/bin/
: create universal version of main binary
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/MacOS/OpenConnect-GUI openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/MacOS/OpenConnect-GUI -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/MacOS/OpenConnect-GUI
: create universal versions of frameworks included in package
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/QtCore.framework/Versions/A/QtCore openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/QtCore.framework/Versions/A/QtCore -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/QtCore.framework/Versions/A/QtCore
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/QtDBus.framework/Versions/A/QtDBus openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/QtDBus.framework/Versions/A/QtDBus -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/QtDBus.framework/Versions/A/QtDBus
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/QtGui.framework/Versions/A/QtGui openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/QtGui.framework/Versions/A/QtGui -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/QtGui.framework/Versions/A/QtGui
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/QtNetwork.framework/Versions/A/QtNetwork openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/QtNetwork.framework/Versions/A/QtNetwork -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/QtNetwork.framework/Versions/A/QtNetwork
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/QtStateMachine.framework/Versions/A/QtStateMachine openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/QtStateMachine.framework/Versions/A/QtStateMachine -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/QtStateMachine.framework/Versions/A/QtStateMachine
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/QtWidgets.framework/Versions/A/QtWidgets openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/QtWidgets.framework/Versions/A/QtWidgets -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/QtWidgets.framework/Versions/A/QtWidgets
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libb2.1.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libb2.1.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libb2.1.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libbrotlicommon.1.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libbrotlicommon.1.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libbrotlicommon.1.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libbrotlidec.1.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libbrotlidec.1.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libbrotlidec.1.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libdbus-1.3.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libdbus-1.3.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libdbus-1.3.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libdouble-conversion.3.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libdouble-conversion.3.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libdouble-conversion.3.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libfmt.11.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libfmt.11.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libfmt.11.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libfreetype.6.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libfreetype.6.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libfreetype.6.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libgio-2.0.0.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libgio-2.0.0.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libgio-2.0.0.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libglib-2.0.0.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libglib-2.0.0.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libglib-2.0.0.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libgmodule-2.0.0.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libgmodule-2.0.0.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libgmodule-2.0.0.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libgmp.10.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libgmp.10.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libgmp.10.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libgnutls.30.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libgnutls.30.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libgnutls.30.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libgobject-2.0.0.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libgobject-2.0.0.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libgobject-2.0.0.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libgraphite2.3.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libgraphite2.3.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libgraphite2.3.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libgthread-2.0.0.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libgthread-2.0.0.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libgthread-2.0.0.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libharfbuzz.0.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libharfbuzz.0.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libharfbuzz.0.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libhogweed.6.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libhogweed.6.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libhogweed.6.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libicudata.76.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libicudata.76.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libicudata.76.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libicui18n.76.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libicui18n.76.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libicui18n.76.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libicuuc.76.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libicuuc.76.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libicuuc.76.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libidn2.0.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libidn2.0.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libidn2.0.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libintl.8.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libintl.8.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libintl.8.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libjasper.7.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libjasper.7.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libjasper.7.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libjpeg.8.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libjpeg.8.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libjpeg.8.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/liblcms2.2.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/liblcms2.2.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/liblcms2.2.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/liblzma.5.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/liblzma.5.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/liblzma.5.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libmd4c.0.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libmd4c.0.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libmd4c.0.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libmng.2.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libmng.2.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libmng.2.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libnettle.8.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libnettle.8.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libnettle.8.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libopenconnect.5.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libopenconnect.5.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libopenconnect.5.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libp11-kit.0.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libp11-kit.0.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libp11-kit.0.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libpcre2-16.0.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libpcre2-16.0.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libpcre2-16.0.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libpcre2-8.0.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libpcre2-8.0.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libpcre2-8.0.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libpng16.16.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libpng16.16.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libpng16.16.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libsharpyuv.0.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libsharpyuv.0.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libsharpyuv.0.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libspdlog.1.15.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libspdlog.1.15.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libspdlog.1.15.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libstoken.1.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libstoken.1.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libstoken.1.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libtasn1.6.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libtasn1.6.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libtasn1.6.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libtiff.6.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libtiff.6.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libtiff.6.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libunistring.5.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libunistring.5.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libunistring.5.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libwebp.7.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libwebp.7.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libwebp.7.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libwebpdemux.2.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libwebpdemux.2.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libwebpdemux.2.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libwebpmux.3.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libwebpmux.3.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libwebpmux.3.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Frameworks/libzstd.1.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Frameworks/libzstd.1.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Frameworks/libzstd.1.dylib
: create universal version of package plugins iconengines
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Plugins/iconengines/libqsvgicon.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Plugins/iconengines/libqsvgicon.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Plugins/iconengines/libqsvgicon.dylib
: create universal version of package plugins imageformats
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqgif.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqgif.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqgif.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqicns.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqicns.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqicns.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqico.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqico.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqico.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqjp2.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqjp2.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqjp2.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqjpeg.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqjpeg.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqjpeg.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqmacheif.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqmacheif.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqmacheif.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqmng.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqmng.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqmng.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqpdf.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqpdf.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqpdf.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqtga.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqtga.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqtga.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqtiff.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqtiff.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqtiff.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqwbmp.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqwbmp.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqwbmp.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqwebp.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqwebp.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Plugins/imageformats/libqwebp.dylib
: create universal version of package plugins networkinformation
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Plugins/networkinformation/libqglib.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Plugins/networkinformation/libqglib.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Plugins/networkinformation/libqglib.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Plugins/networkinformation/libqscnetworkreachability.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Plugins/networkinformation/libqscnetworkreachability.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Plugins/networkinformation/libqscnetworkreachability.dylib
: create universal version of package plugins platforminputcontexts
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Plugins/platforminputcontexts/libqtvirtualkeyboardplugin.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Plugins/platforminputcontexts/libqtvirtualkeyboardplugin.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Plugins/platforminputcontexts/libqtvirtualkeyboardplugin.dylib
: create universal version of package plugins platforms
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Plugins/platforms/libqcocoa.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Plugins/platforms/libqcocoa.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Plugins/platforms/libqcocoa.dylib
: create universal version of package plugins styles
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Plugins/styles/libqmacstyle.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Plugins/styles/libqmacstyle.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Plugins/styles/libqmacstyle.dylib
: create universal version of package plugins tls
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Plugins/tls/libqcertonlybackend.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Plugins/tls/libqcertonlybackend.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Plugins/tls/libqcertonlybackend.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Plugins/tls/libqopensslbackend.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Plugins/tls/libqopensslbackend.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Plugins/tls/libqopensslbackend.dylib
lipo -create openconnect-gui-x86_64/bin/OpenConnect-GUI.app/Contents/Plugins/tls/libqsecuretransportbackend.dylib openconnect-gui-aarch64/bin/OpenConnect-GUI.app/Contents/Plugins/tls/libqsecuretransportbackend.dylib -output openconnect-gui-universal/bin/OpenConnect-GUI.app/Contents/Plugins/tls/libqsecuretransportbackend.dylib
: re-sign code with adhoc signature
codesign --deep --force -s - openconnect-gui-universal/bin/OpenConnect-GUI.app
The package ~/Downloads/build-openconnect-gui/openconnect-gui-universal/bin/OpenConnect-GUI.app can be run on both Intel and Apple silicon Macs running macOS 12 and above.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment