diff --git a/.github/workflows/build-apk.yml b/.github/workflows/build-apk.yml index a718c407..a486a500 100644 --- a/.github/workflows/build-apk.yml +++ b/.github/workflows/build-apk.yml @@ -28,7 +28,7 @@ jobs: java-version: 21 - name: install dependencies - run: npm ci + run: npm ci --omit=optional - name: build Nuxt project run: npm run generate diff --git a/.github/workflows/build-ios.yml b/.github/workflows/build-ios.yml new file mode 100644 index 00000000..59825c3f --- /dev/null +++ b/.github/workflows/build-ios.yml @@ -0,0 +1,68 @@ +name: Build iOS + +on: + push: + paths-ignore: + - 'android/**' + - '.github/workflows/build-apk.yml' + - '.github/workflows/deploy-apk.yml' + - 'readme.md' + pull_request: + paths-ignore: + - 'android/**' + - '.github/workflows/build-apk.yml' + - '.github/workflows/deploy-apk.yml' + - 'readme.md' + +permissions: + contents: read + +jobs: + build: + name: Build iOS simulator app + runs-on: macos-latest + steps: + - name: Check out sources + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 24 + cache: npm + + - name: Install JavaScript dependencies + run: npm ci --omit=optional + + - name: Build shared web app + run: npm run generate + + - name: Sync Capacitor iOS project + run: npx cap sync ios + + - name: Install CocoaPods dependencies + working-directory: ios/App + run: pod install --deployment + + - name: Build iOS simulator app + working-directory: ios/App + run: | + xcodebuild -quiet \ + -workspace App.xcworkspace \ + -scheme App \ + -configuration Debug \ + -sdk iphonesimulator \ + -destination 'generic/platform=iOS Simulator' \ + -derivedDataPath build \ + ASSETCATALOG_COMPILER_APPICON_NAME=IconsDebug \ + CODE_SIGNING_ALLOWED=NO \ + build + + echo "iOS simulator build succeeded." + + - name: Upload iOS simulator app + uses: actions/upload-artifact@v4 + with: + name: audiobookshelf-ios-simulator + path: ios/App/build/Build/Products/Debug-iphonesimulator/Audiobookshelf.app + if-no-files-found: error diff --git a/.github/workflows/deploy-apk.yml b/.github/workflows/deploy-apk.yml index 9d51af81..c1b81c29 100644 --- a/.github/workflows/deploy-apk.yml +++ b/.github/workflows/deploy-apk.yml @@ -27,7 +27,7 @@ jobs: java-version: 21 - name: install dependencies - run: npm ci + run: npm ci --omit=optional - name: build Nuxt project run: npm run generate diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/Contents.json b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/Contents.json new file mode 100644 index 00000000..e871c62f --- /dev/null +++ b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/Contents.json @@ -0,0 +1,314 @@ +{ + "images" : [ + { + "filename" : "icon-40.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "filename" : "icon-60.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "filename" : "icon-58.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "icon-87.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "filename" : "icon-80.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "icon-120.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "filename" : "icon-120.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "filename" : "icon-180.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "filename" : "icon-20.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "filename" : "icon-40.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "filename" : "icon-29.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "filename" : "icon-58.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "icon-40.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "filename" : "icon-80.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "icon-76.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "filename" : "icon-152.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "filename" : "icon-167.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "filename" : "icon-120.png", + "idiom" : "car", + "scale" : "2x", + "size" : "60x60" + }, + { + "filename" : "icon-180.png", + "idiom" : "car", + "scale" : "3x", + "size" : "60x60" + }, + { + "filename" : "icon-1024.png", + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + }, + { + "filename" : "icon-16.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "16x16" + }, + { + "filename" : "icon-32.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "16x16" + }, + { + "filename" : "icon-32.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "32x32" + }, + { + "filename" : "icon-64.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "32x32" + }, + { + "filename" : "icon-128.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "128x128" + }, + { + "filename" : "icon-256.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "128x128" + }, + { + "filename" : "icon-256.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "256x256" + }, + { + "filename" : "icon-512.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "256x256" + }, + { + "filename" : "icon-512.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "512x512" + }, + { + "filename" : "icon-1024.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "512x512" + }, + { + "filename" : "icon-48.png", + "idiom" : "watch", + "role" : "notificationCenter", + "scale" : "2x", + "size" : "24x24", + "subtype" : "38mm" + }, + { + "filename" : "icon-55.png", + "idiom" : "watch", + "role" : "notificationCenter", + "scale" : "2x", + "size" : "27.5x27.5", + "subtype" : "42mm" + }, + { + "filename" : "icon-58.png", + "idiom" : "watch", + "role" : "companionSettings", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "icon-87.png", + "idiom" : "watch", + "role" : "companionSettings", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "watch", + "role" : "notificationCenter", + "scale" : "2x", + "size" : "33x33", + "subtype" : "45mm" + }, + { + "filename" : "icon-80.png", + "idiom" : "watch", + "role" : "appLauncher", + "scale" : "2x", + "size" : "40x40", + "subtype" : "38mm" + }, + { + "filename" : "icon-88.png", + "idiom" : "watch", + "role" : "appLauncher", + "scale" : "2x", + "size" : "44x44", + "subtype" : "40mm" + }, + { + "idiom" : "watch", + "role" : "appLauncher", + "scale" : "2x", + "size" : "46x46", + "subtype" : "41mm" + }, + { + "filename" : "icon-100.png", + "idiom" : "watch", + "role" : "appLauncher", + "scale" : "2x", + "size" : "50x50", + "subtype" : "44mm" + }, + { + "idiom" : "watch", + "role" : "appLauncher", + "scale" : "2x", + "size" : "51x51", + "subtype" : "45mm" + }, + { + "idiom" : "watch", + "role" : "appLauncher", + "scale" : "2x", + "size" : "54x54", + "subtype" : "49mm" + }, + { + "filename" : "icon-172.png", + "idiom" : "watch", + "role" : "quickLook", + "scale" : "2x", + "size" : "86x86", + "subtype" : "38mm" + }, + { + "filename" : "icon-196.png", + "idiom" : "watch", + "role" : "quickLook", + "scale" : "2x", + "size" : "98x98", + "subtype" : "42mm" + }, + { + "filename" : "icon-216.png", + "idiom" : "watch", + "role" : "quickLook", + "scale" : "2x", + "size" : "108x108", + "subtype" : "44mm" + }, + { + "idiom" : "watch", + "role" : "quickLook", + "scale" : "2x", + "size" : "117x117", + "subtype" : "45mm" + }, + { + "idiom" : "watch", + "role" : "quickLook", + "scale" : "2x", + "size" : "129x129", + "subtype" : "49mm" + }, + { + "filename" : "icon-1024.png", + "idiom" : "watch-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-100.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-100.png new file mode 100644 index 00000000..b2f41dac Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-100.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-1024.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-1024.png new file mode 100644 index 00000000..ddf20ca2 Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-1024.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-120.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-120.png new file mode 100644 index 00000000..5b532114 Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-120.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-128.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-128.png new file mode 100644 index 00000000..bd7ecbdd Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-128.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-152.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-152.png new file mode 100644 index 00000000..f0e77ba3 Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-152.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-16.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-16.png new file mode 100644 index 00000000..7ab2778e Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-16.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-167.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-167.png new file mode 100644 index 00000000..bdf81adb Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-167.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-172.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-172.png new file mode 100644 index 00000000..2c09dc28 Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-172.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-180.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-180.png new file mode 100644 index 00000000..df0f3147 Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-180.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-196.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-196.png new file mode 100644 index 00000000..888291ce Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-196.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-20.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-20.png new file mode 100644 index 00000000..76a85fd6 Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-20.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-216.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-216.png new file mode 100644 index 00000000..c33ccee4 Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-216.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-256.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-256.png new file mode 100644 index 00000000..c659a395 Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-256.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-29.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-29.png new file mode 100644 index 00000000..c3ecb177 Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-29.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-32.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-32.png new file mode 100644 index 00000000..86f7c329 Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-32.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-40.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-40.png new file mode 100644 index 00000000..d2d24eed Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-40.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-48.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-48.png new file mode 100644 index 00000000..aabe9a70 Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-48.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-512.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-512.png new file mode 100644 index 00000000..f027f2cd Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-512.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-55.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-55.png new file mode 100644 index 00000000..217bfbdb Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-55.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-58.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-58.png new file mode 100644 index 00000000..f5f53de9 Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-58.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-60.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-60.png new file mode 100644 index 00000000..165a7cc3 Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-60.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-64.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-64.png new file mode 100644 index 00000000..dc892003 Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-64.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-76.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-76.png new file mode 100644 index 00000000..57eba166 Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-76.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-80.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-80.png new file mode 100644 index 00000000..d5ab65b7 Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-80.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-87.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-87.png new file mode 100644 index 00000000..487f25a0 Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-87.png differ diff --git a/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-88.png b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-88.png new file mode 100644 index 00000000..0bdf45e2 Binary files /dev/null and b/ios/App/App/Assets.xcassets/IconsDebug.appiconset/icon-88.png differ diff --git a/package-lock.json b/package-lock.json index 42688ea2..93476467 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5102,6 +5102,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, "node_modules/bluebird": { "version": "3.7.2", "license": "MIT" @@ -7582,6 +7592,13 @@ "version": "2.0.5", "license": "MIT" }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT", + "optional": true + }, "node_modules/fill-range": { "version": "7.1.1", "license": "MIT", @@ -7813,6 +7830,20 @@ "version": "1.0.0", "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "license": "MIT", @@ -9992,6 +10023,13 @@ "thenify-all": "^1.0.0" } }, + "node_modules/nan": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.28.0.tgz", + "integrity": "sha512-fTsDz99OTq2sVePhGdp4qQhggZFtKr64ZNVyVajRKtMOkJxYekplBh577PiJB12v/D3s2E5cGtOI45LWp6rnLQ==", + "license": "MIT", + "optional": true + }, "node_modules/nanoid": { "version": "3.3.11", "funding": [ @@ -15859,6 +15897,25 @@ "node": ">=0.10.0" } }, + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "Upgrade to fsevents v2 to mitigate potential security issues", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, "node_modules/watchpack-chokidar2/node_modules/glob-parent": { "version": "3.1.0", "license": "ISC",