diff --git a/.dockerignore b/.dockerignore
deleted file mode 100644
index 9a33c5ec..00000000
--- a/.dockerignore
+++ /dev/null
@@ -1,19 +0,0 @@
-.git
-build/
-.dart_tool/
-.idea/
-*.tar.gz
-nul
-libmpv-prefix/
-steamfiles/
-pubspec_overrides.yaml
-
-# Flutter ephemeral / generated plugin symlinks
-linux/flutter/ephemeral/
-windows/flutter/
-macos/Flutter/
-ios/Flutter/
-android/.gradle/
-android/app/build/
-.flutter-plugins
-.flutter-plugins-dependencies
diff --git a/.gitignore b/.gitignore
index d445f603..8fc4708e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -69,3 +69,5 @@ duplication-report/
**/fastlane/**/
**/fastlane/report.xml
maestro/**/*.png
+
+server/deploy.sh
\ No newline at end of file
diff --git a/pubspec.yaml b/pubspec.yaml
index 7b8b2e11..bbd739b0 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,7 +1,7 @@
name: plezy
description: "A beautiful Plex client for Flutter"
publish_to: "none"
-version: 1.34.2+73
+version: 1.34.2+75
environment:
sdk: ^3.8.1
diff --git a/server/deploy.sh b/server/deploy.sh
deleted file mode 100755
index 4e184e59..00000000
--- a/server/deploy.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env bash
-set -euo pipefail
-
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-REMOTE="root@212.132.75.249"
-SSH_KEY="$HOME/.ssh/id_edde"
-REMOTE_DIR="/opt/plezy-relay"
-SSH="ssh -i $SSH_KEY $REMOTE"
-
-cd "$SCRIPT_DIR"
-
-echo "Syncing files to $REMOTE:$REMOTE_DIR..."
-rsync -avz --exclude='plezy-relay' --exclude='plezy-server-linux-amd64' \
- -e "ssh -i $SSH_KEY" \
- . "$REMOTE:$REMOTE_DIR/"
-
-echo "Deploying..."
-$SSH "cd $REMOTE_DIR && docker compose up -d --build"
-
-echo "Done."
diff --git a/tvos/Runner/Assets.xcassets/AppIcon.brandassets/Top Shelf Image Wide.imageset/Contents.json b/tvos/Runner/Assets.xcassets/AppIcon.brandassets/Top Shelf Image Wide.imageset/Contents.json
index be3fd87f..b8ea39cd 100644
--- a/tvos/Runner/Assets.xcassets/AppIcon.brandassets/Top Shelf Image Wide.imageset/Contents.json
+++ b/tvos/Runner/Assets.xcassets/AppIcon.brandassets/Top Shelf Image Wide.imageset/Contents.json
@@ -1,6 +1,7 @@
{
"images" : [
- { "filename" : "top-shelf-wide.png", "idiom" : "tv" }
+ { "filename" : "top-shelf-wide.png", "idiom" : "tv", "scale" : "1x" },
+ { "filename" : "top-shelf-wide@2x.png", "idiom" : "tv", "scale" : "2x" }
],
"info" : { "author" : "xcode", "version" : 1 }
}
diff --git a/tvos/Runner/Assets.xcassets/AppIcon.brandassets/Top Shelf Image Wide.imageset/top-shelf-wide@2x.png b/tvos/Runner/Assets.xcassets/AppIcon.brandassets/Top Shelf Image Wide.imageset/top-shelf-wide@2x.png
new file mode 100644
index 00000000..b00171c7
Binary files /dev/null and b/tvos/Runner/Assets.xcassets/AppIcon.brandassets/Top Shelf Image Wide.imageset/top-shelf-wide@2x.png differ
diff --git a/tvos/Runner/Plugins/universal_gamepad/ButtonMapping.swift b/tvos/Runner/Plugins/universal_gamepad/ButtonMapping.swift
index 8bee22d6..1667bfb2 100644
--- a/tvos/Runner/Plugins/universal_gamepad/ButtonMapping.swift
+++ b/tvos/Runner/Plugins/universal_gamepad/ButtonMapping.swift
@@ -87,9 +87,11 @@ enum ButtonMapping {
return (15, gamepad.dpad.right)
}
- // Guide / Home button
- if let buttonHome = gamepad.buttonHome, element == buttonHome {
- return (16, buttonHome)
+ // Guide / Home button (added in tvOS/iOS 14).
+ if #available(iOS 14.0, tvOS 14.0, macOS 11.0, *) {
+ if let buttonHome = gamepad.buttonHome, element == buttonHome {
+ return (16, buttonHome)
+ }
}
return nil
diff --git a/tvos/scripts/Info.plist b/tvos/scripts/Info.plist
index d57061dd..ff0dcf11 100644
--- a/tvos/scripts/Info.plist
+++ b/tvos/scripts/Info.plist
@@ -21,6 +21,6 @@
CFBundleVersion
1.0
MinimumOSVersion
- 13.0
+ 14.0
diff --git a/tvos/scripts/xcode_appletv.sh b/tvos/scripts/xcode_appletv.sh
index 9a0b74b4..e4936bf7 100755
--- a/tvos/scripts/xcode_appletv.sh
+++ b/tvos/scripts/xcode_appletv.sh
@@ -42,6 +42,10 @@ BuildAppDebug() {
echo " └─Copying Flutter.framework"
rm -rf "$OUTDIR/Flutter.framework"
cp -R "$DEVICE_TOOLS/Flutter.framework" "$OUTDIR"
+ # The engine tarball's Flutter.framework/Info.plist declares MinimumOSVersion
+ # 13.0 but the binary is linked with minos=14.0. Apple's validator compares
+ # both against the host app — align the plist to 14.0 so the upload passes.
+ plutil -replace MinimumOSVersion -string "$TVOS_DEPLOYMENT_TARGET" "$OUTDIR/Flutter.framework/Info.plist"
tvos_deployment_target="$TVOS_DEPLOYMENT_TARGET"
@@ -136,30 +140,30 @@ BuildAppDebug() {
echo " └─copy frameworks"
cp "$PROJECT_DIR/scripts/Info.plist" "$OUTDIR/App.framework/Info.plist"
- # For Archive builds BUILT_PRODUCTS_DIR differs from TARGET_BUILD_DIR:
- # Swift compile looks up frameworks under BUILT_PRODUCTS_DIR, but the
- # embedded copy needs to end up inside TARGET_BUILD_DIR/Runner.app.
- cp -R "${OUTDIR}/"{App.framework,Flutter.framework} "$TARGET_BUILD_DIR"
- if [ -n "${BUILT_PRODUCTS_DIR:-}" ] && [ "$BUILT_PRODUCTS_DIR" != "$TARGET_BUILD_DIR" ]; then
- rm -rf "$BUILT_PRODUCTS_DIR/App.framework" "$BUILT_PRODUCTS_DIR/Flutter.framework"
- cp -R "${OUTDIR}/"{App.framework,Flutter.framework} "$BUILT_PRODUCTS_DIR"
- fi
+ # Two destinations:
+ # 1. BUILT_PRODUCTS_DIR — Swift/linker search path. For plain builds this
+ # equals TARGET_BUILD_DIR; for Archive it differs.
+ # 2. $TARGET_BUILD_DIR/$WRAPPER_NAME/Frameworks — embedded into Runner.app
+ # so @rpath resolves at runtime.
+ #
+ # DO NOT drop frameworks flat into TARGET_BUILD_DIR. During archive that's
+ # Products/Applications/ — sibling to Runner.app — and extra framework
+ # bundles there make Organizer classify the archive as "Other Items".
+ mkdir -p "$BUILT_PRODUCTS_DIR"
+ rm -rf "$BUILT_PRODUCTS_DIR/App.framework" "$BUILT_PRODUCTS_DIR/Flutter.framework"
+ cp -R "${OUTDIR}/"{App.framework,Flutter.framework} "$BUILT_PRODUCTS_DIR"
- # Also embed into Runner.app/Frameworks so the dylib @rpath resolves at launch.
APP_FRAMEWORKS_DIR="$TARGET_BUILD_DIR/$WRAPPER_NAME/Frameworks"
mkdir -p "$APP_FRAMEWORKS_DIR"
rm -rf "$APP_FRAMEWORKS_DIR/App.framework" "$APP_FRAMEWORKS_DIR/Flutter.framework"
cp -R "${OUTDIR}/"{App.framework,Flutter.framework} "$APP_FRAMEWORKS_DIR"
- # Sign the binaries we moved. Both the flat copy (used by linker/embedder)
- # and the embedded copy inside Runner.app/Frameworks need signatures.
- # Skip when signing is disabled (CODE_SIGNING_ALLOWED=NO, unit-test builds,
- # or sim builds where Xcode doesn't sign frameworks). Xcode's own CodeSign
- # phase will sign the final app + frameworks in proper archive builds.
+ # Sign the embedded frameworks. Skip when signing is disabled. Xcode's
+ # later CodeSign phase re-signs the full app anyway.
echo " └─Sign"
if [[ "$debug_sim" != "true" && -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" && "${CODE_SIGNING_ALLOWED:-YES}" != "NO" ]]; then
- codesign --force --verbose --sign "${EXPANDED_CODE_SIGN_IDENTITY}" -- "${TARGET_BUILD_DIR}/App.framework/App"
- codesign --force --verbose --sign "${EXPANDED_CODE_SIGN_IDENTITY}" -- "${TARGET_BUILD_DIR}/Flutter.framework/Flutter"
+ codesign --force --verbose --sign "${EXPANDED_CODE_SIGN_IDENTITY}" -- "${BUILT_PRODUCTS_DIR}/App.framework/App"
+ codesign --force --verbose --sign "${EXPANDED_CODE_SIGN_IDENTITY}" -- "${BUILT_PRODUCTS_DIR}/Flutter.framework/Flutter"
codesign --force --verbose --sign "${EXPANDED_CODE_SIGN_IDENTITY}" -- "${APP_FRAMEWORKS_DIR}/App.framework/App"
codesign --force --verbose --sign "${EXPANDED_CODE_SIGN_IDENTITY}" -- "${APP_FRAMEWORKS_DIR}/Flutter.framework/Flutter"
else
@@ -205,6 +209,10 @@ BuildAppRelease() {
echo " └─Copying Flutter.framework"
rm -rf "$OUTDIR/Flutter.framework"
cp -R "$DEVICE_TOOLS/Flutter.framework" "$OUTDIR"
+ # The engine tarball's Flutter.framework/Info.plist declares MinimumOSVersion
+ # 13.0 but the binary is linked with minos=14.0. Apple's validator compares
+ # both against the host app — align the plist to 14.0 so the upload passes.
+ plutil -replace MinimumOSVersion -string "$TVOS_DEPLOYMENT_TARGET" "$OUTDIR/Flutter.framework/Info.plist"
tvos_deployment_target="$TVOS_DEPLOYMENT_TARGET"
@@ -288,14 +296,12 @@ BuildAppRelease() {
cp "$PROJECT_DIR/scripts/Info.plist" "$OUTDIR/App.framework/Info.plist"
echo " └─copy frameworks"
- # Archive builds point BUILT_PRODUCTS_DIR at a separate products path that
- # Swift compile scans for frameworks — copy there too so downstream
- # compilation in the same target can resolve Flutter.h.
- cp -R "${OUTDIR}/"{App.framework,Flutter.framework} "$TARGET_BUILD_DIR"
- if [ -n "${BUILT_PRODUCTS_DIR:-}" ] && [ "$BUILT_PRODUCTS_DIR" != "$TARGET_BUILD_DIR" ]; then
- rm -rf "$BUILT_PRODUCTS_DIR/App.framework" "$BUILT_PRODUCTS_DIR/Flutter.framework"
- cp -R "${OUTDIR}/"{App.framework,Flutter.framework} "$BUILT_PRODUCTS_DIR"
- fi
+ # BUILT_PRODUCTS_DIR = linker search path. DO NOT use TARGET_BUILD_DIR
+ # flat — during archive that's Products/Applications/ and loose framework
+ # bundles next to Runner.app make Xcode classify the archive as "Other".
+ mkdir -p "$BUILT_PRODUCTS_DIR"
+ rm -rf "$BUILT_PRODUCTS_DIR/App.framework" "$BUILT_PRODUCTS_DIR/Flutter.framework"
+ cp -R "${OUTDIR}/"{App.framework,Flutter.framework} "$BUILT_PRODUCTS_DIR"
APP_FRAMEWORKS_DIR="$TARGET_BUILD_DIR/$WRAPPER_NAME/Frameworks"
mkdir -p "$APP_FRAMEWORKS_DIR"
@@ -304,8 +310,8 @@ BuildAppRelease() {
echo " └─Sign"
if [[ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" && "${CODE_SIGNING_ALLOWED:-YES}" != "NO" ]]; then
- codesign --force --verbose --sign "${EXPANDED_CODE_SIGN_IDENTITY}" -- "${TARGET_BUILD_DIR}/App.framework/App"
- codesign --force --verbose --sign "${EXPANDED_CODE_SIGN_IDENTITY}" -- "${TARGET_BUILD_DIR}/Flutter.framework/Flutter"
+ codesign --force --verbose --sign "${EXPANDED_CODE_SIGN_IDENTITY}" -- "${BUILT_PRODUCTS_DIR}/App.framework/App"
+ codesign --force --verbose --sign "${EXPANDED_CODE_SIGN_IDENTITY}" -- "${BUILT_PRODUCTS_DIR}/Flutter.framework/Flutter"
codesign --force --verbose --sign "${EXPANDED_CODE_SIGN_IDENTITY}" -- "${APP_FRAMEWORKS_DIR}/App.framework/App"
codesign --force --verbose --sign "${EXPANDED_CODE_SIGN_IDENTITY}" -- "${APP_FRAMEWORKS_DIR}/Flutter.framework/Flutter"
else