diff --git a/.gitignore b/.gitignore index 612de1d..c44c426 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,9 @@ xcuserdata/ *.dSYM.zip *.dSYM +# build script output +build/ + # working paths glweb171/ glweb/ diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..282da53 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["vadimcn.vscode-lldb"] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..e730441 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,22 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Debug Overlook", + "type": "lldb", + "request": "launch", + "program": "${workspaceFolder}/build/debug/Overlook.app/Contents/MacOS/Overlook", + "cwd": "${workspaceFolder}", + "terminal": "console", + "preLaunchTask": "build-overlook-debug", + "stopOnEntry": false + }, + { + "name": "Attach to Overlook", + "type": "lldb", + "request": "attach", + "program": "${workspaceFolder}/build/debug/Overlook.app/Contents/MacOS/Overlook", + "waitFor": true + } + ] +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..bb80f11 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,13 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build-overlook-debug", + "type": "shell", + "command": "${workspaceFolder}/build.sh", + "args": ["-c", "debug"], + "group": { "kind": "build", "isDefault": true }, + "problemMatcher": [] + } + ] +} diff --git a/Overlook.xcodeproj/project.pbxproj b/Overlook.xcodeproj/project.pbxproj index 4580627..b3fe2ea 100644 --- a/Overlook.xcodeproj/project.pbxproj +++ b/Overlook.xcodeproj/project.pbxproj @@ -363,22 +363,18 @@ ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_NSMicrophoneUsageDescription = "Overlook needs microphone access to send audio to the remote device."; INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INFOPLIST_KEY_NSMicrophoneUsageDescription = "Overlook needs microphone access to send audio to the remote device."; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); MARKETING_VERSION = 1.0; - OTHER_SWIFT_FLAGS = ( - "$(inherited)", - "-Xcc", - "-Wno-deprecated-declarations", - ); + OTHER_SWIFT_FLAGS = "$(inherited) -Xcc -Wno-deprecated-declarations"; PRODUCT_BUNDLE_IDENTIFIER = com.overlook.app; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = Overlook/Overlook-Bridging-Header.h; SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Overlook/Overlook-Bridging-Header.h"; SWIFT_VERSION = 5.0; }; name = Debug; @@ -398,22 +394,18 @@ ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_NSMicrophoneUsageDescription = "Overlook needs microphone access to send audio to the remote device."; INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INFOPLIST_KEY_NSMicrophoneUsageDescription = "Overlook needs microphone access to send audio to the remote device."; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); MARKETING_VERSION = 1.0; - OTHER_SWIFT_FLAGS = ( - "$(inherited)", - "-Xcc", - "-Wno-deprecated-declarations", - ); + OTHER_SWIFT_FLAGS = "$(inherited) -Xcc -Wno-deprecated-declarations"; PRODUCT_BUNDLE_IDENTIFIER = com.overlook.app; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = Overlook/Overlook-Bridging-Header.h; SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Overlook/Overlook-Bridging-Header.h"; SWIFT_VERSION = 5.0; }; name = Release; diff --git a/Overlook.xcodeproj/xcshareddata/xcschemes/Overlook.xcscheme b/Overlook.xcodeproj/xcshareddata/xcschemes/Overlook.xcscheme new file mode 100644 index 0000000..f0a4af1 --- /dev/null +++ b/Overlook.xcodeproj/xcshareddata/xcschemes/Overlook.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Overlook/Preview Content/.gitkeep b/Overlook/Preview Content/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..923d1d7 --- /dev/null +++ b/build.sh @@ -0,0 +1,70 @@ +#!/usr/bin/env bash +set -euo pipefail + +CONFIG="Debug" + +usage() { + cat <&2; exit 1; } + case "$(echo "$1" | tr '[:upper:]' '[:lower:]')" in + debug) CONFIG="Debug" ;; + release) CONFIG="Release" ;; + *) echo "error: config must be 'debug' or 'release'" >&2; exit 1 ;; + esac + shift + ;; + -h|--help) usage; exit 0 ;; + --) shift; break ;; + *) echo "error: unknown argument: $1" >&2; usage >&2; exit 1 ;; + esac +done + +cd "$(dirname "$0")" + +DEST_DIR="build/$(echo "$CONFIG" | tr '[:upper:]' '[:lower:]')" + +echo "Building Overlook ($CONFIG)..." +xcodebuild \ + -project Overlook.xcodeproj \ + -scheme Overlook \ + -configuration "$CONFIG" \ + build "$@" + +BUILT_PRODUCTS_DIR=$(xcodebuild \ + -project Overlook.xcodeproj \ + -scheme Overlook \ + -configuration "$CONFIG" \ + -showBuildSettings build 2>/dev/null \ + | awk -F' = ' '/^[[:space:]]*BUILT_PRODUCTS_DIR =/ {print $2; exit}') + +FULL_PRODUCT_NAME=$(xcodebuild \ + -project Overlook.xcodeproj \ + -scheme Overlook \ + -configuration "$CONFIG" \ + -showBuildSettings build 2>/dev/null \ + | awk -F' = ' '/^[[:space:]]*FULL_PRODUCT_NAME =/ {print $2; exit}') + +APP_SRC="$BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME" +if [[ ! -d "$APP_SRC" ]]; then + echo "error: built app not found at $APP_SRC" >&2 + exit 1 +fi + +mkdir -p "$DEST_DIR" +rm -rf "$DEST_DIR/$FULL_PRODUCT_NAME" +cp -R "$APP_SRC" "$DEST_DIR/" +echo "Copied $FULL_PRODUCT_NAME -> $DEST_DIR/"