diff --git a/.github/workflows/deploy-ios.yml b/.github/workflows/deploy-ios.yml new file mode 100644 index 00000000..cab4e1b5 --- /dev/null +++ b/.github/workflows/deploy-ios.yml @@ -0,0 +1,75 @@ +name: Deploy iOS TestFlight + +# List of secrets that must be defined in GitHub Secrets. +# +# - APP_STORE_CONNECT_ISSUER_ID +# - APP_STORE_CONNECT_KEY_ID +# - APP_STORE_CONNECT_KEY +# - APP_STORE_TEAM_ID +# - MATCH_PASSWORD +# - SSH_PRIVATE_KEY + +on: + workflow_dispatch: + inputs: + BUILD_NUMBER: + description: "Build Number (e.g. 43)" + required: true + type: number + + RELEASE_NOTE: + description: "Release Note (for automatic review submission)" + required: false + default: "" + type: string + +jobs: + deploy: + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup SSH + uses: webfactory/ssh-agent@v0.9.0 + with: + # SSH private key used to access your Fastlane match repository. + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + + - name: Setup Flutter + uses: subosito/flutter-action@v2 + with: + channel: main # latest version + + - name: Deploy iOS + uses: gru2007/flutter-fastlane-action-testflight@main + with: + platform: "ios" + ios-app-id: "tech.artemev.banilife" + testflight-groups: "Тестеры" + + # Version name for this build (e.g., 1.0.0) + version-name: "1.0" # TestFlight Requirement. Do not change. + + # Build number for this build (e.g., 42) + build-number: ${{ github.event.inputs.BUILD_NUMBER }} + + # Release note for the build, used for automatic review submission + release-note: ${{ github.event.inputs.RELEASE_NOTE }} + + # Fastlane match git repository (e.g., "my-org/my-cert-repo") + match-repository: "gru2007/fastlane-certs" + + # Password for match repository + match-password: ${{ secrets.MATCH_PASSWORD }} + + # App Store Connect issuer ID + appstore-connect-issuer-id: ${{ secrets.APP_STORE_CONNECT_ISSUER_ID }} + + # App Store Connect API key ID + appstore-connect-key-id: ${{ secrets.APP_STORE_CONNECT_KEY_ID }} + + # App Store Connect API key content + appstore-connect-key: ${{ secrets.APP_STORE_CONNECT_KEY }} + + # Apple Developer Team ID + appstore-team-id: ${{ secrets.APP_STORE_TEAM_ID }} diff --git a/.github/workflows/ios_deploy.yml b/.github/workflows/ios_deploy.yml deleted file mode 100644 index eaddab67..00000000 --- a/.github/workflows/ios_deploy.yml +++ /dev/null @@ -1,210 +0,0 @@ -name: Build iOS with Deploy to TestFlight - -on: - workflow_dispatch: - push: - branches: [main, master] - paths: ['lib/**', 'ios/**', 'pubspec.yaml', '.github/workflows/ios_deploy.yml'] - -jobs: - build-ios: - runs-on: macos-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Flutter - uses: subosito/flutter-action@v2 - with: - channel: 'stable' - cache: true - - - name: Get dependencies - run: flutter pub get - - - name: Setup certificates and provisioning - env: - CERTIFICATE_BASE64: ${{ secrets.CERTIFICATE_BASE64 }} - CERTIFICATE_PASSWORD: ${{ secrets.CERTIFICATE_PASSWORD }} - PROVISIONING_PROFILE_BASE64: ${{ secrets.PROVISIONING_PROFILE_BASE64 }} - run: | - echo "$CERTIFICATE_BASE64" | base64 --decode > certificate.p12 - echo "$PROVISIONING_PROFILE_BASE64" | base64 --decode > profile.mobileprovision - - KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db - KEYCHAIN_PASSWORD=$(openssl rand -base64 32) - - security create-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" - security set-keychain-settings -lut 21600 "$KEYCHAIN_PATH" - security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" - - security import certificate.p12 \ - -P "$CERTIFICATE_PASSWORD" \ - -A \ - -t cert \ - -f pkcs12 \ - -k "$KEYCHAIN_PATH" - - security list-keychain -d user -s "$KEYCHAIN_PATH" - security set-key-partition-list -S apple-tool:,apple: -s -k "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" - - PP_UUID=$(security cms -D -i profile.mobileprovision | plutil -extract UUID raw -o - -) - BUNDLE_ID=$(security cms -D -i profile.mobileprovision | plutil -extract Entitlements.application-identifier raw -o - - | sed 's/^[^.]*\.//') - - echo "Provisioning Profile UUID: $PP_UUID" - echo "Bundle ID from profile: $BUNDLE_ID" - - mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles - cp profile.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/$PP_UUID.mobileprovision - - echo "Certificates:" - security find-identity -v -p codesigning "$KEYCHAIN_PATH" - - - name: Update Bundle ID to match provisioning profile - run: | - BUNDLE_ID=$(security cms -D -i profile.mobileprovision | plutil -extract Entitlements.application-identifier raw -o - - | sed 's/^[^.]*\.//') - echo "Setting Bundle ID to: $BUNDLE_ID" - - /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $BUNDLE_ID" ios/Runner/Info.plist - sed -i '' "s/PRODUCT_BUNDLE_IDENTIFIER = com.gwid.app.gwid;/PRODUCT_BUNDLE_IDENTIFIER = $BUNDLE_ID;/g" ios/Runner.xcodeproj/project.pbxproj - - - name: Update Podfile with code signing settings - run: | - cat >> ios/Podfile <<'EOF' - - post_install do |installer| - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - # Pods не требуют подписи - config.build_settings['CODE_SIGNING_REQUIRED'] = 'NO' - config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO' - - # Обновить deployment target - if config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'].to_f < 12.0 - config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0' - end - end - end - end - EOF - - - name: Install CocoaPods dependencies - run: | - cd ios - pod install - - - name: Create ExportOptions.plist - run: | - TEAM_ID=$(security cms -D -i profile.mobileprovision | plutil -extract TeamIdentifier.0 raw -o - -) - PP_NAME=$(security cms -D -i profile.mobileprovision | plutil -extract Name raw -o - -) - BUNDLE_ID=$(security cms -D -i profile.mobileprovision | plutil -extract Entitlements.application-identifier raw -o - - | sed 's/^[^.]*\.//') - - cat > ios/ExportOptions.plist < - - - - method - app-store - teamID - $TEAM_ID - signingStyle - manual - signingCertificate - Apple Distribution - provisioningProfiles - - $BUNDLE_ID - $PP_NAME - - - - EOF - - echo "ExportOptions.plist:" - cat ios/ExportOptions.plist - - - name: Build and Archive - run: | - cd ios - - CERT_NAME=$(security find-identity -v -p codesigning $RUNNER_TEMP/app-signing.keychain-db | grep "Apple Distribution" | head -1 | grep -o '".*"' | sed 's/"//g') - TEAM_ID=$(security cms -D -i ../profile.mobileprovision | plutil -extract TeamIdentifier.0 raw -o - -) - - echo "==========================================" - echo "Certificate: $CERT_NAME" - echo "Team ID: $TEAM_ID" - echo "==========================================" - - # Clean перед сборкой - xcodebuild clean \ - -workspace Runner.xcworkspace \ - -scheme Runner \ - -configuration Release - - # Архивация - xcodebuild archive \ - -workspace Runner.xcworkspace \ - -scheme Runner \ - -configuration Release \ - -archivePath $PWD/build/Runner.xcarchive \ - -sdk iphoneos \ - -destination 'generic/platform=iOS' \ - DEVELOPMENT_TEAM="$TEAM_ID" \ - CODE_SIGN_STYLE=Manual \ - CODE_SIGN_IDENTITY="$CERT_NAME" \ - -allowProvisioningUpdates \ - 2>&1 | tee xcodebuild.log - - # Проверить результат - if [ ${PIPESTATUS[0]} -ne 0 ]; then - echo "" - echo "========== BUILD FAILED - Error Details ==========" - grep -i "error:" xcodebuild.log | head -30 - exit 1 - fi - - # Экспорт IPA - xcodebuild -exportArchive \ - -archivePath $PWD/build/Runner.xcarchive \ - -exportPath $PWD/build \ - -exportOptionsPlist ExportOptions.plist \ - -allowProvisioningUpdates - - - name: Upload to TestFlight - if: github.event_name == 'push' && github.ref == 'refs/heads/main' - env: - APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }} - APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }} - APPLE_KEY_CONTENT: ${{ secrets.APPLE_KEY_CONTENT }} - run: | - echo "$APPLE_KEY_CONTENT" > AuthKey_$APPLE_KEY_ID.p8 - - xcrun altool --upload-app \ - --type ios \ - --file ios/build/*.ipa \ - --apiKey $APPLE_KEY_ID \ - --apiIssuer $APPLE_ISSUER_ID - - - name: Upload build log on failure - if: failure() - uses: actions/upload-artifact@v4 - with: - name: xcodebuild-log - path: ios/xcodebuild.log - retention-days: 7 - - - name: Upload IPA artifact - uses: actions/upload-artifact@v4 - if: success() - with: - name: komet-ios-ipa - path: ios/build/*.ipa - retention-days: 30 - - - name: Cleanup - if: always() - run: | - security delete-keychain $RUNNER_TEMP/app-signing.keychain-db || true - rm -f certificate.p12 profile.mobileprovision AuthKey_*.p8 diff --git a/README.md b/README.md index 39071394..cc78b889 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,14 @@ # Komet Альтернативный FOSS клиент для мессенджера MAX +> Сборка для iOS от Gru ## Установка -[Последний релиз](https://github.com/KometTeam/Komet/releases/latest) / [Telegram Канал](https://t.me/TeamKomet) +

+ + TestFlight + +

## Сборка из исходного кода ```console diff --git a/ios/ExportOptions.plist b/ios/ExportOptions.plist deleted file mode 100644 index 9d272e2f..00000000 --- a/ios/ExportOptions.plist +++ /dev/null @@ -1,23 +0,0 @@ - - - - - method - app-store - teamID - YOUR_TEAM_ID - uploadBitcode - - compileBitcode - - uploadSymbols - - signingStyle - manual - provisioningProfiles - - tech.artemev.banilife - Komet Client App Store - - - diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 39fb1f3a..48ef78a9 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -100,7 +100,6 @@ 00276196876E57A3844B949B /* Pods-RunnerTests.release.xcconfig */, 3A15B59AF351A8DF2C8AA220 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Pods; path = Pods; sourceTree = ""; }; @@ -299,10 +298,14 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + inputPaths = ( + ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); + outputPaths = ( + ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; @@ -331,10 +334,14 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); + inputPaths = ( + ); name = "[CP] Copy Pods Resources"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); + outputPaths = ( + ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; @@ -493,23 +500,24 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = C4L8Q37YC4; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Komet; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)", - ); LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)", + ); OTHER_LDFLAGS = ( "$(inherited)", "-force_load", "$(SRCROOT)/liblz4-iphoneos.a", ); - PRODUCT_BUNDLE_IDENTIFIER = com.gwid.app.gwid; + PRODUCT_BUNDLE_IDENTIFIER = tech.artemev.banilife; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -685,23 +693,24 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = C4L8Q37YC4; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Komet; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)", - ); LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)", + ); OTHER_LDFLAGS = ( "$(inherited)", "-force_load", "$(SRCROOT)/liblz4-iphoneos.a", ); - PRODUCT_BUNDLE_IDENTIFIER = com.gwid.app.gwid; + PRODUCT_BUNDLE_IDENTIFIER = tech.artemev.banilife; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -717,23 +726,24 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = C4L8Q37YC4; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Komet; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)", - ); LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)", + ); OTHER_LDFLAGS = ( "$(inherited)", "-force_load", "$(SRCROOT)/liblz4-iphoneos.a", ); - PRODUCT_BUNDLE_IDENTIFIER = com.gwid.app.gwid; + PRODUCT_BUNDLE_IDENTIFIER = tech.artemev.banilife; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d0d98aa1..05d2cfe0 100644 --- a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1 +1,557 @@ -{"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} \ No newline at end of file +{ + "images" : [ + { + "filename" : "notification40.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "20x20" + }, + { + "filename" : "notification60.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "20x20" + }, + { + "filename" : "settings58.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "settings87.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "29x29" + }, + { + "filename" : "ipad76.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "38x38" + }, + { + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "38x38" + }, + { + "filename" : "spotlight80.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "spotlight120 1.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "40x40" + }, + { + "filename" : "spotlight120.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "60x60" + }, + { + "filename" : "iphone180.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "64x64" + }, + { + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "64x64" + }, + { + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "68x68" + }, + { + "filename" : "ipad152.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "76x76" + }, + { + "filename" : "ipadPro167.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "filename" : "appstore1024.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "20x20" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "20x20" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "29x29" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "29x29" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "38x38" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "38x38" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "40x40" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "40x40" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "60x60" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "60x60" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "64x64" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "64x64" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "68x68" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "76x76" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "20x20" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "20x20" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "29x29" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "29x29" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "38x38" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "38x38" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "40x40" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "40x40" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "60x60" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "60x60" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "64x64" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "64x64" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "68x68" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "76x76" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "filename" : "mac16.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "16x16" + }, + { + "filename" : "mac32.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "16x16" + }, + { + "filename" : "mac32.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "32x32" + }, + { + "filename" : "mac64.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "32x32" + }, + { + "filename" : "mac128.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "128x128" + }, + { + "filename" : "mac256.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "128x128" + }, + { + "filename" : "mac256.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "256x256" + }, + { + "filename" : "mac512.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "256x256" + }, + { + "filename" : "mac512.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "512x512" + }, + { + "filename" : "mac1024.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "512x512" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png deleted file mode 100644 index bf8d3a24..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index db1911e3..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index 2e76eae1..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index fb66b2d8..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index 28c06672..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index 80f3252c..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index b713a78b..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 2e76eae1..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index 7d53237e..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index d7875cd9..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png deleted file mode 100644 index 06e35937..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png deleted file mode 100644 index 74e064d0..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png deleted file mode 100644 index 589f57b3..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png deleted file mode 100644 index 4a35a9df..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index d7875cd9..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index f1ac8137..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png deleted file mode 100644 index 837860f8..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png deleted file mode 100644 index 288333d2..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index 49d42c96..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index c2d33f35..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index 7ed91ebb..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/appstore1024.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/appstore1024.png new file mode 100644 index 00000000..3ba5c236 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/appstore1024.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/ipad152.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/ipad152.png new file mode 100644 index 00000000..0e3ef165 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/ipad152.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/ipad76.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/ipad76.png new file mode 100644 index 00000000..f7f86ccf Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/ipad76.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/ipadPro167.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/ipadPro167.png new file mode 100644 index 00000000..bb8e688a Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/ipadPro167.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/iphone180.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/iphone180.png new file mode 100644 index 00000000..e1700301 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/iphone180.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/mac1024.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/mac1024.png new file mode 100644 index 00000000..5bbfdb4f Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/mac1024.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/mac128.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/mac128.png new file mode 100644 index 00000000..f545d784 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/mac128.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/mac16.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/mac16.png new file mode 100644 index 00000000..44dde70c Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/mac16.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/mac256.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/mac256.png new file mode 100644 index 00000000..c3be07c7 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/mac256.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/mac32.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/mac32.png new file mode 100644 index 00000000..d4aeaa0c Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/mac32.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/mac512.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/mac512.png new file mode 100644 index 00000000..5d8828e6 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/mac512.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/mac64.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/mac64.png new file mode 100644 index 00000000..d95c3293 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/mac64.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/notification40.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/notification40.png new file mode 100644 index 00000000..671f88d2 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/notification40.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/notification60.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/notification60.png new file mode 100644 index 00000000..c3f209f4 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/notification60.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/settings58.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/settings58.png new file mode 100644 index 00000000..6d597dee Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/settings58.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/settings87.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/settings87.png new file mode 100644 index 00000000..4330a3da Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/settings87.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/spotlight120 1.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/spotlight120 1.png new file mode 100644 index 00000000..8b3d705f Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/spotlight120 1.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/spotlight120.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/spotlight120.png new file mode 100644 index 00000000..8b3d705f Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/spotlight120.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/spotlight80.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/spotlight80.png new file mode 100644 index 00000000..6d162a6b Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/spotlight80.png differ diff --git a/ios/Runner/Assets.xcassets/Contents.json b/ios/Runner/Assets.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/ios/Runner/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index ae1de5a7..94f9189f 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -2,6 +2,14 @@ + ITSAppUsesNonExemptEncryption + + BGTaskSchedulerPermittedIdentifiers + + com.komet.app.refresh + + CADisableMinimumFrameDurationOnPhone + CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName @@ -24,6 +32,23 @@ $(FLUTTER_BUILD_NUMBER) LSRequiresIPhoneOS + NSCameraUsageDescription + Приложению необходим доступ к камере для съемки фото и видео + NSMicrophoneUsageDescription + Приложению необходим доступ к микрофону для записи звука + NSPhotoLibraryAddUsageDescription + Приложению необходим доступ к галерее для сохранения фотографий + NSPhotoLibraryUsageDescription + Приложению необходим доступ к галерее для выбора и просмотра фотографий + UIApplicationSupportsIndirectInputEvents + + UIBackgroundModes + + fetch + processing + remote-notification + audio + UILaunchStoryboardName LaunchScreen UIMainStoryboardFile @@ -41,26 +66,5 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - - NSCameraUsageDescription - Приложению необходим доступ к камере для съемки фото и видео - NSPhotoLibraryUsageDescription - Приложению необходим доступ к галерее для выбора и просмотра фотографий - NSPhotoLibraryAddUsageDescription - Приложению необходим доступ к галерее для сохранения фотографий - UIBackgroundModes - - fetch - processing - remote-notification - audio - - BGTaskSchedulerPermittedIdentifiers - - com.komet.app.refresh - diff --git a/lib/main.dart b/lib/main.dart index 3d121e49..0f9439ec 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:flutter/cupertino.dart' show CupertinoPageTransition; import 'package:dynamic_color/dynamic_color.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:intl/date_symbol_data_local.dart'; @@ -201,7 +202,8 @@ class MyApp extends StatelessWidget { ) : PageTransitionsTheme( builders: { - TargetPlatform.android: CupertinoPageTransitionsBuilder(), + TargetPlatform.android: + _CupertinoStyleAndroidPageTransitionsBuilder(), }, ); @@ -397,3 +399,24 @@ class _MiniFpsHudState extends State<_MiniFpsHud> { ); } } + +class _CupertinoStyleAndroidPageTransitionsBuilder + extends PageTransitionsBuilder { + const _CupertinoStyleAndroidPageTransitionsBuilder(); + + @override + Widget buildTransitions( + PageRoute route, + BuildContext context, + Animation animation, + Animation secondaryAnimation, + Widget child, + ) { + return CupertinoPageTransition( + primaryRouteAnimation: animation, + secondaryRouteAnimation: secondaryAnimation, + linearTransition: false, + child: child, + ); + } +}