mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2026-02-15 12:44:59 +01:00
Compare commits
4 Commits
lollipopki
...
v1.0.1297
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d5e22cbc65 | ||
|
|
7926a4d4a6 | ||
|
|
39a3e0800b | ||
|
|
cd3c094af0 |
149
.github/workflows/release.yml
vendored
149
.github/workflows/release.yml
vendored
@@ -9,10 +9,9 @@ on:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
|
||||||
# Set by fl_build
|
env:
|
||||||
# env:
|
APP_NAME: ServerBox
|
||||||
# APP_NAME: ServerBox
|
RELEASE_TAG: ${{ github.ref_name }}
|
||||||
# BUILD_NUMBER: ${{ github.ref_name }}
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
releaseAndroid:
|
releaseAndroid:
|
||||||
@@ -21,11 +20,13 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
- name: Install Flutter
|
- name: Install Flutter
|
||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
channel: "stable"
|
channel: "stable"
|
||||||
flutter-version: "3.38.0"
|
flutter-version: "3.38.7"
|
||||||
- uses: actions/setup-java@v4
|
- uses: actions/setup-java@v4
|
||||||
with:
|
with:
|
||||||
distribution: "zulu"
|
distribution: "zulu"
|
||||||
@@ -37,17 +38,28 @@ jobs:
|
|||||||
- name: Build
|
- name: Build
|
||||||
run: dart run fl_build -p android
|
run: dart run fl_build -p android
|
||||||
- name: Rename for fdroid
|
- name: Rename for fdroid
|
||||||
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
mv build/app/outputs/flutter-apk/${{ env.APP_NAME }}_${{ env.BUILD_NUMBER }}_arm64.apk build/app/outputs/flutter-apk/${{ env.APP_NAME }}_v1.0.${{ env.BUILD_NUMBER }}_arm64.apk
|
APK_DIR="build/app/outputs/flutter-apk"
|
||||||
mv build/app/outputs/flutter-apk/${{ env.APP_NAME }}_${{ env.BUILD_NUMBER }}_arm.apk build/app/outputs/flutter-apk/${{ env.APP_NAME }}_v1.0.${{ env.BUILD_NUMBER }}_arm.apk
|
shopt -s nullglob
|
||||||
mv build/app/outputs/flutter-apk/${{ env.APP_NAME }}_${{ env.BUILD_NUMBER }}_amd64.apk build/app/outputs/flutter-apk/${{ env.APP_NAME }}_v1.0.${{ env.BUILD_NUMBER }}_amd64.apk
|
|
||||||
|
for arch in arm64 arm amd64; do
|
||||||
|
matches=("$APK_DIR"/"${APP_NAME}"_*_"${arch}".apk)
|
||||||
|
if [ ${#matches[@]} -ne 1 ]; then
|
||||||
|
echo "Error: expected 1 APK for ${arch}, found ${#matches[@]}"
|
||||||
|
echo "APK_DIR: $APK_DIR"
|
||||||
|
ls -la "$APK_DIR" || true
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
mv "${matches[0]}" "$APK_DIR/${APP_NAME}_${RELEASE_TAG}_${arch}.apk"
|
||||||
|
done
|
||||||
- name: Create Release
|
- name: Create Release
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v2
|
||||||
with:
|
with:
|
||||||
files: |
|
files: |
|
||||||
build/app/outputs/flutter-apk/${{ env.APP_NAME }}_v1.0.${{ env.BUILD_NUMBER }}_arm64.apk
|
build/app/outputs/flutter-apk/${{ env.APP_NAME }}_${{ env.RELEASE_TAG }}_arm64.apk
|
||||||
build/app/outputs/flutter-apk/${{ env.APP_NAME }}_v1.0.${{ env.BUILD_NUMBER }}_arm.apk
|
build/app/outputs/flutter-apk/${{ env.APP_NAME }}_${{ env.RELEASE_TAG }}_arm.apk
|
||||||
build/app/outputs/flutter-apk/${{ env.APP_NAME }}_v1.0.${{ env.BUILD_NUMBER }}_amd64.apk
|
build/app/outputs/flutter-apk/${{ env.APP_NAME }}_${{ env.RELEASE_TAG }}_amd64.apk
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
@@ -57,6 +69,8 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
- name: Install Flutter
|
- name: Install Flutter
|
||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
@@ -69,11 +83,22 @@ jobs:
|
|||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
dart run fl_build -p linux
|
dart run fl_build -p linux
|
||||||
|
- name: Rename for release
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
shopt -s nullglob
|
||||||
|
matches=("${APP_NAME}"_*_amd64.AppImage)
|
||||||
|
if [ ${#matches[@]} -ne 1 ]; then
|
||||||
|
echo "Error: expected 1 AppImage, found ${#matches[@]}"
|
||||||
|
ls -la || true
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
mv "${matches[0]}" "${APP_NAME}_${RELEASE_TAG}_amd64.AppImage"
|
||||||
- name: Create Release
|
- name: Create Release
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v2
|
||||||
with:
|
with:
|
||||||
files: |
|
files: |
|
||||||
${{ env.APP_NAME }}_${{ env.BUILD_NUMBER }}_amd64.AppImage
|
${{ env.APP_NAME }}_${{ env.RELEASE_TAG }}_amd64.AppImage
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
@@ -83,32 +108,96 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
- name: Install Flutter
|
- name: Install Flutter
|
||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
- name: Build
|
- name: Build
|
||||||
run: dart run fl_build -p windows
|
run: dart run fl_build -p windows
|
||||||
|
- name: Rename for release
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
shopt -s nullglob
|
||||||
|
matches=("${APP_NAME}"_*_windows_amd64.zip)
|
||||||
|
if [ ${#matches[@]} -ne 1 ]; then
|
||||||
|
echo "Error: expected 1 zip, found ${#matches[@]}"
|
||||||
|
ls -la || true
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
mv "${matches[0]}" "${APP_NAME}_${RELEASE_TAG}_windows_amd64.zip"
|
||||||
- name: Create Release
|
- name: Create Release
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v2
|
||||||
with:
|
with:
|
||||||
files: |
|
files: |
|
||||||
${{ env.APP_NAME }}_${{ env.BUILD_NUMBER }}_windows_amd64.zip
|
${{ env.APP_NAME }}_${{ env.RELEASE_TAG }}_windows_amd64.zip
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
# releaseApple:
|
releaseIOS:
|
||||||
# name: Release ios and macos
|
name: Release iOS
|
||||||
# runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
# steps:
|
steps:
|
||||||
# - name: Checkout
|
- name: Checkout
|
||||||
# uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
# - name: Install Flutter
|
with:
|
||||||
# uses: subosito/flutter-action@v2
|
submodules: recursive
|
||||||
# - name: Build
|
- name: Install Flutter
|
||||||
# run: dart run fl_build -p ios
|
uses: subosito/flutter-action@v2
|
||||||
# - name: Create Release
|
- name: Build
|
||||||
# uses: softprops/action-gh-release@v2
|
run: |
|
||||||
# with:
|
dart run fl_build -p ios -- --no-codesign
|
||||||
# files: |
|
shopt -s nullglob
|
||||||
# ${{ env.APP_NAME }}_universal.ipa
|
IPA_FILES=(build/ios/ipa/*.ipa)
|
||||||
# env:
|
if [ ${#IPA_FILES[@]} -ne 1 ]; then
|
||||||
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
echo "Error: expected 1 IPA, found ${#IPA_FILES[@]}"
|
||||||
|
ls -la build/ios/ipa || true
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
IPA_FILE="${IPA_FILES[0]}"
|
||||||
|
echo "Found IPA: $IPA_FILE"
|
||||||
|
cp "$IPA_FILE" "${APP_NAME}_${RELEASE_TAG}_ios.ipa"
|
||||||
|
- name: Create Release
|
||||||
|
uses: softprops/action-gh-release@v2
|
||||||
|
with:
|
||||||
|
files: |
|
||||||
|
${{ env.APP_NAME }}_${{ env.RELEASE_TAG }}_ios.ipa
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
releaseMacOS:
|
||||||
|
name: Release macOS
|
||||||
|
runs-on: macos-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Install Flutter
|
||||||
|
uses: subosito/flutter-action@v2
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
dart run fl_build -p macos -- --no-codesign
|
||||||
|
- name: Package
|
||||||
|
run: |
|
||||||
|
RELEASE_DIR="$GITHUB_WORKSPACE/build/macos/Build/Products/Release"
|
||||||
|
APP_DIR="$RELEASE_DIR/$APP_NAME.app"
|
||||||
|
OUT_ZIP="$GITHUB_WORKSPACE/${APP_NAME}_${RELEASE_TAG}_macos.zip"
|
||||||
|
|
||||||
|
if [ ! -d "$RELEASE_DIR" ]; then
|
||||||
|
echo "Error: macOS release directory not found: $RELEASE_DIR"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ ! -d "$APP_DIR" ]; then
|
||||||
|
echo "Error: macOS app bundle not found: $APP_DIR"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "$RELEASE_DIR"
|
||||||
|
zip -ry "$OUT_ZIP" "$APP_NAME.app"
|
||||||
|
- name: Create Release
|
||||||
|
uses: softprops/action-gh-release@v2
|
||||||
|
with:
|
||||||
|
files: |
|
||||||
|
${{ env.APP_NAME }}_${{ env.RELEASE_TAG }}_macos.zip
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|||||||
@@ -748,7 +748,7 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CURRENT_PROJECT_VERSION = 1291;
|
CURRENT_PROJECT_VERSION = 1297;
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
|
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
|
||||||
@@ -758,7 +758,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.1291;
|
MARKETING_VERSION = 1.0.1297;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
@@ -884,7 +884,7 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CURRENT_PROJECT_VERSION = 1291;
|
CURRENT_PROJECT_VERSION = 1297;
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
|
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
|
||||||
@@ -894,7 +894,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.1291;
|
MARKETING_VERSION = 1.0.1297;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
@@ -912,7 +912,7 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CURRENT_PROJECT_VERSION = 1291;
|
CURRENT_PROJECT_VERSION = 1297;
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
|
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
|
||||||
@@ -922,7 +922,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.1291;
|
MARKETING_VERSION = 1.0.1297;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
@@ -943,7 +943,7 @@
|
|||||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 1291;
|
CURRENT_PROJECT_VERSION = 1297;
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
@@ -956,7 +956,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.1291;
|
MARKETING_VERSION = 1.0.1297;
|
||||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
|
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
|
||||||
@@ -982,7 +982,7 @@
|
|||||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 1291;
|
CURRENT_PROJECT_VERSION = 1297;
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
@@ -995,7 +995,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.1291;
|
MARKETING_VERSION = 1.0.1297;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
|
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
@@ -1018,7 +1018,7 @@
|
|||||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 1291;
|
CURRENT_PROJECT_VERSION = 1297;
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
@@ -1031,7 +1031,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.1291;
|
MARKETING_VERSION = 1.0.1297;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
|
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
@@ -1054,7 +1054,7 @@
|
|||||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 1291;
|
CURRENT_PROJECT_VERSION = 1297;
|
||||||
DEVELOPMENT_ASSET_PATHS = "";
|
DEVELOPMENT_ASSET_PATHS = "";
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
@@ -1066,7 +1066,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.1291;
|
MARKETING_VERSION = 1.0.1297;
|
||||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
|
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
|
||||||
@@ -1095,7 +1095,7 @@
|
|||||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 1291;
|
CURRENT_PROJECT_VERSION = 1297;
|
||||||
DEVELOPMENT_ASSET_PATHS = "";
|
DEVELOPMENT_ASSET_PATHS = "";
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
@@ -1107,7 +1107,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.1291;
|
MARKETING_VERSION = 1.0.1297;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
|
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
|
||||||
PRODUCT_NAME = ServerBox;
|
PRODUCT_NAME = ServerBox;
|
||||||
@@ -1133,7 +1133,7 @@
|
|||||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 1291;
|
CURRENT_PROJECT_VERSION = 1297;
|
||||||
DEVELOPMENT_ASSET_PATHS = "";
|
DEVELOPMENT_ASSET_PATHS = "";
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
@@ -1145,7 +1145,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.1291;
|
MARKETING_VERSION = 1.0.1297;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
|
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
|
||||||
PRODUCT_NAME = ServerBox;
|
PRODUCT_NAME = ServerBox;
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ extension SSHClientX on SSHClient {
|
|||||||
return (session, result.takeBytes().string);
|
return (session, result.takeBytes().string);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<int?> execWithPwd(
|
Future<(int?, String)> execWithPwd(
|
||||||
String script, {
|
String script, {
|
||||||
String? entry,
|
String? entry,
|
||||||
BuildContext? context,
|
BuildContext? context,
|
||||||
@@ -121,7 +121,7 @@ extension SSHClientX on SSHClient {
|
|||||||
required String id,
|
required String id,
|
||||||
}) async {
|
}) async {
|
||||||
var isRequestingPwd = false;
|
var isRequestingPwd = false;
|
||||||
final (session, _) = await exec(
|
final (session, output) = await exec(
|
||||||
(sess) {
|
(sess) {
|
||||||
sess.stdin.add('$script\n'.uint8List);
|
sess.stdin.add('$script\n'.uint8List);
|
||||||
sess.stdin.close();
|
sess.stdin.close();
|
||||||
@@ -147,7 +147,7 @@ extension SSHClientX on SSHClient {
|
|||||||
onStdout: onStdout,
|
onStdout: onStdout,
|
||||||
entry: entry,
|
entry: entry,
|
||||||
);
|
);
|
||||||
return session.exitCode;
|
return (session.exitCode, output);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<String> execForOutput(
|
Future<String> execForOutput(
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ enum ContainerErrType {
|
|||||||
parsePs,
|
parsePs,
|
||||||
parseImages,
|
parseImages,
|
||||||
parseStats,
|
parseStats,
|
||||||
|
podmanDetected,
|
||||||
}
|
}
|
||||||
|
|
||||||
class ContainerErr extends Err<ContainerErrType> {
|
class ContainerErr extends Err<ContainerErrType> {
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import 'package:fl_lib/fl_lib.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
|
import 'package:server_box/core/extension/context/locale.dart';
|
||||||
import 'package:server_box/core/extension/ssh_client.dart';
|
import 'package:server_box/core/extension/ssh_client.dart';
|
||||||
import 'package:server_box/data/model/app/error.dart';
|
import 'package:server_box/data/model/app/error.dart';
|
||||||
import 'package:server_box/data/model/app/scripts/script_consts.dart';
|
import 'package:server_box/data/model/app/scripts/script_consts.dart';
|
||||||
@@ -18,6 +19,7 @@ part 'container.freezed.dart';
|
|||||||
part 'container.g.dart';
|
part 'container.g.dart';
|
||||||
|
|
||||||
final _dockerNotFound = RegExp(r"command not found|Unknown command|Command '\w+' not found");
|
final _dockerNotFound = RegExp(r"command not found|Unknown command|Command '\w+' not found");
|
||||||
|
final _podmanEmulationMsg = 'Emulate Docker CLI using podman';
|
||||||
|
|
||||||
@freezed
|
@freezed
|
||||||
abstract class ContainerState with _$ContainerState {
|
abstract class ContainerState with _$ContainerState {
|
||||||
@@ -84,21 +86,51 @@ class ContainerNotifier extends _$ContainerNotifier {
|
|||||||
}
|
}
|
||||||
final includeStats = Stores.setting.containerParseStat.fetch();
|
final includeStats = Stores.setting.containerParseStat.fetch();
|
||||||
|
|
||||||
var raw = '';
|
|
||||||
final cmd = _wrap(ContainerCmdType.execAll(state.type, sudo: sudo, includeStats: includeStats));
|
final cmd = _wrap(ContainerCmdType.execAll(state.type, sudo: sudo, includeStats: includeStats));
|
||||||
final code = await client?.execWithPwd(
|
int? code;
|
||||||
cmd,
|
String raw = '';
|
||||||
context: context,
|
final errs = <String>[];
|
||||||
onStdout: (data, _) => raw = '$raw$data',
|
if (client != null) {
|
||||||
id: hostId,
|
(code, raw) = await client!.execWithPwd(cmd, context: context, id: hostId);
|
||||||
);
|
} else {
|
||||||
|
state = state.copyWith(
|
||||||
|
isBusy: false,
|
||||||
|
error: ContainerErr(type: ContainerErrType.noClient),
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ref.mounted) return;
|
||||||
state = state.copyWith(isBusy: false);
|
state = state.copyWith(isBusy: false);
|
||||||
|
|
||||||
if (!context.mounted) return;
|
if (!context.mounted) return;
|
||||||
|
|
||||||
/// Code 127 means command not found
|
/// Code 127 means command not found
|
||||||
if (code == 127 || raw.contains(_dockerNotFound)) {
|
if (code == 127 || raw.contains(_dockerNotFound) || errs.join().contains(_dockerNotFound)) {
|
||||||
|
state = state.copyWith(error: ContainerErr(type: ContainerErrType.notInstalled));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Pre-parse Podman detection
|
||||||
|
if (raw.contains(_podmanEmulationMsg)) {
|
||||||
|
state = state.copyWith(
|
||||||
|
error: ContainerErr(
|
||||||
|
type: ContainerErrType.podmanDetected,
|
||||||
|
message: l10n.podmanDockerEmulationDetected,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Filter out sudo password prompt from output
|
||||||
|
if (errs.any((e) => e.contains('[sudo] password'))) {
|
||||||
|
raw = raw.split('\n').where((line) => !line.contains('[sudo] password')).join('\n');
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Detect Podman not installed when using Podman mode
|
||||||
|
if (state.type == ContainerType.podman &&
|
||||||
|
(errs.any((e) => e.contains('podman: not found')) ||
|
||||||
|
raw.contains('podman: not found'))) {
|
||||||
state = state.copyWith(error: ContainerErr(type: ContainerErrType.notInstalled));
|
state = state.copyWith(error: ContainerErr(type: ContainerErrType.notInstalled));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -122,9 +154,11 @@ class ContainerNotifier extends _$ContainerNotifier {
|
|||||||
final version = json.decode(verRaw)['Client']['Version'];
|
final version = json.decode(verRaw)['Client']['Version'];
|
||||||
state = state.copyWith(version: version, error: null);
|
state = state.copyWith(version: version, error: null);
|
||||||
} catch (e, trace) {
|
} catch (e, trace) {
|
||||||
state = state.copyWith(
|
if (state.error == null) {
|
||||||
error: ContainerErr(type: ContainerErrType.invalidVersion, message: '$e'),
|
state = state.copyWith(
|
||||||
);
|
error: ContainerErr(type: ContainerErrType.invalidVersion, message: '$e'),
|
||||||
|
);
|
||||||
|
}
|
||||||
Loggers.app.warning('Container version failed', e, trace);
|
Loggers.app.warning('Container version failed', e, trace);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,9 +174,11 @@ class ContainerNotifier extends _$ContainerNotifier {
|
|||||||
final items = lines.map((e) => ContainerPs.fromRaw(e, state.type)).toList();
|
final items = lines.map((e) => ContainerPs.fromRaw(e, state.type)).toList();
|
||||||
state = state.copyWith(items: items);
|
state = state.copyWith(items: items);
|
||||||
} catch (e, trace) {
|
} catch (e, trace) {
|
||||||
state = state.copyWith(
|
if (state.error == null) {
|
||||||
error: ContainerErr(type: ContainerErrType.parsePs, message: '$e'),
|
state = state.copyWith(
|
||||||
);
|
error: ContainerErr(type: ContainerErrType.parsePs, message: '$e'),
|
||||||
|
);
|
||||||
|
}
|
||||||
Loggers.app.warning('Container ps failed', e, trace);
|
Loggers.app.warning('Container ps failed', e, trace);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,9 +198,11 @@ class ContainerNotifier extends _$ContainerNotifier {
|
|||||||
}
|
}
|
||||||
state = state.copyWith(images: images);
|
state = state.copyWith(images: images);
|
||||||
} catch (e, trace) {
|
} catch (e, trace) {
|
||||||
state = state.copyWith(
|
if (state.error == null) {
|
||||||
error: ContainerErr(type: ContainerErrType.parseImages, message: '$e'),
|
state = state.copyWith(
|
||||||
);
|
error: ContainerErr(type: ContainerErrType.parseImages, message: '$e'),
|
||||||
|
);
|
||||||
|
}
|
||||||
Loggers.app.warning('Container images failed', e, trace);
|
Loggers.app.warning('Container images failed', e, trace);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -189,9 +227,11 @@ class ContainerNotifier extends _$ContainerNotifier {
|
|||||||
item.parseStats(statsLine, state.version);
|
item.parseStats(statsLine, state.version);
|
||||||
}
|
}
|
||||||
} catch (e, trace) {
|
} catch (e, trace) {
|
||||||
state = state.copyWith(
|
if (state.error == null) {
|
||||||
error: ContainerErr(type: ContainerErrType.parseStats, message: '$e'),
|
state = state.copyWith(
|
||||||
);
|
error: ContainerErr(type: ContainerErrType.parseStats, message: '$e'),
|
||||||
|
);
|
||||||
|
}
|
||||||
Loggers.app.warning('Parse docker stats: $statsRaw', e, trace);
|
Loggers.app.warning('Parse docker stats: $statsRaw', e, trace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -227,6 +267,10 @@ class ContainerNotifier extends _$ContainerNotifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<ContainerErr?> run(String cmd, {bool autoRefresh = true}) async {
|
Future<ContainerErr?> run(String cmd, {bool autoRefresh = true}) async {
|
||||||
|
if (client == null) {
|
||||||
|
return ContainerErr(type: ContainerErrType.noClient);
|
||||||
|
}
|
||||||
|
|
||||||
cmd = switch (state.type) {
|
cmd = switch (state.type) {
|
||||||
ContainerType.docker => 'docker $cmd',
|
ContainerType.docker => 'docker $cmd',
|
||||||
ContainerType.podman => 'podman $cmd',
|
ContainerType.podman => 'podman $cmd',
|
||||||
@@ -234,7 +278,7 @@ class ContainerNotifier extends _$ContainerNotifier {
|
|||||||
|
|
||||||
state = state.copyWith(runLog: '');
|
state = state.copyWith(runLog: '');
|
||||||
final errs = <String>[];
|
final errs = <String>[];
|
||||||
final code = await client?.execWithPwd(
|
final (code, _) = await client?.execWithPwd(
|
||||||
_wrap((await sudoCompleter.future) ? 'sudo -S $cmd' : cmd),
|
_wrap((await sudoCompleter.future) ? 'sudo -S $cmd' : cmd),
|
||||||
context: context,
|
context: context,
|
||||||
onStdout: (data, _) {
|
onStdout: (data, _) {
|
||||||
@@ -242,7 +286,7 @@ class ContainerNotifier extends _$ContainerNotifier {
|
|||||||
},
|
},
|
||||||
onStderr: (data, _) => errs.add(data),
|
onStderr: (data, _) => errs.add(data),
|
||||||
id: hostId,
|
id: hostId,
|
||||||
);
|
) ?? (null, null);
|
||||||
state = state.copyWith(runLog: null);
|
state = state.copyWith(runLog: null);
|
||||||
|
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
|
|
||||||
abstract class BuildData {
|
abstract class BuildData {
|
||||||
static const String name = "ServerBox";
|
static const String name = "ServerBox";
|
||||||
static const int build = 1291;
|
static const int build = 1297;
|
||||||
static const int script = 70;
|
static const int script = 70;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1933,6 +1933,12 @@ abstract class AppLocalizations {
|
|||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Logs'**
|
/// **'Logs'**
|
||||||
String get logs;
|
String get logs;
|
||||||
|
|
||||||
|
/// No description provided for @podmanDockerEmulationDetected.
|
||||||
|
///
|
||||||
|
/// In en, this message translates to:
|
||||||
|
/// **'Podman Docker emulation detected. Please switch to Podman in settings.'**
|
||||||
|
String get podmanDockerEmulationDetected;
|
||||||
}
|
}
|
||||||
|
|
||||||
class _AppLocalizationsDelegate
|
class _AppLocalizationsDelegate
|
||||||
|
|||||||
@@ -1031,4 +1031,8 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
String get logs => 'Protokolle';
|
String get logs => 'Protokolle';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get podmanDockerEmulationDetected =>
|
||||||
|
'Podman Docker-Emulation erkannt. Bitte wechseln Sie in den Einstellungen zu Podman.';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1022,4 +1022,8 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
String get logs => 'Logs';
|
String get logs => 'Logs';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get podmanDockerEmulationDetected =>
|
||||||
|
'Podman Docker emulation detected. Please switch to Podman in settings.';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1033,4 +1033,8 @@ class AppLocalizationsEs extends AppLocalizations {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
String get logs => 'Registros';
|
String get logs => 'Registros';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get podmanDockerEmulationDetected =>
|
||||||
|
'Detectada emulación de Podman Docker. Por favor, cambie a Podman en la configuración.';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1036,4 +1036,8 @@ class AppLocalizationsFr extends AppLocalizations {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
String get logs => 'Journaux';
|
String get logs => 'Journaux';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get podmanDockerEmulationDetected =>
|
||||||
|
'Émulation Podman Docker détectée. Veuillez passer à Podman dans les paramètres.';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1022,4 +1022,8 @@ class AppLocalizationsId extends AppLocalizations {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
String get logs => 'Log';
|
String get logs => 'Log';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get podmanDockerEmulationDetected =>
|
||||||
|
'Emulasi Podman Docker terdeteksi. Silakan beralih ke Podman di pengaturan.';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -992,4 +992,8 @@ class AppLocalizationsJa extends AppLocalizations {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
String get logs => 'ログ';
|
String get logs => 'ログ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get podmanDockerEmulationDetected =>
|
||||||
|
'Podman Docker エミュレーションが検出されました。設定で Podman に切り替えてください。';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1029,4 +1029,8 @@ class AppLocalizationsNl extends AppLocalizations {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
String get logs => 'Logboeken';
|
String get logs => 'Logboeken';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get podmanDockerEmulationDetected =>
|
||||||
|
'Podman Docker-emulatie gedetecteerd. Schakel over naar Podman in de instellingen.';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1024,4 +1024,8 @@ class AppLocalizationsPt extends AppLocalizations {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
String get logs => 'Logs';
|
String get logs => 'Logs';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get podmanDockerEmulationDetected =>
|
||||||
|
'Emulação Podman Docker detectada. Por favor, alterne para Podman nas configurações.';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1028,4 +1028,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
String get logs => 'Журналы';
|
String get logs => 'Журналы';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get podmanDockerEmulationDetected =>
|
||||||
|
'Обнаружена эмуляция Podman Docker. Пожалуйста, переключитесь на Podman в настройках.';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1023,4 +1023,8 @@ class AppLocalizationsTr extends AppLocalizations {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
String get logs => 'Günlükler';
|
String get logs => 'Günlükler';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get podmanDockerEmulationDetected =>
|
||||||
|
'Podman Docker emülasyonu tespit edildi. Lütfen ayarlarda Podman\'a geçin.';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1028,4 +1028,8 @@ class AppLocalizationsUk extends AppLocalizations {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
String get logs => 'Журнали';
|
String get logs => 'Журнали';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get podmanDockerEmulationDetected =>
|
||||||
|
'Виявлено емуляцію Podman Docker. Будь ласка, переключіться на Podman у налаштуваннях.';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -977,6 +977,10 @@ class AppLocalizationsZh extends AppLocalizations {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
String get logs => '日志';
|
String get logs => '日志';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get podmanDockerEmulationDetected =>
|
||||||
|
'检测到 Podman Docker 仿真。请在设置中切换到 Podman。';
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The translations for Chinese, as used in Taiwan (`zh_TW`).
|
/// The translations for Chinese, as used in Taiwan (`zh_TW`).
|
||||||
@@ -1931,4 +1935,8 @@ class AppLocalizationsZhTw extends AppLocalizationsZh {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
String get logs => '日誌';
|
String get logs => '日誌';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get podmanDockerEmulationDetected =>
|
||||||
|
'檢測到 Podman Docker 仿真。請在設定中切換到 Podman。';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -294,5 +294,6 @@
|
|||||||
"write": "Schreiben",
|
"write": "Schreiben",
|
||||||
"writeScriptFailTip": "Das Schreiben des Skripts ist fehlgeschlagen, möglicherweise aufgrund fehlender Berechtigungen oder das Verzeichnis existiert nicht.",
|
"writeScriptFailTip": "Das Schreiben des Skripts ist fehlgeschlagen, möglicherweise aufgrund fehlender Berechtigungen oder das Verzeichnis existiert nicht.",
|
||||||
"writeScriptTip": "Nach der Verbindung mit dem Server wird ein Skript in `~/.config/server_box` \n | `/tmp/server_box` geschrieben, um den Systemstatus zu überwachen. Sie können den Skriptinhalt überprüfen.",
|
"writeScriptTip": "Nach der Verbindung mit dem Server wird ein Skript in `~/.config/server_box` \n | `/tmp/server_box` geschrieben, um den Systemstatus zu überwachen. Sie können den Skriptinhalt überprüfen.",
|
||||||
"logs": "Protokolle"
|
"logs": "Protokolle",
|
||||||
|
"podmanDockerEmulationDetected": "Podman Docker-Emulation erkannt. Bitte wechseln Sie in den Einstellungen zu Podman."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -304,5 +304,6 @@
|
|||||||
"menuGitHubRepository": "GitHub Repository",
|
"menuGitHubRepository": "GitHub Repository",
|
||||||
"menuWiki": "Wiki",
|
"menuWiki": "Wiki",
|
||||||
"menuHelp": "Help",
|
"menuHelp": "Help",
|
||||||
"logs": "Logs"
|
"logs": "Logs",
|
||||||
|
"podmanDockerEmulationDetected": "Podman Docker emulation detected. Please switch to Podman in settings."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -294,5 +294,6 @@
|
|||||||
"write": "Escribir",
|
"write": "Escribir",
|
||||||
"writeScriptFailTip": "La escritura en el script falló, posiblemente por falta de permisos o porque el directorio no existe.",
|
"writeScriptFailTip": "La escritura en el script falló, posiblemente por falta de permisos o porque el directorio no existe.",
|
||||||
"writeScriptTip": "Después de conectarse al servidor, se escribirá un script en `~/.config/server_box` \n | `/tmp/server_box` para monitorear el estado del sistema. Puedes revisar el contenido del script.",
|
"writeScriptTip": "Después de conectarse al servidor, se escribirá un script en `~/.config/server_box` \n | `/tmp/server_box` para monitorear el estado del sistema. Puedes revisar el contenido del script.",
|
||||||
"logs": "Registros"
|
"logs": "Registros",
|
||||||
|
"podmanDockerEmulationDetected": "Detectada emulación de Podman Docker. Por favor, cambie a Podman en la configuración."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -294,5 +294,6 @@
|
|||||||
"write": "Écrire",
|
"write": "Écrire",
|
||||||
"writeScriptFailTip": "Échec de l'écriture dans le script, probablement en raison d'un manque de permissions ou que le répertoire n'existe pas.",
|
"writeScriptFailTip": "Échec de l'écriture dans le script, probablement en raison d'un manque de permissions ou que le répertoire n'existe pas.",
|
||||||
"writeScriptTip": "Après la connexion au serveur, un script sera écrit dans `~/.config/server_box` \n | `/tmp/server_box` pour surveiller l'état du système. Vous pouvez examiner le contenu du script.",
|
"writeScriptTip": "Après la connexion au serveur, un script sera écrit dans `~/.config/server_box` \n | `/tmp/server_box` pour surveiller l'état du système. Vous pouvez examiner le contenu du script.",
|
||||||
"logs": "Journaux"
|
"logs": "Journaux",
|
||||||
|
"podmanDockerEmulationDetected": "Émulation Podman Docker détectée. Veuillez passer à Podman dans les paramètres."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -294,5 +294,6 @@
|
|||||||
"write": "Tulis",
|
"write": "Tulis",
|
||||||
"writeScriptFailTip": "Penulisan ke skrip gagal, mungkin karena tidak ada izin atau direktori tidak ada.",
|
"writeScriptFailTip": "Penulisan ke skrip gagal, mungkin karena tidak ada izin atau direktori tidak ada.",
|
||||||
"writeScriptTip": "Setelah terhubung ke server, sebuah skrip akan ditulis ke `~/.config/server_box` \n | `/tmp/server_box` untuk memantau status sistem. Anda dapat meninjau konten skrip tersebut.",
|
"writeScriptTip": "Setelah terhubung ke server, sebuah skrip akan ditulis ke `~/.config/server_box` \n | `/tmp/server_box` untuk memantau status sistem. Anda dapat meninjau konten skrip tersebut.",
|
||||||
"logs": "Log"
|
"logs": "Log",
|
||||||
|
"podmanDockerEmulationDetected": "Emulasi Podman Docker terdeteksi. Silakan beralih ke Podman di pengaturan."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -294,5 +294,6 @@
|
|||||||
"write": "書き込み",
|
"write": "書き込み",
|
||||||
"writeScriptFailTip": "スクリプトの書き込みに失敗しました。権限がないかディレクトリが存在しない可能性があります。",
|
"writeScriptFailTip": "スクリプトの書き込みに失敗しました。権限がないかディレクトリが存在しない可能性があります。",
|
||||||
"writeScriptTip": "サーバーへの接続後、システムステータスを監視するスクリプトが `~/.config/server_box` \n | `/tmp/server_box` に書き込まれます。スクリプトの内容を確認できます。",
|
"writeScriptTip": "サーバーへの接続後、システムステータスを監視するスクリプトが `~/.config/server_box` \n | `/tmp/server_box` に書き込まれます。スクリプトの内容を確認できます。",
|
||||||
"logs": "ログ"
|
"logs": "ログ",
|
||||||
|
"podmanDockerEmulationDetected": "Podman Docker エミュレーションが検出されました。設定で Podman に切り替えてください。"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -294,5 +294,6 @@
|
|||||||
"write": "Schrijven",
|
"write": "Schrijven",
|
||||||
"writeScriptFailTip": "Het schrijven naar het script is mislukt, mogelijk door gebrek aan rechten of omdat de map niet bestaat.",
|
"writeScriptFailTip": "Het schrijven naar het script is mislukt, mogelijk door gebrek aan rechten of omdat de map niet bestaat.",
|
||||||
"writeScriptTip": "Na het verbinden met de server wordt een script geschreven naar `~/.config/server_box` \n | `/tmp/server_box` om de systeemstatus te monitoren. U kunt de inhoud van het script controleren.",
|
"writeScriptTip": "Na het verbinden met de server wordt een script geschreven naar `~/.config/server_box` \n | `/tmp/server_box` om de systeemstatus te monitoren. U kunt de inhoud van het script controleren.",
|
||||||
"logs": "Logboeken"
|
"logs": "Logboeken",
|
||||||
|
"podmanDockerEmulationDetected": "Podman Docker-emulatie gedetecteerd. Schakel over naar Podman in de instellingen."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -294,5 +294,6 @@
|
|||||||
"write": "Escrita",
|
"write": "Escrita",
|
||||||
"writeScriptFailTip": "Falha ao escrever no script, possivelmente devido à falta de permissões ou o diretório não existe.",
|
"writeScriptFailTip": "Falha ao escrever no script, possivelmente devido à falta de permissões ou o diretório não existe.",
|
||||||
"writeScriptTip": "Após conectar ao servidor, um script será escrito em `~/.config/server_box` \n | `/tmp/server_box` para monitorar o status do sistema. Você pode revisar o conteúdo do script.",
|
"writeScriptTip": "Após conectar ao servidor, um script será escrito em `~/.config/server_box` \n | `/tmp/server_box` para monitorar o status do sistema. Você pode revisar o conteúdo do script.",
|
||||||
"logs": "Logs"
|
"logs": "Logs",
|
||||||
|
"podmanDockerEmulationDetected": "Emulação Podman Docker detectada. Por favor, alterne para Podman nas configurações."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -294,5 +294,6 @@
|
|||||||
"write": "Запись",
|
"write": "Запись",
|
||||||
"writeScriptFailTip": "Запись скрипта не удалась, возможно, из-за отсутствия прав или потому что, директории не существует.",
|
"writeScriptFailTip": "Запись скрипта не удалась, возможно, из-за отсутствия прав или потому что, директории не существует.",
|
||||||
"writeScriptTip": "После подключения к серверу скрипт будет записан в `~/.config/server_box` \n | `/tmp/server_box` для мониторинга состояния системы. Вы можете проверить содержимое скрипта.",
|
"writeScriptTip": "После подключения к серверу скрипт будет записан в `~/.config/server_box` \n | `/tmp/server_box` для мониторинга состояния системы. Вы можете проверить содержимое скрипта.",
|
||||||
"logs": "Журналы"
|
"logs": "Журналы",
|
||||||
|
"podmanDockerEmulationDetected": "Обнаружена эмуляция Podman Docker. Пожалуйста, переключитесь на Podman в настройках."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -294,5 +294,6 @@
|
|||||||
"write": "Yaz",
|
"write": "Yaz",
|
||||||
"writeScriptFailTip": "Betik yazma başarısız oldu, muhtemelen izin eksikliği veya dizin mevcut değil.",
|
"writeScriptFailTip": "Betik yazma başarısız oldu, muhtemelen izin eksikliği veya dizin mevcut değil.",
|
||||||
"writeScriptTip": "Sunucuya bağlandıktan sonra, sistem durumunu izlemek için `~/.config/server_box` \n | `/tmp/server_box` dizinine bir betik yazılacak. Betik içeriğini inceleyebilirsiniz.",
|
"writeScriptTip": "Sunucuya bağlandıktan sonra, sistem durumunu izlemek için `~/.config/server_box` \n | `/tmp/server_box` dizinine bir betik yazılacak. Betik içeriğini inceleyebilirsiniz.",
|
||||||
"logs": "Günlükler"
|
"logs": "Günlükler",
|
||||||
|
"podmanDockerEmulationDetected": "Podman Docker emülasyonu tespit edildi. Lütfen ayarlarda Podman'a geçin."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -294,5 +294,6 @@
|
|||||||
"write": "Записати",
|
"write": "Записати",
|
||||||
"writeScriptFailTip": "Запис у скрипт не вдався, можливо, через брак дозволів або каталог не існує.",
|
"writeScriptFailTip": "Запис у скрипт не вдався, можливо, через брак дозволів або каталог не існує.",
|
||||||
"writeScriptTip": "Після підключення до сервера скрипт буде записано у `~/.config/server_box` \n | `/tmp/server_box` для моніторингу стану системи. Ви можете переглянути вміст скрипта.",
|
"writeScriptTip": "Після підключення до сервера скрипт буде записано у `~/.config/server_box` \n | `/tmp/server_box` для моніторингу стану системи. Ви можете переглянути вміст скрипта.",
|
||||||
"logs": "Журнали"
|
"logs": "Журнали",
|
||||||
|
"podmanDockerEmulationDetected": "Виявлено емуляцію Podman Docker. Будь ласка, переключіться на Podman у налаштуваннях."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -301,5 +301,6 @@
|
|||||||
"menuGitHubRepository": "GitHub 仓库",
|
"menuGitHubRepository": "GitHub 仓库",
|
||||||
"menuWiki": "Wiki",
|
"menuWiki": "Wiki",
|
||||||
"menuHelp": "帮助",
|
"menuHelp": "帮助",
|
||||||
"logs": "日志"
|
"logs": "日志",
|
||||||
|
"podmanDockerEmulationDetected": "检测到 Podman Docker 仿真。请在设置中切换到 Podman。"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -294,5 +294,6 @@
|
|||||||
"write": "寫入",
|
"write": "寫入",
|
||||||
"writeScriptFailTip": "寫入腳本失敗,可能是沒有權限/目錄不存在等。",
|
"writeScriptFailTip": "寫入腳本失敗,可能是沒有權限/目錄不存在等。",
|
||||||
"writeScriptTip": "連線到伺服器後,將會在 `~/.config/server_box` \n | `/tmp/server_box` 中寫入一個腳本來監測系統狀態。你可以審查腳本內容。",
|
"writeScriptTip": "連線到伺服器後,將會在 `~/.config/server_box` \n | `/tmp/server_box` 中寫入一個腳本來監測系統狀態。你可以審查腳本內容。",
|
||||||
"logs": "日誌"
|
"logs": "日誌",
|
||||||
|
"podmanDockerEmulationDetected": "檢測到 Podman Docker 仿真。請在設定中切換到 Podman。"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -234,7 +234,7 @@ class _ContainerPageState extends ConsumerState<ContainerPage> {
|
|||||||
if (item.cpu == null || item.mem == null) return UIs.placeholder;
|
if (item.cpu == null || item.mem == null) return UIs.placeholder;
|
||||||
return LayoutBuilder(
|
return LayoutBuilder(
|
||||||
builder: (_, cons) {
|
builder: (_, cons) {
|
||||||
final width = cons.maxWidth / 2 - 41;
|
final width = cons.maxWidth / 2 - 6.5;
|
||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
UIs.height13,
|
UIs.height13,
|
||||||
@@ -264,10 +264,17 @@ class _ContainerPageState extends ConsumerState<ContainerPage> {
|
|||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Row(
|
Row(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
Icon(icon, size: 12, color: Colors.grey),
|
Icon(icon, size: 12, color: Colors.grey),
|
||||||
UIs.width7,
|
UIs.width7,
|
||||||
Text(value ?? l10n.unknown, style: UIs.text11Grey),
|
Expanded(
|
||||||
|
child: Text(
|
||||||
|
value ?? l10n.unknown,
|
||||||
|
style: UIs.text11Grey,
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -49,11 +49,12 @@ extension _Operation on _ServerPageState {
|
|||||||
await context.showRoundDialog(title: libL10n.attention, child: Text(l10n.suspendTip));
|
await context.showRoundDialog(title: libL10n.attention, child: Text(l10n.suspendTip));
|
||||||
Stores.setting.showSuspendTip.put(false);
|
Stores.setting.showSuspendTip.put(false);
|
||||||
}
|
}
|
||||||
srv.client?.execWithPwd(
|
await srv.client?.execWithPwd(
|
||||||
ShellFunc.suspend.exec(srv.spi.id, systemType: srv.status.system, customDir: null),
|
ShellFunc.suspend.exec(srv.spi.id, systemType: srv.status.system, customDir: null),
|
||||||
context: context,
|
context: context,
|
||||||
id: srv.id,
|
id: srv.id,
|
||||||
);
|
) ??
|
||||||
|
(null, '');
|
||||||
},
|
},
|
||||||
typ: l10n.suspend,
|
typ: l10n.suspend,
|
||||||
name: srv.spi.name,
|
name: srv.spi.name,
|
||||||
@@ -62,11 +63,13 @@ extension _Operation on _ServerPageState {
|
|||||||
|
|
||||||
void _onTapShutdown(ServerState srv) {
|
void _onTapShutdown(ServerState srv) {
|
||||||
_askFor(
|
_askFor(
|
||||||
func: () => srv.client?.execWithPwd(
|
func: () async {
|
||||||
ShellFunc.shutdown.exec(srv.spi.id, systemType: srv.status.system, customDir: null),
|
await srv.client?.execWithPwd(
|
||||||
context: context,
|
ShellFunc.shutdown.exec(srv.spi.id, systemType: srv.status.system, customDir: null),
|
||||||
id: srv.id,
|
context: context,
|
||||||
),
|
id: srv.id,
|
||||||
|
);
|
||||||
|
},
|
||||||
typ: l10n.shutdown,
|
typ: l10n.shutdown,
|
||||||
name: srv.spi.name,
|
name: srv.spi.name,
|
||||||
);
|
);
|
||||||
@@ -74,11 +77,14 @@ extension _Operation on _ServerPageState {
|
|||||||
|
|
||||||
void _onTapReboot(ServerState srv) {
|
void _onTapReboot(ServerState srv) {
|
||||||
_askFor(
|
_askFor(
|
||||||
func: () => srv.client?.execWithPwd(
|
func: () async {
|
||||||
ShellFunc.reboot.exec(srv.spi.id, systemType: srv.status.system, customDir: null),
|
await srv.client?.execWithPwd(
|
||||||
context: context,
|
ShellFunc.reboot.exec(srv.spi.id, systemType: srv.status.system, customDir: null),
|
||||||
id: srv.id,
|
context: context,
|
||||||
),
|
id: srv.id,
|
||||||
|
) ??
|
||||||
|
(null, '');
|
||||||
|
},
|
||||||
typ: l10n.reboot,
|
typ: l10n.reboot,
|
||||||
name: srv.spi.name,
|
name: srv.spi.name,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -355,7 +355,7 @@ class SSHPageState extends ConsumerState<SSHPage>
|
|||||||
onTapUp: (_) => _virtKeyLongPressTimer?.cancel(),
|
onTapUp: (_) => _virtKeyLongPressTimer?.cancel(),
|
||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
width: virtKeyWidth,
|
width: virtKeyWidth,
|
||||||
height: _virtKeysHeight / _virtKeysList.length,
|
height: _horizonVirtKeys ? _virtKeysHeight : _virtKeysHeight / _virtKeysList.length,
|
||||||
child: Center(child: child),
|
child: Center(child: child),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -471,7 +471,7 @@
|
|||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 1291;
|
CURRENT_PROJECT_VERSION = 1297;
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = "Server Box";
|
INFOPLIST_KEY_CFBundleDisplayName = "Server Box";
|
||||||
@@ -481,7 +481,7 @@
|
|||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.15;
|
MACOSX_DEPLOYMENT_TARGET = 10.15;
|
||||||
MARKETING_VERSION = 1.0.1291;
|
MARKETING_VERSION = 1.0.1297;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
||||||
PRODUCT_NAME = "Server Box";
|
PRODUCT_NAME = "Server Box";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@@ -608,7 +608,7 @@
|
|||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 1291;
|
CURRENT_PROJECT_VERSION = 1297;
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = "Server Box";
|
INFOPLIST_KEY_CFBundleDisplayName = "Server Box";
|
||||||
@@ -618,7 +618,7 @@
|
|||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.15;
|
MACOSX_DEPLOYMENT_TARGET = 10.15;
|
||||||
MARKETING_VERSION = 1.0.1291;
|
MARKETING_VERSION = 1.0.1297;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
||||||
PRODUCT_NAME = "Server Box";
|
PRODUCT_NAME = "Server Box";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@@ -638,7 +638,7 @@
|
|||||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application";
|
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application";
|
||||||
CODE_SIGN_STYLE = Manual;
|
CODE_SIGN_STYLE = Manual;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 1291;
|
CURRENT_PROJECT_VERSION = 1297;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
"DEVELOPMENT_TEAM[sdk=macosx*]" = BA88US33G6;
|
"DEVELOPMENT_TEAM[sdk=macosx*]" = BA88US33G6;
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
@@ -649,7 +649,7 @@
|
|||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.15;
|
MACOSX_DEPLOYMENT_TARGET = 10.15;
|
||||||
MARKETING_VERSION = 1.0.1291;
|
MARKETING_VERSION = 1.0.1297;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
||||||
PRODUCT_NAME = "Server Box";
|
PRODUCT_NAME = "Server Box";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
name: server_box
|
name: server_box
|
||||||
description: server status & toolbox app.
|
description: server status & toolbox app.
|
||||||
publish_to: "none"
|
publish_to: "none"
|
||||||
version: 1.0.1291+1291
|
version: 1.0.1297+1297
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=3.9.0"
|
sdk: ">=3.9.0"
|
||||||
|
|||||||
Reference in New Issue
Block a user