From 677a0b01a136d8340e39f0d8ea4a4f9ba69736a6 Mon Sep 17 00:00:00 2001
From: Alexander Barker <alex@1stleg.com>
Date: Tue, 23 Apr 2024 19:33:30 -0700
Subject: [PATCH] Add support for Mac Catalyst. Fixes #168

---
 .github/workflows/package.yml | 863 ++++++++++++++++++----------------
 CMakeLists.txt                |  21 +-
 src/darwin/dispatch_event.h   |   4 +
 src/darwin/input_helper.c     |   1 -
 src/darwin/input_helper.h     | 156 ++++++
 src/darwin/input_hook.c       |   2 +-
 6 files changed, 627 insertions(+), 420 deletions(-)

diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml
index 3e6fc50d..723a7409 100644
--- a/.github/workflows/package.yml
+++ b/.github/workflows/package.yml
@@ -5,7 +5,7 @@ on:
       - '**'
 
 jobs:
-  apple-arm64:
+  ios-arm64:
     runs-on: macos-latest
 
     steps:
@@ -17,314 +17,24 @@ jobs:
       - name: Compile
         env:
           CC: clang
-          CFLAGS: '-O2 -g -target arm64-apple-macos10.5 -flto -fomit-frame-pointer -fno-stack-protector -pipe'
-          LDFLAGS: '-Wl,-dead_strip_dylibs'
+          CFLAGS: '-O2 -g -target arm64-apple-ios13.1-macabi -miphoneos-version-min=13.1 -fembed-bitcode'
+          #LDFLAGS: '-Wl,-dead_strip_dylibs'
         shell: bash
         run: |
           cmake -B ${{github.workspace}}/build \
             -G "Unix Makefiles" \
-            -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/darwin/arm64 \
+            -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/ios/arm64 \
             -D CMAKE_VERBOSE_MAKEFILE=true \
+            -D CMAKE_IPHONEOS_DEPLOYMENT_TARGET=13.1 \ 
             -D BUILD_SHARED_LIBS=ON \
-            -D BUILD_DEMO=ON
-
-          cmake --build ${{github.workspace}}/build \
-            --parallel 2 \
-            --config RelWithDebInfo \
-            --clean-first
-
-          cmake --install ${{github.workspace}}/build --config RelWithDebInfo
-
-      - name: Upload
-        uses: actions/upload-artifact@v3
-        with:
-          name: nightly-build
-          path: ${{github.workspace}}/dist/**/*
-
-  apple-x86_64:
-    runs-on: macos-latest
-
-    steps:
-      - name: Checkout
-        uses: actions/checkout@v1
-        with:
-          submodules: true
-
-      - name: Compile
-        env:
-          CC: clang
-          CFLAGS: '-O2 -g -target x86_64-apple-macos10.5 -flto -fomit-frame-pointer -fno-stack-protector -pipe'
-          LDFLAGS: '-Wl,-dead_strip_dylibs'
-        shell: bash
-        run: |
-          cmake -B ${{github.workspace}}/build \
-            -G "Unix Makefiles" \
-            -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/darwin/x86_64 \
-            -D CMAKE_VERBOSE_MAKEFILE=true \
-            -D BUILD_SHARED_LIBS=ON \
-            -D BUILD_DEMO=ON
-
-          cmake --build ${{github.workspace}}/build \
-            --parallel 2 \
-            --config RelWithDebInfo \
-            --clean-first
-
-          cmake --install ${{github.workspace}}/build --config RelWithDebInfo
-
-      - name: Upload
-        uses: actions/upload-artifact@v3
-        with:
-          name: nightly-build
-          path: ${{github.workspace}}/dist/**/*
-
-
-  linux-arm:
-    runs-on: ubuntu-latest
-
-    steps:
-      - name: Checkout
-        uses: actions/checkout@v1
-        with:
-          submodules: true
-
-      - name: Setup
-        shell: bash
-        run: |
-          sudo rm -Rf /etc/apt/sources.list.d
-          sudo bash -c 'source /etc/lsb-release && echo "
-          deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME} main universe
-          deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-updates main universe
-          deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-backports main universe
-          # This only seems to be required on GitHub images
-          deb [arch=amd64,i386] https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu ${DISTRIB_CODENAME} main
+            -D USE_APPLICATION_SERVICES=OFF \
+            -D USE_IOKIT=OFF \
+            -D USE_APPKIT=OFF \
+            -D BUILD_DEMO=OFF
+          
+            #-D CMAKE_SYSTEM_NAME=iOS 
+            #
           
-          deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME} main universe
-          deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME}-updates main universe
-          deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME}-backports main universe
-          # This only seems to be required on GitHub images
-          deb [arch=arm64,armhf] https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu ${DISTRIB_CODENAME} main
-          " > /etc/apt/sources.list'
-
-          sudo dpkg --add-architecture armhf
-          sudo apt-get update -m
-
-          sudo apt-get install \
-            binutils-arm-linux-gnueabihf \
-            gcc-arm-linux-gnueabihf
-
-          sudo apt-get install \
-            libx11-dev:armhf \
-            libxtst-dev:armhf \
-            libxt-dev:armhf \
-            libxinerama-dev:armhf \
-            libx11-xcb-dev:armhf \
-            libxkbcommon-dev:armhf \
-            libxkbcommon-x11-dev:armhf \
-            libxkbfile-dev:armhf
-
-      - name: Compile
-        env:
-          CC: arm-linux-gnueabihf-gcc
-          CFLAGS: '-Os -march=armv7ve -mfpu=vfp -mfloat-abi=hard -g -flto -fomit-frame-pointer -fno-stack-protector -pipe'
-          LDFLAGS: '-fuse-ld=gold -Wl,-O1 -Wl,--as-needed'
-          PKG_CONFIG_PATH: '/usr/lib/arm-linux-gnueabihf/pkgconfig'
-        shell: bash
-        run: |
-          cmake -B ${{github.workspace}}/build \
-            -G "Unix Makefiles" \
-            -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/linux/arm \
-            -D CMAKE_VERBOSE_MAKEFILE=true \
-            -D BUILD_SHARED_LIBS=ON \
-            -D BUILD_DEMO=ON
-
-          cmake --build ${{github.workspace}}/build \
-            --parallel 2 \
-            --config RelWithDebInfo \
-            --clean-first
-
-          cmake --install ${{github.workspace}}/build --config RelWithDebInfo
-
-      - name: Upload
-        uses: actions/upload-artifact@v3
-        with:
-          name: nightly-build
-          path: ${{github.workspace}}/dist/**/*
-
-  linux-arm64:
-    runs-on: ubuntu-latest
-
-    steps:
-      - name: Checkout
-        uses: actions/checkout@v1
-        with:
-          submodules: true
-
-      - name: Setup
-        shell: bash
-        run: |
-          sudo rm -Rf /etc/apt/sources.list.d/*
-          sudo bash -c 'source /etc/lsb-release && echo "
-          deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME} main universe
-          deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-updates main universe
-          deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-backports main universe
-          # This only seems to be required on GitHub images
-          deb [arch=amd64,i386] https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu ${DISTRIB_CODENAME} main
-
-          deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME} main universe
-          deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME}-updates main universe
-          deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME}-backports main universe
-          # This only seems to be required on GitHub images
-          deb [arch=arm64,armhf] https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu ${DISTRIB_CODENAME} main
-          " > /etc/apt/sources.list'
-
-          sudo dpkg --add-architecture arm64
-          sudo apt-get update -m
-
-          sudo apt-get install \
-            binutils-aarch64-linux-gnu \
-            gcc-aarch64-linux-gnu
-
-          sudo apt-get install \
-            libx11-dev:arm64 \
-            libxtst-dev:arm64 \
-            libxt-dev:arm64 \
-            libxinerama-dev:arm64 \
-            libx11-xcb-dev:arm64 \
-            libxkbcommon-dev:arm64 \
-            libxkbcommon-x11-dev:arm64 \
-            libxkbfile-dev:arm64
-
-      - name: Compile
-        env:
-          CC: aarch64-linux-gnu-gcc
-          CFLAGS: '-Os -march=armv8-a+crc -mtune=cortex-a53 -g -flto -fomit-frame-pointer -fno-stack-protector -pipe'
-          LDFLAGS: '-fuse-ld=gold -Wl,-O1 -Wl,--as-needed'
-          PKG_CONFIG_PATH: '/usr/lib/aarch64-linux-gnu/pkgconfig'
-        shell: bash
-        run: |
-          cmake -B ${{github.workspace}}/build \
-            -G "Unix Makefiles" \
-            -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/linux/arm64 \
-            -D CMAKE_VERBOSE_MAKEFILE=true \
-            -D BUILD_SHARED_LIBS=ON \
-            -D BUILD_DEMO=ON
-
-          cmake --build ${{github.workspace}}/build \
-            --parallel 2 \
-            --config RelWithDebInfo \
-            --clean-first
-
-          cmake --install ${{github.workspace}}/build --config RelWithDebInfo
-
-      - name: Upload
-        uses: actions/upload-artifact@v3
-        with:
-          name: nightly-build
-          path: ${{github.workspace}}/dist/**/*
-
-  linux-x86:
-    runs-on: ubuntu-latest
-
-    steps:
-      - name: Checkout
-        uses: actions/checkout@v1
-        with:
-          submodules: true
-
-      - name: Setup
-        shell: bash
-        run: |
-          sudo rm -Rf /etc/apt/sources.list.d
-          sudo bash -c 'source /etc/lsb-release && echo "
-          deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME} main universe
-          deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-updates main universe
-          deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-backports main universe
-          # This only seems to be required on GitHub images
-          deb [arch=amd64,i386] https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu ${DISTRIB_CODENAME} main
-          " > /etc/apt/sources.list'
-
-          sudo dpkg --add-architecture i386
-          sudo apt-get update -m
-
-          sudo apt-get install \
-            binutils-i686-linux-gnu \
-            gcc-i686-linux-gnu
-
-          sudo apt-get install \
-            libx11-dev:i386 \
-            libxtst-dev:i386 \
-            libxt-dev:i386 \
-            libxinerama-dev:i386 \
-            libx11-xcb-dev:i386 \
-            libxkbcommon-dev:i386 \
-            libxkbcommon-x11-dev:i386 \
-            libxkbfile-dev:i386
-
-      - name: Compile
-        env:
-          CC: i686-linux-gnu-gcc
-          CFLAGS: '-O2 -march=i686 -mtune=generic -g -fomit-frame-pointer -flto -fno-stack-protector -pipe'
-          LDFLAGS: '-fuse-ld=gold -Wl,-O1 -Wl,--as-needed'
-          PKG_CONFIG_PATH: '/usr/lib/i386-linux-gnu/pkgconfig'
-        shell: bash
-        run: |
-          cmake -B ${{github.workspace}}/build \
-            -G "Unix Makefiles" \
-            -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/linux/x86 \
-            -D CMAKE_VERBOSE_MAKEFILE=true \
-            -D BUILD_SHARED_LIBS=ON \
-            -D BUILD_DEMO=ON
-
-          cmake --build ${{github.workspace}}/build \
-            --parallel 2 \
-            --config RelWithDebInfo \
-            --clean-first
-
-          cmake --install ${{github.workspace}}/build --config RelWithDebInfo
-
-      - name: Upload
-        uses: actions/upload-artifact@v3
-        with:
-          name: nightly-build
-          path: ${{github.workspace}}/dist/**/*
-
-  linux-x86_64:
-    runs-on: ubuntu-latest
-
-    steps:
-      - name: Checkout
-        uses: actions/checkout@v1
-        with:
-          submodules: true
-
-      - name: Setup
-        shell: bash
-        run: |
-          sudo apt-get install \
-            libx11-dev:amd64 \
-            libxtst-dev:amd64 \
-            libxt-dev:amd64 \
-            libxinerama-dev:amd64 \
-            libx11-xcb-dev:amd64 \
-            libxkbcommon-dev:amd64 \
-            libxkbcommon-x11-dev:amd64 \
-            libxkbfile-dev:amd64
-
-      - name: Compile
-        env:
-          CC: x86_64-linux-gnu-gcc
-          CFLAGS: '-O2 -march=x86-64 -mtune=generic -g -fomit-frame-pointer -flto -fno-stack-protector -pipe'
-          LDFLAGS: '-fuse-ld=gold -Wl,-O1 -Wl,--as-needed'
-          PKG_CONFIG_PATH: '/usr/lib/x86_64-linux-gnu/pkgconfig'
-        shell: bash
-        run: |
-          cmake -B ${{github.workspace}}/build \
-            -G "Unix Makefiles" \
-            -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/linux/x86_64 \
-            -D CMAKE_VERBOSE_MAKEFILE=true \
-            -D BUILD_SHARED_LIBS=ON \
-            -D BUILD_DEMO=ON
-
           cmake --build ${{github.workspace}}/build \
             --parallel 2 \
             --config RelWithDebInfo \
@@ -338,111 +48,444 @@ jobs:
           name: nightly-build
           path: ${{github.workspace}}/dist/**/*
 
-
-  windows-arm:
-    runs-on: windows-latest
-
-    steps:
-      - uses: actions/checkout@v1
-        with:
-          submodules: true
-
-      - name: Setup
-        uses: ilammy/msvc-dev-cmd@v1
-        with:
-          arch: amd64_arm
-
-      - name: Compile
-        shell: cmd
-        run: |
-          cmake -B ${{github.workspace}}\build ^
-            -G "Visual Studio 17 2022" -A ARM ^
-            -D CMAKE_INSTALL_PREFIX=${{github.workspace}}\dist\windows\arm ^
-            -D CMAKE_VERBOSE_MAKEFILE=true ^
-            -D BUILD_SHARED_LIBS=ON ^
-            -D BUILD_DEMO=ON
-
-          cmake --build ${{github.workspace}}\build ^
-            --parallel 2 ^
-            --config RelWithDebInfo ^
-            --clean-first
-
-          cmake --install ${{github.workspace}}\build --config RelWithDebInfo
-
-      - name: Upload
-        uses: actions/upload-artifact@v3
-        with:
-          name: nightly-build
-          path: ${{github.workspace}}/dist/**/*
-
-  windows-x86:
-    runs-on: windows-latest
-
-    steps:
-      - uses: actions/checkout@v1
-        with:
-          submodules: true
-
-      - name: Setup
-        uses: ilammy/msvc-dev-cmd@v1
-        with:
-          arch: amd64_x86
-
-      - name: Compile
-        shell: cmd
-        run: |
-          cmake -B ${{github.workspace}}\build ^
-            -G "Visual Studio 17 2022" -A Win32 ^
-            -D CMAKE_INSTALL_PREFIX=${{github.workspace}}\dist\windows\x86 ^
-            -D CMAKE_VERBOSE_MAKEFILE=true ^
-            -D BUILD_SHARED_LIBS=ON ^
-            -D BUILD_DEMO=ON
-
-          cmake --build ${{github.workspace}}\build ^
-            --parallel 2 ^
-            --config RelWithDebInfo ^
-            --clean-first
-
-          cmake --install ${{github.workspace}}\build --config RelWithDebInfo
-
-      - name: Upload
-        uses: actions/upload-artifact@v3
-        with:
-          name: nightly-build
-          path: ${{github.workspace}}/dist/**/*
-
-  windows-x86_64:
-    runs-on: windows-latest
-
-    steps:
-      - uses: actions/checkout@v1
-        with:
-          submodules: true
-
-      - name: Setup
-        uses: ilammy/msvc-dev-cmd@v1
-        with:
-          arch: amd64
-
-      - name: Compile
-        shell: cmd
-        run: |
-          cmake -B ${{github.workspace}}\build ^
-            -G "Visual Studio 17 2022" -A x64 ^
-            -D CMAKE_INSTALL_PREFIX=${{github.workspace}}\dist\windows\x86_64 ^
-            -D CMAKE_VERBOSE_MAKEFILE=true ^
-            -D BUILD_SHARED_LIBS=ON ^
-            -D BUILD_DEMO=ON
-
-          cmake --build ${{github.workspace}}\build ^
-            --parallel 2 ^
-            --config RelWithDebInfo ^
-            --clean-first
-
-          cmake --install ${{github.workspace}}\build --config RelWithDebInfo
-
-      - name: Upload
-        uses: actions/upload-artifact@v3
-        with:
-          name: nightly-build
-          path: ${{github.workspace}}/dist/**/*
+#  macos-arm64:
+#    runs-on: macos-latest
+#
+#    steps:
+#      - name: Checkout
+#        uses: actions/checkout@v1
+#        with:
+#          submodules: true
+#
+#      - name: Compile
+#        env:
+#          CC: clang
+#          CFLAGS: '-O2 -g -target arm64-apple-macos10.5 -flto -fomit-frame-pointer -fno-stack-protector -pipe'
+#          LDFLAGS: '-Wl,-dead_strip_dylibs'
+#        shell: bash
+#        run: |
+#          cmake -B ${{github.workspace}}/build \
+#            -G "Unix Makefiles" \
+#            -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/macos/arm64 \
+#            -D CMAKE_VERBOSE_MAKEFILE=true \
+#            -D BUILD_SHARED_LIBS=ON \
+#            -D BUILD_DEMO=ON
+#
+#          cmake --build ${{github.workspace}}/build \
+#            --parallel 2 \
+#            --config RelWithDebInfo \
+#            --clean-first
+#
+#          cmake --install ${{github.workspace}}/build --config RelWithDebInfo
+#
+#      - name: Upload
+#        uses: actions/upload-artifact@v3
+#        with:
+#          name: nightly-build
+#          path: ${{github.workspace}}/dist/**/*
+#
+#  macos-x86_64:
+#    runs-on: macos-latest
+#
+#    steps:
+#      - name: Checkout
+#        uses: actions/checkout@v1
+#        with:
+#          submodules: true
+#
+#      - name: Compile
+#        env:
+#          CC: clang
+#          CFLAGS: '-O2 -g -target x86_64-apple-macos10.5 -flto -fomit-frame-pointer -fno-stack-protector -pipe'
+#          LDFLAGS: '-Wl,-dead_strip_dylibs'
+#        shell: bash
+#        run: |
+#          cmake -B ${{github.workspace}}/build \
+#            -G "Unix Makefiles" \
+#            -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/macos/x86_64 \
+#            -D CMAKE_VERBOSE_MAKEFILE=true \
+#            -D BUILD_SHARED_LIBS=ON \
+#            -D BUILD_DEMO=ON
+#
+#          cmake --build ${{github.workspace}}/build \
+#            --parallel 2 \
+#            --config RelWithDebInfo \
+#            --clean-first
+#
+#          cmake --install ${{github.workspace}}/build --config RelWithDebInfo
+#
+#      - name: Upload
+#        uses: actions/upload-artifact@v3
+#        with:
+#          name: nightly-build
+#          path: ${{github.workspace}}/dist/**/*
+#
+#
+#  linux-arm:
+#    runs-on: ubuntu-latest
+#
+#    steps:
+#      - name: Checkout
+#        uses: actions/checkout@v1
+#        with:
+#          submodules: true
+#
+#      - name: Setup
+#        shell: bash
+#        run: |
+#          sudo rm -Rf /etc/apt/sources.list.d
+#          sudo bash -c 'source /etc/lsb-release && echo "
+#          deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME} main universe
+#          deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-updates main universe
+#          deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-backports main universe
+#          # This only seems to be required on GitHub images
+#          deb [arch=amd64,i386] https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu ${DISTRIB_CODENAME} main
+#
+#          deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME} main universe
+#          deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME}-updates main universe
+#          deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME}-backports main universe
+#          # This only seems to be required on GitHub images
+#          deb [arch=arm64,armhf] https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu ${DISTRIB_CODENAME} main
+#          " > /etc/apt/sources.list'
+#
+#          sudo dpkg --add-architecture armhf
+#          sudo apt-get update -m
+#
+#          sudo apt-get install \
+#            binutils-arm-linux-gnueabihf \
+#            gcc-arm-linux-gnueabihf
+#
+#          sudo apt-get install \
+#            libx11-dev:armhf \
+#            libxtst-dev:armhf \
+#            libxt-dev:armhf \
+#            libxinerama-dev:armhf \
+#            libx11-xcb-dev:armhf \
+#            libxkbcommon-dev:armhf \
+#            libxkbcommon-x11-dev:armhf \
+#            libxkbfile-dev:armhf
+#
+#      - name: Compile
+#        env:
+#          CC: arm-linux-gnueabihf-gcc
+#          CFLAGS: '-Os -march=armv7ve -mfpu=vfp -mfloat-abi=hard -g -flto -fomit-frame-pointer -fno-stack-protector -pipe'
+#          LDFLAGS: '-fuse-ld=gold -Wl,-O1 -Wl,--as-needed'
+#          PKG_CONFIG_PATH: '/usr/lib/arm-linux-gnueabihf/pkgconfig'
+#        shell: bash
+#        run: |
+#          cmake -B ${{github.workspace}}/build \
+#            -G "Unix Makefiles" \
+#            -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/linux/arm \
+#            -D CMAKE_VERBOSE_MAKEFILE=true \
+#            -D BUILD_SHARED_LIBS=ON \
+#            -D BUILD_DEMO=ON
+#
+#          cmake --build ${{github.workspace}}/build \
+#            --parallel 2 \
+#            --config RelWithDebInfo \
+#            --clean-first
+#
+#          cmake --install ${{github.workspace}}/build --config RelWithDebInfo
+#
+#      - name: Upload
+#        uses: actions/upload-artifact@v3
+#        with:
+#          name: nightly-build
+#          path: ${{github.workspace}}/dist/**/*
+#
+#  linux-arm64:
+#    runs-on: ubuntu-latest
+#
+#    steps:
+#      - name: Checkout
+#        uses: actions/checkout@v1
+#        with:
+#          submodules: true
+#
+#      - name: Setup
+#        shell: bash
+#        run: |
+#          sudo rm -Rf /etc/apt/sources.list.d/*
+#          sudo bash -c 'source /etc/lsb-release && echo "
+#          deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME} main universe
+#          deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-updates main universe
+#          deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-backports main universe
+#          # This only seems to be required on GitHub images
+#          deb [arch=amd64,i386] https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu ${DISTRIB_CODENAME} main
+#
+#          deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME} main universe
+#          deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME}-updates main universe
+#          deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME}-backports main universe
+#          # This only seems to be required on GitHub images
+#          deb [arch=arm64,armhf] https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu ${DISTRIB_CODENAME} main
+#          " > /etc/apt/sources.list'
+#
+#          sudo dpkg --add-architecture arm64
+#          sudo apt-get update -m
+#
+#          sudo apt-get install \
+#            binutils-aarch64-linux-gnu \
+#            gcc-aarch64-linux-gnu
+#
+#          sudo apt-get install \
+#            libx11-dev:arm64 \
+#            libxtst-dev:arm64 \
+#            libxt-dev:arm64 \
+#            libxinerama-dev:arm64 \
+#            libx11-xcb-dev:arm64 \
+#            libxkbcommon-dev:arm64 \
+#            libxkbcommon-x11-dev:arm64 \
+#            libxkbfile-dev:arm64
+#
+#      - name: Compile
+#        env:
+#          CC: aarch64-linux-gnu-gcc
+#          CFLAGS: '-Os -march=armv8-a+crc -mtune=cortex-a53 -g -flto -fomit-frame-pointer -fno-stack-protector -pipe'
+#          LDFLAGS: '-fuse-ld=gold -Wl,-O1 -Wl,--as-needed'
+#          PKG_CONFIG_PATH: '/usr/lib/aarch64-linux-gnu/pkgconfig'
+#        shell: bash
+#        run: |
+#          cmake -B ${{github.workspace}}/build \
+#            -G "Unix Makefiles" \
+#            -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/linux/arm64 \
+#            -D CMAKE_VERBOSE_MAKEFILE=true \
+#            -D BUILD_SHARED_LIBS=ON \
+#            -D BUILD_DEMO=ON
+#
+#          cmake --build ${{github.workspace}}/build \
+#            --parallel 2 \
+#            --config RelWithDebInfo \
+#            --clean-first
+#
+#          cmake --install ${{github.workspace}}/build --config RelWithDebInfo
+#
+#      - name: Upload
+#        uses: actions/upload-artifact@v3
+#        with:
+#          name: nightly-build
+#          path: ${{github.workspace}}/dist/**/*
+#
+#  linux-x86:
+#    runs-on: ubuntu-latest
+#
+#    steps:
+#      - name: Checkout
+#        uses: actions/checkout@v1
+#        with:
+#          submodules: true
+#
+#      - name: Setup
+#        shell: bash
+#        run: |
+#          sudo rm -Rf /etc/apt/sources.list.d
+#          sudo bash -c 'source /etc/lsb-release && echo "
+#          deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME} main universe
+#          deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-updates main universe
+#          deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-backports main universe
+#          # This only seems to be required on GitHub images
+#          deb [arch=amd64,i386] https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu ${DISTRIB_CODENAME} main
+#          " > /etc/apt/sources.list'
+#
+#          sudo dpkg --add-architecture i386
+#          sudo apt-get update -m
+#
+#          sudo apt-get install \
+#            binutils-i686-linux-gnu \
+#            gcc-i686-linux-gnu
+#
+#          sudo apt-get install \
+#            libx11-dev:i386 \
+#            libxtst-dev:i386 \
+#            libxt-dev:i386 \
+#            libxinerama-dev:i386 \
+#            libx11-xcb-dev:i386 \
+#            libxkbcommon-dev:i386 \
+#            libxkbcommon-x11-dev:i386 \
+#            libxkbfile-dev:i386
+#
+#      - name: Compile
+#        env:
+#          CC: i686-linux-gnu-gcc
+#          CFLAGS: '-O2 -march=i686 -mtune=generic -g -fomit-frame-pointer -flto -fno-stack-protector -pipe'
+#          LDFLAGS: '-fuse-ld=gold -Wl,-O1 -Wl,--as-needed'
+#          PKG_CONFIG_PATH: '/usr/lib/i386-linux-gnu/pkgconfig'
+#        shell: bash
+#        run: |
+#          cmake -B ${{github.workspace}}/build \
+#            -G "Unix Makefiles" \
+#            -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/linux/x86 \
+#            -D CMAKE_VERBOSE_MAKEFILE=true \
+#            -D BUILD_SHARED_LIBS=ON \
+#            -D BUILD_DEMO=ON
+#
+#          cmake --build ${{github.workspace}}/build \
+#            --parallel 2 \
+#            --config RelWithDebInfo \
+#            --clean-first
+#
+#          cmake --install ${{github.workspace}}/build --config RelWithDebInfo
+#
+#      - name: Upload
+#        uses: actions/upload-artifact@v3
+#        with:
+#          name: nightly-build
+#          path: ${{github.workspace}}/dist/**/*
+#
+#  linux-x86_64:
+#    runs-on: ubuntu-latest
+#
+#    steps:
+#      - name: Checkout
+#        uses: actions/checkout@v1
+#        with:
+#          submodules: true
+#
+#      - name: Setup
+#        shell: bash
+#        run: |
+#          sudo apt-get install \
+#            libx11-dev:amd64 \
+#            libxtst-dev:amd64 \
+#            libxt-dev:amd64 \
+#            libxinerama-dev:amd64 \
+#            libx11-xcb-dev:amd64 \
+#            libxkbcommon-dev:amd64 \
+#            libxkbcommon-x11-dev:amd64 \
+#            libxkbfile-dev:amd64
+#
+#      - name: Compile
+#        env:
+#          CC: x86_64-linux-gnu-gcc
+#          CFLAGS: '-O2 -march=x86-64 -mtune=generic -g -fomit-frame-pointer -flto -fno-stack-protector -pipe'
+#          LDFLAGS: '-fuse-ld=gold -Wl,-O1 -Wl,--as-needed'
+#          PKG_CONFIG_PATH: '/usr/lib/x86_64-linux-gnu/pkgconfig'
+#        shell: bash
+#        run: |
+#          cmake -B ${{github.workspace}}/build \
+#            -G "Unix Makefiles" \
+#            -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/linux/x86_64 \
+#            -D CMAKE_VERBOSE_MAKEFILE=true \
+#            -D BUILD_SHARED_LIBS=ON \
+#            -D BUILD_DEMO=ON
+#
+#          cmake --build ${{github.workspace}}/build \
+#            --parallel 2 \
+#            --config RelWithDebInfo \
+#            --clean-first
+#
+#          cmake --install ${{github.workspace}}/build --config RelWithDebInfo
+#
+#      - name: Upload
+#        uses: actions/upload-artifact@v3
+#        with:
+#          name: nightly-build
+#          path: ${{github.workspace}}/dist/**/*
+#
+#
+#  windows-arm:
+#    runs-on: windows-latest
+#
+#    steps:
+#      - uses: actions/checkout@v1
+#        with:
+#          submodules: true
+#
+#      - name: Setup
+#        uses: ilammy/msvc-dev-cmd@v1
+#        with:
+#          arch: amd64_arm
+#
+#      - name: Compile
+#        shell: cmd
+#        run: |
+#          cmake -B ${{github.workspace}}\build ^
+#            -G "Visual Studio 17 2022" -A ARM ^
+#            -D CMAKE_INSTALL_PREFIX=${{github.workspace}}\dist\windows\arm ^
+#            -D CMAKE_VERBOSE_MAKEFILE=true ^
+#            -D BUILD_SHARED_LIBS=ON ^
+#            -D BUILD_DEMO=ON
+#
+#          cmake --build ${{github.workspace}}\build ^
+#            --parallel 2 ^
+#            --config RelWithDebInfo ^
+#            --clean-first
+#
+#          cmake --install ${{github.workspace}}\build --config RelWithDebInfo
+#
+#      - name: Upload
+#        uses: actions/upload-artifact@v3
+#        with:
+#          name: nightly-build
+#          path: ${{github.workspace}}/dist/**/*
+#
+#  windows-x86:
+#    runs-on: windows-latest
+#
+#    steps:
+#      - uses: actions/checkout@v1
+#        with:
+#          submodules: true
+#
+#      - name: Setup
+#        uses: ilammy/msvc-dev-cmd@v1
+#        with:
+#          arch: amd64_x86
+#
+#      - name: Compile
+#        shell: cmd
+#        run: |
+#          cmake -B ${{github.workspace}}\build ^
+#            -G "Visual Studio 17 2022" -A Win32 ^
+#            -D CMAKE_INSTALL_PREFIX=${{github.workspace}}\dist\windows\x86 ^
+#            -D CMAKE_VERBOSE_MAKEFILE=true ^
+#            -D BUILD_SHARED_LIBS=ON ^
+#            -D BUILD_DEMO=ON
+#
+#          cmake --build ${{github.workspace}}\build ^
+#            --parallel 2 ^
+#            --config RelWithDebInfo ^
+#            --clean-first
+#
+#          cmake --install ${{github.workspace}}\build --config RelWithDebInfo
+#
+#      - name: Upload
+#        uses: actions/upload-artifact@v3
+#        with:
+#          name: nightly-build
+#          path: ${{github.workspace}}/dist/**/*
+#
+#  windows-x86_64:
+#    runs-on: windows-latest
+#
+#    steps:
+#      - uses: actions/checkout@v1
+#        with:
+#          submodules: true
+#
+#      - name: Setup
+#        uses: ilammy/msvc-dev-cmd@v1
+#        with:
+#          arch: amd64
+#
+#      - name: Compile
+#        shell: cmd
+#        run: |
+#          cmake -B ${{github.workspace}}\build ^
+#            -G "Visual Studio 17 2022" -A x64 ^
+#            -D CMAKE_INSTALL_PREFIX=${{github.workspace}}\dist\windows\x86_64 ^
+#            -D CMAKE_VERBOSE_MAKEFILE=true ^
+#            -D BUILD_SHARED_LIBS=ON ^
+#            -D BUILD_DEMO=ON
+#
+#          cmake --build ${{github.workspace}}\build ^
+#            --parallel 2 ^
+#            --config RelWithDebInfo ^
+#            --clean-first
+#
+#          cmake --install ${{github.workspace}}\build --config RelWithDebInfo
+#
+#      - name: Upload
+#        uses: actions/upload-artifact@v3
+#        with:
+#          name: nightly-build
+#          path: ${{github.workspace}}/dist/**/*
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8186905d..9568c009 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -194,21 +194,26 @@ if(UNIX AND NOT APPLE)
     endif()
 elseif(APPLE)
     set(CMAKE_MACOSX_RPATH 1)
-    set(CMAKE_OSX_DEPLOYMENT_TARGET "10.5")
-
-    find_package(Threads REQUIRED)
-    target_link_libraries(uiohook "${CMAKE_THREAD_LIBS_INIT}")
-
-    find_library(CARBON Carbon REQUIRED)
-    target_include_directories(uiohook PRIVATE "${CARBON}")
-    target_link_libraries(uiohook "${CARBON}")
+    #set(CMAKE_OSX_DEPLOYMENT_TARGET "10.5")
 
     option(USE_APPLICATION_SERVICES "ApplicationServices framework (default: ON)" ON)
     if(USE_APPLICATION_SERVICES)
+        find_package(Threads REQUIRED)
+        target_link_libraries(uiohook "${CMAKE_THREAD_LIBS_INIT}")
+
         find_library(APPLICATION_SERVICES ApplicationServices REQUIRED)
         add_compile_definitions(USE_APPLICATION_SERVICES)
         target_include_directories(uiohook PRIVATE "${APPLICATION_SERVICES}")
         target_link_libraries(uiohook "${APPLICATION_SERVICES}")
+    else()
+        # If we aren't using APPLICATION_SERVICES, we need to link against other required libraries.
+        find_library(CORE_FOUNDATION CoreFoundation REQUIRED)
+        target_include_directories(uiohook PRIVATE "${CORE_FOUNDATION}")
+        target_link_libraries(uiohook "${CORE_FOUNDATION}")
+
+        find_library(CORE_GRAPHICS CoreGraphics REQUIRED)
+        target_include_directories(uiohook PRIVATE "${CORE_GRAPHICS}")
+        target_link_libraries(uiohook "${CORE_GRAPHICS}")
     endif()
 
     option(USE_IOKIT "IOKit framework (default: ON)" ON)
diff --git a/src/darwin/dispatch_event.h b/src/darwin/dispatch_event.h
index 20ef2bee..2915c816 100644
--- a/src/darwin/dispatch_event.h
+++ b/src/darwin/dispatch_event.h
@@ -19,7 +19,11 @@
 #include <stdbool.h>
 #include <stdint.h>
 
+#ifdef USE_APPLICATION_SERVICES
 #include <ApplicationServices/ApplicationServices.h>
+#else
+#include <CoreGraphics/CoreGraphics.h>
+#endif
 
 extern bool dispatch_hook_enabled(uint64_t timestamp);
 
diff --git a/src/darwin/input_helper.c b/src/darwin/input_helper.c
index c1d3444c..aea4be15 100644
--- a/src/darwin/input_helper.c
+++ b/src/darwin/input_helper.c
@@ -728,7 +728,6 @@ static void tis_message_to_unicode(void *info) {
                             tis->length = 0;
                         }
                     }
-
                 }
             }
 
diff --git a/src/darwin/input_helper.h b/src/darwin/input_helper.h
index 8ae40a23..60795c56 100644
--- a/src/darwin/input_helper.h
+++ b/src/darwin/input_helper.h
@@ -23,14 +23,170 @@
 #ifndef _included_input_helper
 #define _included_input_helper
 
+#ifdef USE_APPLICATION_SERVICES
 #include <ApplicationServices/ApplicationServices.h>
 #include <Carbon/Carbon.h> // For HIToolbox kVK_ key codes and TIS functions.
+#endif
 
 #ifdef USE_IOKIT
 #include <IOKit/hidsystem/ev_keymap.h>
 #endif
 #include <stdbool.h>
 
+#ifndef USE_APPLICATION_SERVICES
+// If we are not using ApplicationServices, we don't need Carbon.HIToolbox but we still need some of the constants.
+
+/*
+ *  Summary:
+ *    Virtual keycodes
+ *
+ *  Discussion:
+ *    These constants are the virtual keycodes defined originally in
+ *    Inside Mac Volume V, pg. V-191. They identify physical keys on a
+ *    keyboard. Those constants with "ANSI" in the name are labeled
+ *    according to the key position on an ANSI-standard US keyboard.
+ *    For example, kVK_ANSI_A indicates the virtual keycode for the key
+ *    with the letter 'A' in the US keyboard layout. Other keyboard
+ *    layouts may have the 'A' key label on a different physical key;
+ *    in this case, pressing 'A' will generate a different virtual
+ *    keycode.
+ */
+enum {
+  kVK_ANSI_A                    = 0x00,
+  kVK_ANSI_S                    = 0x01,
+  kVK_ANSI_D                    = 0x02,
+  kVK_ANSI_F                    = 0x03,
+  kVK_ANSI_H                    = 0x04,
+  kVK_ANSI_G                    = 0x05,
+  kVK_ANSI_Z                    = 0x06,
+  kVK_ANSI_X                    = 0x07,
+  kVK_ANSI_C                    = 0x08,
+  kVK_ANSI_V                    = 0x09,
+  kVK_ANSI_B                    = 0x0B,
+  kVK_ANSI_Q                    = 0x0C,
+  kVK_ANSI_W                    = 0x0D,
+  kVK_ANSI_E                    = 0x0E,
+  kVK_ANSI_R                    = 0x0F,
+  kVK_ANSI_Y                    = 0x10,
+  kVK_ANSI_T                    = 0x11,
+  kVK_ANSI_1                    = 0x12,
+  kVK_ANSI_2                    = 0x13,
+  kVK_ANSI_3                    = 0x14,
+  kVK_ANSI_4                    = 0x15,
+  kVK_ANSI_6                    = 0x16,
+  kVK_ANSI_5                    = 0x17,
+  kVK_ANSI_Equal                = 0x18,
+  kVK_ANSI_9                    = 0x19,
+  kVK_ANSI_7                    = 0x1A,
+  kVK_ANSI_Minus                = 0x1B,
+  kVK_ANSI_8                    = 0x1C,
+  kVK_ANSI_0                    = 0x1D,
+  kVK_ANSI_RightBracket         = 0x1E,
+  kVK_ANSI_O                    = 0x1F,
+  kVK_ANSI_U                    = 0x20,
+  kVK_ANSI_LeftBracket          = 0x21,
+  kVK_ANSI_I                    = 0x22,
+  kVK_ANSI_P                    = 0x23,
+  kVK_ANSI_L                    = 0x25,
+  kVK_ANSI_J                    = 0x26,
+  kVK_ANSI_Quote                = 0x27,
+  kVK_ANSI_K                    = 0x28,
+  kVK_ANSI_Semicolon            = 0x29,
+  kVK_ANSI_Backslash            = 0x2A,
+  kVK_ANSI_Comma                = 0x2B,
+  kVK_ANSI_Slash                = 0x2C,
+  kVK_ANSI_N                    = 0x2D,
+  kVK_ANSI_M                    = 0x2E,
+  kVK_ANSI_Period               = 0x2F,
+  kVK_ANSI_Grave                = 0x32,
+  kVK_ANSI_KeypadDecimal        = 0x41,
+  kVK_ANSI_KeypadMultiply       = 0x43,
+  kVK_ANSI_KeypadPlus           = 0x45,
+  kVK_ANSI_KeypadClear          = 0x47,
+  kVK_ANSI_KeypadDivide         = 0x4B,
+  kVK_ANSI_KeypadEnter          = 0x4C,
+  kVK_ANSI_KeypadMinus          = 0x4E,
+  kVK_ANSI_KeypadEquals         = 0x51,
+  kVK_ANSI_Keypad0              = 0x52,
+  kVK_ANSI_Keypad1              = 0x53,
+  kVK_ANSI_Keypad2              = 0x54,
+  kVK_ANSI_Keypad3              = 0x55,
+  kVK_ANSI_Keypad4              = 0x56,
+  kVK_ANSI_Keypad5              = 0x57,
+  kVK_ANSI_Keypad6              = 0x58,
+  kVK_ANSI_Keypad7              = 0x59,
+  kVK_ANSI_Keypad8              = 0x5B,
+  kVK_ANSI_Keypad9              = 0x5C
+};
+
+/* keycodes for keys that are independent of keyboard layout*/
+enum {
+  kVK_Return                    = 0x24,
+  kVK_Tab                       = 0x30,
+  kVK_Space                     = 0x31,
+  kVK_Delete                    = 0x33,
+  kVK_Escape                    = 0x35,
+  kVK_Command                   = 0x37,
+  kVK_Shift                     = 0x38,
+  kVK_CapsLock                  = 0x39,
+  kVK_Option                    = 0x3A,
+  kVK_Control                   = 0x3B,
+  kVK_RightShift                = 0x3C,
+  kVK_RightOption               = 0x3D,
+  kVK_RightControl              = 0x3E,
+  kVK_Function                  = 0x3F,
+  kVK_F17                       = 0x40,
+  kVK_VolumeUp                  = 0x48,
+  kVK_VolumeDown                = 0x49,
+  kVK_Mute                      = 0x4A,
+  kVK_F18                       = 0x4F,
+  kVK_F19                       = 0x50,
+  kVK_F20                       = 0x5A,
+  kVK_F5                        = 0x60,
+  kVK_F6                        = 0x61,
+  kVK_F7                        = 0x62,
+  kVK_F3                        = 0x63,
+  kVK_F8                        = 0x64,
+  kVK_F9                        = 0x65,
+  kVK_F11                       = 0x67,
+  kVK_F13                       = 0x69,
+  kVK_F16                       = 0x6A,
+  kVK_F14                       = 0x6B,
+  kVK_F10                       = 0x6D,
+  kVK_F12                       = 0x6F,
+  kVK_F15                       = 0x71,
+  kVK_Help                      = 0x72,
+  kVK_Home                      = 0x73,
+  kVK_PageUp                    = 0x74,
+  kVK_ForwardDelete             = 0x75,
+  kVK_F4                        = 0x76,
+  kVK_End                       = 0x77,
+  kVK_F2                        = 0x78,
+  kVK_PageDown                  = 0x79,
+  kVK_F1                        = 0x7A,
+  kVK_LeftArrow                 = 0x7B,
+  kVK_RightArrow                = 0x7C,
+  kVK_DownArrow                 = 0x7D,
+  kVK_UpArrow                   = 0x7E
+};
+
+/* ISO keyboards only*/
+enum {
+  kVK_ISO_Section               = 0x0A
+};
+
+/* JIS keyboards only*/
+enum {
+  kVK_JIS_Yen                   = 0x5D,
+  kVK_JIS_Underscore            = 0x5E,
+  kVK_JIS_KeypadComma           = 0x5F,
+  kVK_JIS_Eisu                  = 0x66,
+  kVK_JIS_Kana                  = 0x68
+};
+
+#endif
+
+
 #ifndef USE_IOKIT
 // Some of the system key codes that maybe missing from IOKit.  They appear to have shown up over the years.
 
diff --git a/src/darwin/input_hook.c b/src/darwin/input_hook.c
index bdbc062d..844e4858 100644
--- a/src/darwin/input_hook.c
+++ b/src/darwin/input_hook.c
@@ -42,7 +42,7 @@ typedef struct _event_runloop_info {
 static id auto_release_pool;
 #endif
 
-#if __MAC_OS_X_VERSION_MAX_ALLOWED <= 1050
+#if __MAC_OS_X_VERSION_MAX_ALLOWED < __MAC_10_6 || __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_4_0
 typedef void* dispatch_queue_t;
 #endif