diff --git a/.gitignore b/.gitignore index 1b0a90b..d9c8d83 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,10 @@ app.*.map.json /android/app/debug /android/app/profile /android/app/release +/android/.kotlin/ + +# Release signing material and packaged runtime secrets are restored locally +# from the team's secure storage; never commit them. +/android/key.properties +/android/app/files/*.jks +/assets/env/.env diff --git a/android/app/files/jinzhi.jks b/android/app/files/jinzhi.jks deleted file mode 100644 index 22af8aa..0000000 Binary files a/android/app/files/jinzhi.jks and /dev/null differ diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml index 399f698..652e4b0 100644 --- a/android/app/src/debug/AndroidManifest.xml +++ b/android/app/src/debug/AndroidManifest.xml @@ -1,7 +1,7 @@ - - - + + + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index c9894ec..9d5bccc 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -9,7 +9,7 @@ android:name="${applicationName}" android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" - android:usesCleartextTraffic="true"> + android:usesCleartextTraffic="false"> saveJwt(String token) => - _storage.write(key: _kJwtKey, value: token); -Future clearJwt() => _storage.delete(key: _kJwtKey); -Future loadJwt() => _storage.read(key: _kJwtKey); +Future saveJwt(String token) => _defaultIdentityStorage.saveJwt(token); +Future clearJwt() => _defaultIdentityStorage.clearJwt(); +Future loadJwt() => _defaultIdentityStorage.readJwt(); class AuthInterceptor extends Interceptor { + AuthInterceptor(this._identityStorage); + + final SecureIdentityStorage _identityStorage; + @override Future onRequest( RequestOptions options, @@ -19,7 +22,7 @@ class AuthInterceptor extends Interceptor { await DeviceHeaderService.to.ensureInitialized(); options.headers.addAll(DeviceHeaderService.to.commonHeaders()); options.headers.addAll(DeviceHeaderService.to.platformIdentityHeaders()); - final jwt = await loadJwt(); + final jwt = await _identityStorage.readJwt(); if (jwt != null && jwt.isNotEmpty) { options.headers['Authorization'] = 'Bearer $jwt'; } diff --git a/lib/common/network/dio_provider.dart b/lib/common/network/dio_provider.dart index 295b525..d0ed30a 100644 --- a/lib/common/network/dio_provider.dart +++ b/lib/common/network/dio_provider.dart @@ -5,6 +5,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import '../config/app_config.dart'; +import '../storage/secure_identity_storage.dart'; import 'auth_interceptor.dart'; import 'kratos_error_interceptor.dart'; @@ -12,12 +13,20 @@ part 'dio_provider.g.dart'; const _protobufContentType = 'application/x-protobuf'; +/// Per-request override for native protobuf-over-HTTP endpoints. +Options protobufOptions() => Options( + responseType: ResponseType.bytes, + contentType: _protobufContentType, + headers: const {'Accept': _protobufContentType}, +); + @Riverpod(keepAlive: true) AppConfig appConfig(Ref ref) => AppConfig.fromEnvironment(); @Riverpod(keepAlive: true) Dio dio(Ref ref) { final config = ref.watch(appConfigProvider); + final identityStorage = ref.watch(secureIdentityStorageProvider); final d = Dio( BaseOptions( baseUrl: config.apiBaseUrl, @@ -31,7 +40,7 @@ Dio dio(Ref ref) { }, ), ); - d.interceptors.add(AuthInterceptor()); + d.interceptors.add(AuthInterceptor(identityStorage)); d.interceptors.add(KratosErrorInterceptor()); if (!kReleaseMode) { d.interceptors.add(LogInterceptor(requestBody: false, responseBody: false)); diff --git a/lib/common/privacy/privacy_gate.dart b/lib/common/privacy/privacy_gate.dart new file mode 100644 index 0000000..485ec35 --- /dev/null +++ b/lib/common/privacy/privacy_gate.dart @@ -0,0 +1,9 @@ +import 'package:flutter/foundation.dart'; + +/// Android requires explicit privacy consent before collecting device +/// identifiers. iOS follows its existing startup flow instead. +bool requiresAndroidPrivacyConsent({ + required bool isWeb, + required TargetPlatform platform, + required bool privacyAgreed, +}) => !isWeb && platform == TargetPlatform.android && !privacyAgreed; diff --git a/lib/common/services/device_header_service.dart b/lib/common/services/device_header_service.dart index 65002e9..6b41375 100644 --- a/lib/common/services/device_header_service.dart +++ b/lib/common/services/device_header_service.dart @@ -3,7 +3,7 @@ import 'dart:io' show Platform; import 'package:android_id/android_id.dart'; import 'package:android_oaid/android_oaid.dart'; import 'package:device_info_plus/device_info_plus.dart'; -import 'package:flutter/foundation.dart' show kIsWeb; +import 'package:flutter/foundation.dart' show defaultTargetPlatform, kIsWeb; import 'package:flutter_paid/flutter_paid.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:package_info_plus/package_info_plus.dart'; @@ -12,6 +12,7 @@ import 'package:uuid/uuid.dart'; import '../storage/storage_keys.dart'; import '../storage/storage_service.dart'; +import '../privacy/privacy_gate.dart'; /// 请求公共 + 平台身份 header 来源(完全对齐研值契约)。 /// AuthInterceptor 每个请求注入 commonHeaders() + platformIdentityHeaders(), @@ -52,9 +53,11 @@ class DeviceHeaderService { // Align with tradingagents-flutter-app: Android only initializes device // information after the user has accepted the privacy policy. - if (!kIsWeb && - Platform.isAndroid && - !StorageService.to.getBool(storagePrivacyAgreed)) { + if (requiresAndroidPrivacyConsent( + isWeb: kIsWeb, + platform: defaultTargetPlatform, + privacyAgreed: StorageService.to.getBool(storagePrivacyAgreed), + )) { return; } @@ -184,10 +187,11 @@ class DeviceHeaderService { /// 是否需要首启隐私合规确认。**仅 Android**(合规要求:同意前不得采集设备 /// 标识)。由 go_router redirect 调用,未同意则强制跳隐私页。 - bool get privacyConsentRequired => - !kIsWeb && - Platform.isAndroid && - !StorageService.to.getBool(storagePrivacyAgreed); + bool get privacyConsentRequired => requiresAndroidPrivacyConsent( + isWeb: kIsWeb, + platform: defaultTargetPlatform, + privacyAgreed: StorageService.to.getBool(storagePrivacyAgreed), + ); /// iOS 首次启动页:仅在首次安装后展示一次。 bool get iosStartupRequired => diff --git a/lib/common/storage/secure_identity_storage.dart b/lib/common/storage/secure_identity_storage.dart new file mode 100644 index 0000000..a14dd28 --- /dev/null +++ b/lib/common/storage/secure_identity_storage.dart @@ -0,0 +1,21 @@ +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; + +const _jwtKey = 'jwt_token'; + +/// Sensitive identity values stay behind one injectable storage boundary. +class SecureIdentityStorage { + SecureIdentityStorage({FlutterSecureStorage? storage}) + : _storage = storage ?? const FlutterSecureStorage(); + + final FlutterSecureStorage _storage; + + Future saveJwt(String token) => + _storage.write(key: _jwtKey, value: token); + Future clearJwt() => _storage.delete(key: _jwtKey); + Future readJwt() => _storage.read(key: _jwtKey); +} + +final secureIdentityStorageProvider = Provider( + (ref) => SecureIdentityStorage(), +); diff --git a/packages/android_id/.gitattributes b/packages/android_id/.gitattributes deleted file mode 100644 index dfe0770..0000000 --- a/packages/android_id/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/packages/android_id/.github/dependabot.yml b/packages/android_id/.github/dependabot.yml deleted file mode 100644 index f8218c7..0000000 --- a/packages/android_id/.github/dependabot.yml +++ /dev/null @@ -1,37 +0,0 @@ -# To get started with Dependabot version updates, you'll need to specify which -# package ecosystems to update and where the package manifests are located. -# Please see the documentation for all configuration options: -# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates - -version: 2 -updates: - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "daily" - - - package-ecosystem: "pub" - directory: "/" - schedule: - interval: "daily" - ignore: - - dependency-name: "*" - update-types: ["version-update:semver-minor", "version-update:semver-patch"] - - - package-ecosystem: "pub" - directory: "example" - schedule: - interval: "daily" - ignore: - - dependency-name: "*" - update-types: ["version-update:semver-minor", "version-update:semver-patch"] - - - package-ecosystem: "gradle" - directory: "android" - schedule: - interval: "daily" - - - package-ecosystem: "gradle" - directory: "example/android" - schedule: - interval: "daily" diff --git a/packages/android_id/.github/workflows/flutter_build_example.yml b/packages/android_id/.github/workflows/flutter_build_example.yml deleted file mode 100644 index 542ef32..0000000 --- a/packages/android_id/.github/workflows/flutter_build_example.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: Flutter build example - -on: - workflow_dispatch: - pull_request: - push: - branches: - - main - -jobs: - build_android: - name: Build example for Android - runs-on: ubuntu-latest - timeout-minutes: 10 - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - ref: ${{ github.head_ref }} - - name: Setup Java - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: '17' - - name: Install Flutter - uses: subosito/flutter-action@v2 - - name: Disable analytics - run: flutter config --no-analytics - - name: Flutter pub get - run: flutter pub get - - name: Flutter build appbundle - run: | - cd example - flutter build appbundle --release diff --git a/packages/android_id/.github/workflows/flutter_checks.yml b/packages/android_id/.github/workflows/flutter_checks.yml deleted file mode 100644 index a124a06..0000000 --- a/packages/android_id/.github/workflows/flutter_checks.yml +++ /dev/null @@ -1,101 +0,0 @@ -name: Flutter checks - -on: - workflow_dispatch: - pull_request: - push: - branches: - - main - -jobs: - check_pub_dependencies: - name: Check dependencies - timeout-minutes: 10 - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - ref: ${{ github.head_ref }} - - name: Install Flutter - uses: subosito/flutter-action@v2 - - name: Disable analytics - run: flutter config --no-analytics - - name: Flutter pub get - run: flutter pub get - - check_formatting: - name: Check formatting - runs-on: ubuntu-latest - timeout-minutes: 10 - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - ref: ${{ github.head_ref }} - - name: Install Flutter - uses: subosito/flutter-action@v2 - - name: Disable analytics - run: flutter config --no-analytics - - name: Flutter pub get - run: flutter pub get - - name: Check Dart formatting - run: dart format --line-length 80 --set-exit-if-changed . - - analyze: - name: Dart analyze - timeout-minutes: 10 - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - ref: ${{ github.head_ref }} - - name: Install Flutter - uses: subosito/flutter-action@v2 - - name: Disable analytics - run: flutter config --no-analytics - - name: Flutter pub get - run: flutter pub get - - name: Run Dart analyze - uses: invertase/github-action-dart-analyzer@v3.0.0 - - test: - name: Flutter test - runs-on: ubuntu-latest - timeout-minutes: 10 - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - ref: ${{ github.head_ref }} - - name: Install Flutter - uses: subosito/flutter-action@v2 - - name: Disable analytics - run: flutter config --no-analytics - - name: Flutter pub get - run: flutter pub get - - name: Flutter test - run: flutter test - - test_example: - name: Flutter test example - runs-on: ubuntu-latest - timeout-minutes: 10 - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - ref: ${{ github.head_ref }} - - name: Install Flutter - uses: subosito/flutter-action@v2 - - name: Disable analytics - run: flutter config --no-analytics - - name: Flutter pub get - run: | - cd example - flutter pub get - - name: Flutter test example - run: | - cd example - flutter test diff --git a/packages/android_id/.github/workflows/pub_publish.yml b/packages/android_id/.github/workflows/pub_publish.yml deleted file mode 100644 index 1630b63..0000000 --- a/packages/android_id/.github/workflows/pub_publish.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Pub publish - -on: - release: - types: [published] - -jobs: - publish: - name: Pub publish - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - ref: ${{ github.head_ref }} - - name: Publish - uses: k-paxian/dart-package-publisher@v1.6 - with: - credentialJson: ${{ secrets.CREDENTIALS }} diff --git a/packages/android_id/.github/workflows/pub_publish_dry_run.yml b/packages/android_id/.github/workflows/pub_publish_dry_run.yml deleted file mode 100644 index 8cb6b5d..0000000 --- a/packages/android_id/.github/workflows/pub_publish_dry_run.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Pub publish dry run - -on: - workflow_dispatch: - push: - branches: - - main - -jobs: - publish-dry-run: - name: Pub publish dry run - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - ref: ${{ github.head_ref }} - - name: Publish dry run - uses: k-paxian/dart-package-publisher@v1.6 - with: - credentialJson: 'MockCredentialJson' - dryRunOnly: true diff --git a/packages/android_id/.github/workflows/pub_score.yml b/packages/android_id/.github/workflows/pub_score.yml deleted file mode 100644 index c423c77..0000000 --- a/packages/android_id/.github/workflows/pub_score.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: Check pub score - -on: - workflow_dispatch: - pull_request: - push: - branches: - - main - -jobs: - check-score: - name: Check pub score - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - ref: ${{ github.head_ref }} - - uses: axel-op/dart-package-analyzer@v3 - id: workflow - with: - githubToken: ${{ secrets.GITHUB_TOKEN }} - - name: Check score - env: - TOTAL: ${{ steps.workflow.outputs.total }} - TOTAL_MAX: ${{ steps.workflow.outputs.total_max }} - run: | - MISSING_POINTS=$(( $TOTAL_MAX - $TOTAL )) - if (( MISSING_POINTS > 0 )) - then - echo Score can be improved! - exit 1 - fi diff --git a/packages/android_id/.gitignore b/packages/android_id/.gitignore deleted file mode 100644 index f2e83f9..0000000 --- a/packages/android_id/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ -migrate_working_dir/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ -.vscode/ - -# Flutter/Dart/Pub related -# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. -/pubspec.lock -**/doc/api/ -.dart_tool/ -.packages -build/ diff --git a/packages/android_id/.metadata b/packages/android_id/.metadata deleted file mode 100644 index f3deb51..0000000 --- a/packages/android_id/.metadata +++ /dev/null @@ -1,30 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: "a14f74ff3a1cbd521163c5f03d68113d50af93d3" - channel: "stable" - -project_type: plugin - -# Tracks metadata for the flutter migrate command -migration: - platforms: - - platform: root - create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - - platform: android - create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - - # User provided section - - # List of Local paths (relative to this file) that should be - # ignored by the migrate tool. - # - # Files that are not part of the templates will be ignored by default. - unmanaged_files: - - 'lib/main.dart' - - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/packages/android_id/CHANGELOG.md b/packages/android_id/CHANGELOG.md deleted file mode 100644 index 1e24ea5..0000000 --- a/packages/android_id/CHANGELOG.md +++ /dev/null @@ -1,103 +0,0 @@ -## 0.4.0 - -* Upgrade Android dependencies (Gradle, AGP, Java, Kotlin) -* Widen `flutter_lints` constraints - -## 0.3.6 - -* Return `null` on platforms other than Android, instead of throwing an exception - -## 0.3.5 - -* Maintenance release -* Update `kotlin` and `gradle` - -## 0.3.4 - -* Refactor native code - -## 0.3.3 - -* Add topics to pubspec.yaml - -## 0.3.2 - -* Improve `namespace` fix for `Android Gradle Plugin` versions < 7 - -## 0.3.1 - -* Fix `namespace` for `Android Gradle Plugin` versions < 7 - -## 0.3.0 - -* Add `namespace` for compatibility with `Android Gradle Plugin 8` -* Update `Gradle` version - -## 0.2.0 - -* Update `Gradle` version -* Update `Android Gradle plugin` version -* Update `Kotlin` version -* Add Gradle wrapper files -* Update `pubspec.lock` of example (`url: "https://pub.dev"`) - -## 0.1.3+1 - -* Improve readme: Add explanation for connection of `Android ID` and signing key - -## 0.1.3 - -* Add building of example app to GitHub workflows -* Remove unneeded code - -## 0.1.2 - -* Add `Flutter test` for example app to workflows - -## 0.1.1+1 - -* Update readme - -## 0.1.1 - -* Update example app dependencies - -## 0.1.0 - -* Rename Android `applicationId` -* Recreate `android` folder from template - -## 0.0.8 - -* Add more GitHub Actions for checking code quality -* Update kotlin_version from 1.6.10 to 1.7.20 -* Update gradle from 7.1.2 to 7.3.1 -* Add dependabot - -## 0.0.7 - -* Add Google Play information to README. - -## 0.0.6 - -* Lower minimal sdk version to `2.12.0`. - -## 0.0.5 - -* Documentation typo fix. - -## 0.0.4 - -* Small improvements. - -## 0.0.3 - -* Improve example. - -## 0.0.2 - -* Enhance description to get full pub.dev score. - -## 0.0.1 - -* Initial release. diff --git a/packages/android_id/LICENSE b/packages/android_id/LICENSE deleted file mode 100644 index a1092eb..0000000 --- a/packages/android_id/LICENSE +++ /dev/null @@ -1,29 +0,0 @@ -BSD 3-Clause License - -Copyright (c) 2022, Joachim Nohl -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/packages/android_id/README.md b/packages/android_id/README.md deleted file mode 100644 index 36aed12..0000000 --- a/packages/android_id/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# android_id - -[![Flutter Community: android_id](https://fluttercommunity.dev/_github/header/android_id)](https://github.com/fluttercommunity/community) - -![Pub Version](https://img.shields.io/pub/v/android_id) - -A Flutter plugin for retrieving the Android ID. - -## Getting started - -* Add plugin to pubspec.yaml -* Use it in your code (see examples of all methods below) - -## Usage - -```dart -const _androidIdPlugin = AndroidId(); - -final String? androidId = await _androidIdPlugin.getId(); -``` - -## Important - -Please note that on `Android 8` and above, the `Android ID` is not unique per device, but also per signing key the app was built with: - -
-On Android 8.0 (API level 26) and higher versions of the platform, a 64-bit number (expressed as a hexadecimal string), unique to each combination of app-signing key, user, and device. - -The value may change if a factory reset is performed on the device or if an APK signing key changes. -
- -[Android API reference](https://developer.android.com/reference/android/provider/Settings.Secure#ANDROID_ID) - -[Stack Overflow explanation](https://stackoverflow.com/a/43393373) - - -## Google Play - -Before using this plugin in your app, make sure to follow Google Play guidelines. -For example [here](https://support.google.com/googleplay/android-developer/answer/6048248#zippy=%2Cpersistent-identifiers-including-android-id): - -
-Persistent identifiers, including Android ID - -Use for non-advertising purposes
-You can use persistent identifiers as long as you have a [privacy policy](https://support.google.com/googleplay/android-developer/answer/9859455) and handle the data in accordance with the [Developer Distribution Agreement](https://play.google.com/about/developer-distribution-agreement.html#use) and all applicable privacy laws in the areas where you make your app available. -
diff --git a/packages/android_id/analysis_options.yaml b/packages/android_id/analysis_options.yaml deleted file mode 100644 index f9b3034..0000000 --- a/packages/android_id/analysis_options.yaml +++ /dev/null @@ -1 +0,0 @@ -include: package:flutter_lints/flutter.yaml diff --git a/packages/android_id/android/.gitignore b/packages/android_id/android/.gitignore deleted file mode 100644 index 161bdcd..0000000 --- a/packages/android_id/android/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -*.iml -.gradle -/local.properties -/.idea/workspace.xml -/.idea/libraries -.DS_Store -/build -/captures -.cxx diff --git a/packages/android_id/android/build.gradle b/packages/android_id/android/build.gradle deleted file mode 100644 index 2faa0c2..0000000 --- a/packages/android_id/android/build.gradle +++ /dev/null @@ -1,74 +0,0 @@ -group = "dev.fluttercommunity.android_id" -version = "1.0-SNAPSHOT" - -buildscript { - ext.kotlin_version = "2.0.0" - repositories { - google() - mavenCentral() - maven{url'https://repo1.maven.org/maven2/'} - } - - dependencies { - classpath("com.android.tools.build:gradle:8.1.4") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") - } -} - -allprojects { - repositories { - google() - mavenCentral() - maven{url'https://repo1.maven.org/maven2/'} - } -} - -apply plugin: "com.android.library" -apply plugin: "kotlin-android" - -android { - if (project.android.hasProperty("namespace")) { - namespace = "dev.fluttercommunity.android_id" - } - - compileSdk = 34 - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } - - kotlinOptions { - jvmTarget = "17" - } - - sourceSets { - main.java.srcDirs += "src/main/kotlin" - test.java.srcDirs += "src/test/kotlin" - } - - defaultConfig { - minSdk = 21 - } - - dependencies { - testImplementation("org.jetbrains.kotlin:kotlin-test") - testImplementation("org.mockito:mockito-core:5.12.0") - } - - testOptions { - unitTests.all { - useJUnitPlatform() - - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true - } - } - } -} -dependencies { -// implementation 'com.umeng.umsdk:common:9.7.7'// 必选 -// implementation 'com.umeng.umsdk:asms:1.8.3'// 必选 -} diff --git a/packages/android_id/android/settings.gradle b/packages/android_id/android/settings.gradle deleted file mode 100644 index 8bbde2e..0000000 --- a/packages/android_id/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'android_id' diff --git a/packages/android_id/android/src/main/AndroidManifest.xml b/packages/android_id/android/src/main/AndroidManifest.xml deleted file mode 100644 index 84a140d..0000000 --- a/packages/android_id/android/src/main/AndroidManifest.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - diff --git a/packages/android_id/android/src/main/kotlin/dev/fluttercommunity/android_id/AndroidIdPlugin.kt b/packages/android_id/android/src/main/kotlin/dev/fluttercommunity/android_id/AndroidIdPlugin.kt deleted file mode 100644 index d79dfc1..0000000 --- a/packages/android_id/android/src/main/kotlin/dev/fluttercommunity/android_id/AndroidIdPlugin.kt +++ /dev/null @@ -1,279 +0,0 @@ -package dev.fluttercommunity.android_id - -import android.annotation.SuppressLint -import android.content.ContentResolver -import android.provider.Settings -import androidx.annotation.NonNull - -import io.flutter.embedding.engine.plugins.FlutterPlugin -import io.flutter.plugin.common.MethodCall -import io.flutter.plugin.common.MethodChannel -import io.flutter.plugin.common.MethodChannel.MethodCallHandler -import io.flutter.plugin.common.MethodChannel.Result -import android.content.Context -import android.net.wifi.WifiInfo -import android.net.wifi.WifiManager -import android.os.Build -import android.text.TextUtils -import androidx.core.app.ActivityCompat - -import java.io.IOException -import java.io.InputStreamReader -import java.io.LineNumberReader -import java.net.NetworkInterface -import java.util.Collections -import java.util.List -import java.util.ArrayList -import java.util.Locale -import android.content.pm.PackageManager -import android.telephony.TelephonyManager -//import com.umeng.commonsdk.UMConfigure - -/** AndroidIdPlugin */ -class AndroidIdPlugin : FlutterPlugin, MethodCallHandler { - /// The MethodChannel that will the communication between Flutter and native Android - /// - /// This local reference serves to register the plugin with the Flutter Engine and unregister it - /// when the Flutter Engine is detached from the Activity - private lateinit var channel: MethodChannel - - private lateinit var contentResolver: ContentResolver - - private lateinit var context: Context - - override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { - contentResolver = flutterPluginBinding.applicationContext.contentResolver - channel = MethodChannel(flutterPluginBinding.binaryMessenger, "android_id") - channel.setMethodCallHandler(this) - context = flutterPluginBinding.getApplicationContext() - } - - override fun onMethodCall(call: MethodCall, result: Result) { - when (call.method) { - "getId" -> { - try { - result.success(getAndroidId()) - } catch (e: Exception) { - result.success("") -// result.error("ERROR_GETTING_ID", "Failed to get Android ID", e.localizedMessage) - } - } - - "getImei" -> { - try { - result.success(getImei()) - } catch (e: Exception) { - result.success("") -// result.error("ERROR_GETTING_ID", "Failed to get Imei ", e.localizedMessage) - } - } - - "getMacAddress" -> { - try { - result.success(getMacAddress()) - } catch (e: Exception) { - result.success("") -// result.error("ERROR_GETTING_ID", "Failed to get MacAddress", e.localizedMessage) - } - } - -// "getOaid" -> { -// try { -// UMConfigure.getOaid(context) { p0 -> -// if (p0 != null) { -// result.success(p0) -// } else { -// result.success("") -// } -// } -// } catch (e: Exception) { -// result.success("") -//// result.error("ERROR_GETTING_ID", "Failed to get MacAddress", e.localizedMessage) -// } -// } - - "checkRoot" -> { - try { - result.success(checkRoot()) - } catch (e: Exception) { - result.success(false) -// result.error("ERROR_GETTING_ID", "Failed to get MacAddress", e.localizedMessage) - } - } - "checkIsEmulator" -> { - try { - result.success(checkIsEmulator()) - } catch (e: Exception) { - result.success(false) -// result.error("ERROR_GETTING_ID", "Failed to get MacAddress", e.localizedMessage) - } - } - - else -> result.notImplemented() - } - } - - override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { - channel.setMethodCallHandler(null) - } - - // Fetch the Android ID while suppressing lint warning about hardware IDs - @SuppressLint("HardwareIds") - private fun getAndroidId(): String { - return Settings.Secure.getString(contentResolver, Settings.Secure.ANDROID_ID) - } - - private fun getImei(): String? { - val tm: TelephonyManager = - context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager - var IMEIStr = "" - if (ActivityCompat.checkSelfPermission( - context, - android.Manifest.permission.READ_PHONE_STATE - ) !== PackageManager.PERMISSION_GRANTED - ) { - } else { - try { - IMEIStr = tm.getDeviceId() - if (TextUtils.isEmpty(IMEIStr)) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - IMEIStr = tm.getImei() - } - } - } catch (e: java.lang.Exception) { - } - } - return IMEIStr - } - - private fun getMacAddress(): String? { - var macNo = MacUtil().getMac(context) - return macNo - } - - - private fun checkRoot(): Boolean { - return false - } - - private fun checkIsEmulator(): Boolean { - return false - } - -} - -class MacUtil { - /** - * Android 6.0 之前(不包括6.0)获取mac地址 - * 必须的权限 - * - * @param context * @return - */ - @SuppressLint("MissingPermission") - fun getMacDefault(context: Context?): String? { - var mac = "" - if (context == null) { - return mac - } - val wifi: WifiManager = - context.getApplicationContext().getSystemService(Context.WIFI_SERVICE) as WifiManager - var info: WifiInfo? = null - try { - info = wifi.getConnectionInfo() - } catch (e: java.lang.Exception) { - e.printStackTrace() - } - - if (info == null) { - return null - } - mac = info.getMacAddress() - if (!TextUtils.isEmpty(mac)) { - mac = mac.uppercase() - } - return mac - } - - val macAddress: String? - /** - * Android 6.0-Android 7.0 获取mac地址 - */ - get() { - var macSerial: String? = null - var str = "" - - try { - val pp: java.lang.Process = - java.lang.Runtime.getRuntime().exec("cat/sys/class/net/wlan0/address") - val ir: InputStreamReader = InputStreamReader(pp.getInputStream()) - val input: LineNumberReader = LineNumberReader(ir) - - while (null != str) { - str = input.readLine() - if (str != null) { - macSerial = str.trim { it <= ' ' } //去空格 - break - } - } - } catch (ex: IOException) { - // 赋予默认值 - ex.printStackTrace() - } - - return macSerial - } - - /** - * 获取mac地址(适配所有Android版本) - * - * @return - */ - fun getMac(context: Context?): String? { - var mac: String? = "" - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { - mac = getMacDefault(context) - } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { - mac = macAddress - } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - mac = macFromHardware - } - return mac - } - - companion object { - private val macFromHardware: String? - /** - * Android 7.0之后获取Mac地址 - * 遍历循环所有的网络接口,找到接口是 wlan0 - * 必须的权限 - * - * @return - */ - get() { - try { - val all: ArrayList = - Collections.list(NetworkInterface.getNetworkInterfaces()) - for (nif in all) { - if (!nif.getName().equals("wlan0", ignoreCase = true)) { - continue - } - - val macBytes: ByteArray = nif.getHardwareAddress() ?: return null - - val res1: java.lang.StringBuilder = java.lang.StringBuilder() - for (b in macBytes) { - res1.append(String.format("%02X:", b)) - } - - if (res1.length > 0) { - res1.deleteCharAt(res1.length - 1) - } - return res1.toString() - } - } catch (e: java.lang.Exception) { - e.printStackTrace() - } - return null - } - } -} diff --git a/packages/android_id/lib/android_id.dart b/packages/android_id/lib/android_id.dart deleted file mode 100644 index e3fccd1..0000000 --- a/packages/android_id/lib/android_id.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/services.dart'; - -/// The plugin class for retrieving the Android ID. -class AndroidId { - const AndroidId(); - - /// The method channel used to interact with the native platform. - static const _methodChannel = MethodChannel('android_id'); - - /// Calls the native method to retrieve the Android ID. - Future getId() async { - final isAndroid = - !kIsWeb && defaultTargetPlatform == TargetPlatform.android; - if (!isAndroid) return null; - - return _methodChannel.invokeMethod('getId'); - } - - Future getImei() async { - final isAndroid = - !kIsWeb && defaultTargetPlatform == TargetPlatform.android; - if (!isAndroid) return null; - - return _methodChannel.invokeMethod('getImei'); - } - - Future getMaAddress() async { - final isAndroid = - !kIsWeb && defaultTargetPlatform == TargetPlatform.android; - if (!isAndroid) return null; - - return _methodChannel.invokeMethod('getMacAddress'); - } - // Future getOaid() async { - // final isAndroid = - // !kIsWeb && defaultTargetPlatform == TargetPlatform.android; - // if (!isAndroid) return null; - // - // return _methodChannel.invokeMethod('getOaid'); - // } - - Future isRoot() async { - final isAndroid = - !kIsWeb && defaultTargetPlatform == TargetPlatform.android; - if (!isAndroid) return null; - - return _methodChannel.invokeMethod('checkRoot'); - } - - Future isEmulator() async { - final isAndroid = - !kIsWeb && defaultTargetPlatform == TargetPlatform.android; - if (!isAndroid) return null; - - return _methodChannel.invokeMethod('checkIsEmulator'); - } -} diff --git a/packages/android_id/pubspec.yaml b/packages/android_id/pubspec.yaml deleted file mode 100644 index e835129..0000000 --- a/packages/android_id/pubspec.yaml +++ /dev/null @@ -1,36 +0,0 @@ -name: android_id -description: A Flutter plugin for getting the Android ID. Only for Android. - -repository: https://github.com/fluttercommunity/android_id -issue_tracker: https://github.com/fluttercommunity/android_id/issues - -maintainer: Joachim Nohl (@nohli) - -topics: - - androidid - - device - - identifier - - android - - native - -version: 0.4.0 - -environment: - sdk: '>=2.12.0 <4.0.0' - flutter: '>=2.0.0' - -dependencies: - flutter: - sdk: flutter - -dev_dependencies: - flutter_lints: '>=2.0.0 <4.0.0' - flutter_test: - sdk: flutter - -flutter: - plugin: - platforms: - android: - package: dev.fluttercommunity.android_id - pluginClass: AndroidIdPlugin diff --git a/packages/android_id/test/android_id_test.dart b/packages/android_id/test/android_id_test.dart deleted file mode 100644 index 8c015e6..0000000 --- a/packages/android_id/test/android_id_test.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:android_id/android_id.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - const plugin = AndroidId(); - const channel = MethodChannel('android_id'); - - TestWidgetsFlutterBinding.ensureInitialized(); - debugDefaultTargetPlatformOverride = TargetPlatform.android; - - setUp(() { - TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger - .setMockMethodCallHandler(channel, (methodCall) async => '42'); - }); - - tearDown(() { - TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger - .setMockMethodCallHandler(channel, null); - }); - - test('getAndroidId', () async { - expect(await plugin.getId(), '42'); - }); -} diff --git a/packages/android_oaid/.gitignore b/packages/android_oaid/.gitignore deleted file mode 100644 index f2e83f9..0000000 --- a/packages/android_oaid/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ -migrate_working_dir/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ -.vscode/ - -# Flutter/Dart/Pub related -# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. -/pubspec.lock -**/doc/api/ -.dart_tool/ -.packages -build/ diff --git a/packages/android_oaid/CHANGELOG.md b/packages/android_oaid/CHANGELOG.md deleted file mode 100644 index d0bd041..0000000 --- a/packages/android_oaid/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.1 - -* Initial release. diff --git a/packages/android_oaid/LICENSE b/packages/android_oaid/LICENSE deleted file mode 100644 index a1092eb..0000000 --- a/packages/android_oaid/LICENSE +++ /dev/null @@ -1,29 +0,0 @@ -BSD 3-Clause License - -Copyright (c) 2022, Joachim Nohl -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/packages/android_oaid/README.md b/packages/android_oaid/README.md deleted file mode 100644 index 87a8f5d..0000000 --- a/packages/android_oaid/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# flutter_oaid - -A new Flutter plugin project. - -## Getting Started - -This project is a starting point for a Flutter -[plug-in package](https://flutter.dev/developing-packages/), -a specialized package that includes platform-specific implementation code for -Android and/or iOS. - -For help getting started with Flutter development, view the -[online documentation](https://flutter.dev/docs), which offers tutorials, -samples, guidance on mobile development, and a full API reference. - diff --git a/packages/android_oaid/analysis_options.yaml b/packages/android_oaid/analysis_options.yaml deleted file mode 100644 index f9b3034..0000000 --- a/packages/android_oaid/analysis_options.yaml +++ /dev/null @@ -1 +0,0 @@ -include: package:flutter_lints/flutter.yaml diff --git a/packages/android_oaid/android/.gitignore b/packages/android_oaid/android/.gitignore deleted file mode 100644 index 161bdcd..0000000 --- a/packages/android_oaid/android/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -*.iml -.gradle -/local.properties -/.idea/workspace.xml -/.idea/libraries -.DS_Store -/build -/captures -.cxx diff --git a/packages/android_oaid/android/build.gradle b/packages/android_oaid/android/build.gradle deleted file mode 100644 index ac30102..0000000 --- a/packages/android_oaid/android/build.gradle +++ /dev/null @@ -1,74 +0,0 @@ -group = "dev.fluttercommunity.android_oaid" -version = "1.0-SNAPSHOT" - -buildscript { - ext.kotlin_version = "2.0.0" - repositories { - google() - mavenCentral() - maven{url'https://repo1.maven.org/maven2/'} - } - - dependencies { - classpath("com.android.tools.build:gradle:8.1.4") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") - } -} - -allprojects { - repositories { - google() - mavenCentral() - maven{url'https://repo1.maven.org/maven2/'} - } -} - -apply plugin: "com.android.library" -apply plugin: "kotlin-android" - -android { - if (project.android.hasProperty("namespace")) { - namespace = "dev.fluttercommunity.android_oaid" - } - - compileSdk = 34 - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } - - kotlinOptions { - jvmTarget = "17" - } - - sourceSets { - main.java.srcDirs += "src/main/kotlin" - test.java.srcDirs += "src/test/kotlin" - } - - defaultConfig { - minSdk = 21 - } - - dependencies { - testImplementation("org.jetbrains.kotlin:kotlin-test") - testImplementation("org.mockito:mockito-core:5.12.0") - } - - testOptions { - unitTests.all { - useJUnitPlatform() - - testLogging { - events "passed", "skipped", "failed", "standardOut", "standardError" - outputs.upToDateWhen {false} - showStandardStreams = true - } - } - } -} -dependencies { - implementation 'com.umeng.umsdk:common:9.7.7'// 必选 - implementation 'com.umeng.umsdk:asms:1.8.3'// 必选 -} diff --git a/packages/android_oaid/android/settings.gradle b/packages/android_oaid/android/settings.gradle deleted file mode 100644 index 0af1752..0000000 --- a/packages/android_oaid/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'android_oaid' diff --git a/packages/android_oaid/android/src/main/AndroidManifest.xml b/packages/android_oaid/android/src/main/AndroidManifest.xml deleted file mode 100644 index 57a3bdb..0000000 --- a/packages/android_oaid/android/src/main/AndroidManifest.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/packages/android_oaid/android/src/main/kotlin/dev/fluttercommunity/android_oaid/AndroidOaidPlugin.kt b/packages/android_oaid/android/src/main/kotlin/dev/fluttercommunity/android_oaid/AndroidOaidPlugin.kt deleted file mode 100644 index 31e4b49..0000000 --- a/packages/android_oaid/android/src/main/kotlin/dev/fluttercommunity/android_oaid/AndroidOaidPlugin.kt +++ /dev/null @@ -1,59 +0,0 @@ -package dev.fluttercommunity.android_oaid - -import android.content.ContentResolver - -import io.flutter.embedding.engine.plugins.FlutterPlugin -import io.flutter.plugin.common.MethodCall -import io.flutter.plugin.common.MethodChannel -import io.flutter.plugin.common.MethodChannel.MethodCallHandler -import io.flutter.plugin.common.MethodChannel.Result -import android.content.Context -import android.os.Handler -import android.os.Looper - -import com.umeng.commonsdk.UMConfigure - -/** AndroidOaidPlugin */ -class AndroidOaidPlugin : FlutterPlugin, MethodCallHandler { - - private lateinit var channel: MethodChannel - - private lateinit var contentResolver: ContentResolver - - private lateinit var context: Context - - override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { - contentResolver = flutterPluginBinding.applicationContext.contentResolver - channel = MethodChannel(flutterPluginBinding.binaryMessenger, "android_oaid") - channel.setMethodCallHandler(this) - context = flutterPluginBinding.getApplicationContext() - } - - override fun onMethodCall(call: MethodCall, result: Result) { - when (call.method) { - "getOaid" -> { - try { - UMConfigure.getOaid(context) { p0 -> - Handler(Looper.getMainLooper()).post { - if (p0 != null) { - result.success(p0) - } else { - result.success("") - } - } - } - } catch (e: Exception) { - Handler(Looper.getMainLooper()).post { - result.success("") - } - } - } - - else -> result.notImplemented() - } - } - - override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { - channel.setMethodCallHandler(null) - } -} diff --git a/packages/android_oaid/lib/android_oaid.dart b/packages/android_oaid/lib/android_oaid.dart deleted file mode 100644 index 865a2e4..0000000 --- a/packages/android_oaid/lib/android_oaid.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/services.dart'; - -class AndroidOaidId { - const AndroidOaidId(); - - static const _methodChannel = MethodChannel('android_oaid'); - - - Future getOaid() async { - final isAndroid = - !kIsWeb && defaultTargetPlatform == TargetPlatform.android; - if (!isAndroid) return null; - - return _methodChannel.invokeMethod('getOaid'); - } - -} diff --git a/packages/android_oaid/pubspec.yaml b/packages/android_oaid/pubspec.yaml deleted file mode 100644 index 1317f24..0000000 --- a/packages/android_oaid/pubspec.yaml +++ /dev/null @@ -1,26 +0,0 @@ -name: android_oaid -description: A Flutter plugin for getting the Android OAID. Only for Android. - -maintainer: Joachim Nohl (@nohli) - -version: 0.4.0 - -environment: - sdk: '>=2.12.0 <4.0.0' - flutter: '>=2.0.0' - -dependencies: - flutter: - sdk: flutter - -dev_dependencies: - flutter_lints: '>=2.0.0 <4.0.0' - flutter_test: - sdk: flutter - -flutter: - plugin: - platforms: - android: - package: dev.fluttercommunity.android_oaid - pluginClass: AndroidOaidPlugin diff --git a/packages/android_oaid/test/android_id_test.dart b/packages/android_oaid/test/android_id_test.dart deleted file mode 100644 index 8fc0dd9..0000000 --- a/packages/android_oaid/test/android_id_test.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:android_oaid/android_oaid.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - const plugin = AndroidOaidId(); - const channel = MethodChannel('android_oaid'); - - TestWidgetsFlutterBinding.ensureInitialized(); - debugDefaultTargetPlatformOverride = TargetPlatform.android; - - setUp(() { - TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger - .setMockMethodCallHandler(channel, (methodCall) async => '42'); - }); - - tearDown(() { - TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger - .setMockMethodCallHandler(channel, null); - }); - - test('getAndroidId', () async { - expect(await plugin.getOaid(), '42'); - }); -} diff --git a/packages/flutter_paid/.gitignore b/packages/flutter_paid/.gitignore deleted file mode 100644 index ac5aa98..0000000 --- a/packages/flutter_paid/.gitignore +++ /dev/null @@ -1,29 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ -migrate_working_dir/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. -/pubspec.lock -**/doc/api/ -.dart_tool/ -build/ diff --git a/packages/flutter_paid/.metadata b/packages/flutter_paid/.metadata deleted file mode 100644 index 3a8bfa6..0000000 --- a/packages/flutter_paid/.metadata +++ /dev/null @@ -1,30 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: "abb292a07e20d696c4568099f918f6c5f330e6b0" - channel: "stable" - -project_type: plugin - -# Tracks metadata for the flutter migrate command -migration: - platforms: - - platform: root - create_revision: abb292a07e20d696c4568099f918f6c5f330e6b0 - base_revision: abb292a07e20d696c4568099f918f6c5f330e6b0 - - platform: ios - create_revision: abb292a07e20d696c4568099f918f6c5f330e6b0 - base_revision: abb292a07e20d696c4568099f918f6c5f330e6b0 - - # User provided section - - # List of Local paths (relative to this file) that should be - # ignored by the migrate tool. - # - # Files that are not part of the templates will be ignored by default. - unmanaged_files: - - 'lib/main.dart' - - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/packages/flutter_paid/CHANGELOG.md b/packages/flutter_paid/CHANGELOG.md deleted file mode 100644 index 41cc7d8..0000000 --- a/packages/flutter_paid/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.1 - -* TODO: Describe initial release. diff --git a/packages/flutter_paid/LICENSE b/packages/flutter_paid/LICENSE deleted file mode 100644 index ba75c69..0000000 --- a/packages/flutter_paid/LICENSE +++ /dev/null @@ -1 +0,0 @@ -TODO: Add your license here. diff --git a/packages/flutter_paid/README.md b/packages/flutter_paid/README.md deleted file mode 100644 index ebc7b79..0000000 --- a/packages/flutter_paid/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# flutter_paid - -A new Flutter plugin project. - -## Getting Started - -This project is a starting point for a Flutter -[plug-in package](https://flutter.dev/developing-packages/), -a specialized package that includes platform-specific implementation code for -Android and/or iOS. - -For help getting started with Flutter development, view the -[online documentation](https://flutter.dev/docs), which offers tutorials, -samples, guidance on mobile development, and a full API reference. - diff --git a/packages/flutter_paid/analysis_options.yaml b/packages/flutter_paid/analysis_options.yaml deleted file mode 100644 index a5744c1..0000000 --- a/packages/flutter_paid/analysis_options.yaml +++ /dev/null @@ -1,4 +0,0 @@ -include: package:flutter_lints/flutter.yaml - -# Additional information about this file can be found at -# https://dart.dev/guides/language/analysis-options diff --git a/packages/flutter_paid/example/.gitignore b/packages/flutter_paid/example/.gitignore deleted file mode 100644 index 29a3a50..0000000 --- a/packages/flutter_paid/example/.gitignore +++ /dev/null @@ -1,43 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ -migrate_working_dir/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -**/ios/Flutter/.last_build_id -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -.pub-cache/ -.pub/ -/build/ - -# Symbolication related -app.*.symbols - -# Obfuscation related -app.*.map.json - -# Android Studio will place build artifacts here -/android/app/debug -/android/app/profile -/android/app/release diff --git a/packages/flutter_paid/example/README.md b/packages/flutter_paid/example/README.md deleted file mode 100644 index 1662596..0000000 --- a/packages/flutter_paid/example/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# flutter_paid_example - -Demonstrates how to use the flutter_paid plugin. - -## Getting Started - -This project is a starting point for a Flutter application. - -A few resources to get you started if this is your first Flutter project: - -- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) -- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) - -For help getting started with Flutter development, view the -[online documentation](https://docs.flutter.dev/), which offers tutorials, -samples, guidance on mobile development, and a full API reference. diff --git a/packages/flutter_paid/example/analysis_options.yaml b/packages/flutter_paid/example/analysis_options.yaml deleted file mode 100644 index 0d29021..0000000 --- a/packages/flutter_paid/example/analysis_options.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# This file configures the analyzer, which statically analyzes Dart code to -# check for errors, warnings, and lints. -# -# The issues identified by the analyzer are surfaced in the UI of Dart-enabled -# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be -# invoked from the command line by running `flutter analyze`. - -# The following line activates a set of recommended lints for Flutter apps, -# packages, and plugins designed to encourage good coding practices. -include: package:flutter_lints/flutter.yaml - -linter: - # The lint rules applied to this project can be customized in the - # section below to disable rules from the `package:flutter_lints/flutter.yaml` - # included above or to enable additional rules. A list of all available lints - # and their documentation is published at https://dart.dev/lints. - # - # Instead of disabling a lint rule for the entire project in the - # section below, it can also be suppressed for a single line of code - # or a specific dart file by using the `// ignore: name_of_lint` and - # `// ignore_for_file: name_of_lint` syntax on the line or in the file - # producing the lint. - rules: - # avoid_print: false # Uncomment to disable the `avoid_print` rule - # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule - -# Additional information about this file can be found at -# https://dart.dev/guides/language/analysis-options diff --git a/packages/flutter_paid/example/integration_test/plugin_integration_test.dart b/packages/flutter_paid/example/integration_test/plugin_integration_test.dart deleted file mode 100644 index 5a6e347..0000000 --- a/packages/flutter_paid/example/integration_test/plugin_integration_test.dart +++ /dev/null @@ -1,25 +0,0 @@ -// This is a basic Flutter integration test. -// -// Since integration tests run in a full Flutter application, they can interact -// with the host side of a plugin implementation, unlike Dart unit tests. -// -// For more information about Flutter integration tests, please see -// https://docs.flutter.dev/cookbook/testing/integration/introduction - - -import 'package:flutter_test/flutter_test.dart'; -import 'package:integration_test/integration_test.dart'; - -import 'package:flutter_paid/flutter_paid.dart'; - -void main() { - IntegrationTestWidgetsFlutterBinding.ensureInitialized(); - - testWidgets('getPlatformVersion test', (WidgetTester tester) async { - final FlutterPaid plugin = FlutterPaid(); - final String? version = await plugin.getPlatformVersion(); - // The version string depends on the host platform running the test, so - // just assert that some non-empty string is returned. - expect(version?.isNotEmpty, true); - }); -} diff --git a/packages/flutter_paid/example/ios/.gitignore b/packages/flutter_paid/example/ios/.gitignore deleted file mode 100644 index 7a7f987..0000000 --- a/packages/flutter_paid/example/ios/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -**/dgph -*.mode1v3 -*.mode2v3 -*.moved-aside -*.pbxuser -*.perspectivev3 -**/*sync/ -.sconsign.dblite -.tags* -**/.vagrant/ -**/DerivedData/ -Icon? -**/Pods/ -**/.symlinks/ -profile -xcuserdata -**/.generated/ -Flutter/App.framework -Flutter/Flutter.framework -Flutter/Flutter.podspec -Flutter/Generated.xcconfig -Flutter/ephemeral/ -Flutter/app.flx -Flutter/app.zip -Flutter/flutter_assets/ -Flutter/flutter_export_environment.sh -ServiceDefinitions.json -Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!default.mode1v3 -!default.mode2v3 -!default.pbxuser -!default.perspectivev3 diff --git a/packages/flutter_paid/example/ios/Flutter/AppFrameworkInfo.plist b/packages/flutter_paid/example/ios/Flutter/AppFrameworkInfo.plist deleted file mode 100644 index 7c56964..0000000 --- a/packages/flutter_paid/example/ios/Flutter/AppFrameworkInfo.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - App - CFBundleIdentifier - io.flutter.flutter.app - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - App - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - MinimumOSVersion - 12.0 - - diff --git a/packages/flutter_paid/example/ios/Flutter/Debug.xcconfig b/packages/flutter_paid/example/ios/Flutter/Debug.xcconfig deleted file mode 100644 index ec97fc6..0000000 --- a/packages/flutter_paid/example/ios/Flutter/Debug.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" -#include "Generated.xcconfig" diff --git a/packages/flutter_paid/example/ios/Flutter/Release.xcconfig b/packages/flutter_paid/example/ios/Flutter/Release.xcconfig deleted file mode 100644 index c4855bf..0000000 --- a/packages/flutter_paid/example/ios/Flutter/Release.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" -#include "Generated.xcconfig" diff --git a/packages/flutter_paid/example/ios/Podfile b/packages/flutter_paid/example/ios/Podfile deleted file mode 100644 index c9339a0..0000000 --- a/packages/flutter_paid/example/ios/Podfile +++ /dev/null @@ -1,41 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '12.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/flutter_paid/example/ios/Podfile.lock b/packages/flutter_paid/example/ios/Podfile.lock deleted file mode 100644 index e9e715f..0000000 --- a/packages/flutter_paid/example/ios/Podfile.lock +++ /dev/null @@ -1,28 +0,0 @@ -PODS: - - Flutter (1.0.0) - - flutter_paid (0.0.1): - - Flutter - - integration_test (0.0.1): - - Flutter - -DEPENDENCIES: - - Flutter (from `Flutter`) - - flutter_paid (from `.symlinks/plugins/flutter_paid/ios`) - - integration_test (from `.symlinks/plugins/integration_test/ios`) - -EXTERNAL SOURCES: - Flutter: - :path: Flutter - flutter_paid: - :path: ".symlinks/plugins/flutter_paid/ios" - integration_test: - :path: ".symlinks/plugins/integration_test/ios" - -SPEC CHECKSUMS: - Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 - flutter_paid: 4461d2236314bded6afb221cd9d69b7f7ca51fc6 - integration_test: 13825b8a9334a850581300559b8839134b124670 - -PODFILE CHECKSUM: 6e700dec67e6deac9b1c69bb14c49a2217a12d15 - -COCOAPODS: 1.14.3 diff --git a/packages/flutter_paid/example/ios/Runner.xcodeproj/project.pbxproj b/packages/flutter_paid/example/ios/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index 343e2db..0000000 --- a/packages/flutter_paid/example/ios/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,704 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXBuildFile section */ - 1200A014D953763B34535EB3 /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CB8157ECFBC61BAC8F6DDD98 /* libPods-Runner.a */; }; - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 331C80F4294D02FB00263BE5 /* RunnerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 331C80F3294D02FB00263BE5 /* RunnerTests.m */; }; - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 74D02B72575A8C8A1492AE70 /* libPods-RunnerTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BF91C3F82401F1EC86B8BDBB /* libPods-RunnerTests.a */; }; - 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; - 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 331C80F5294D02FB00263BE5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 97C146E61CF9000F007C117D /* Project object */; - proxyType = 1; - remoteGlobalIDString = 97C146ED1CF9000F007C117D; - remoteInfo = Runner; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 9705A1C41CF9048500538489 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 0733CEEBA4D517AC13DB7032 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 331C80F1294D02FB00263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 331C80F3294D02FB00263BE5 /* RunnerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RunnerTests.m; sourceTree = ""; }; - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; - 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AA2F596DEE97CE584753926C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - BF91C3F82401F1EC86B8BDBB /* libPods-RunnerTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RunnerTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - C4F40650D87222AA05FBB409 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - CB8157ECFBC61BAC8F6DDD98 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - DB6D020E7BD00B83208B9A03 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F5AC35C52992172B47892D71 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F606F420C75B7A999C3003F1 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 331C80EE294D02FB00263BE5 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 74D02B72575A8C8A1492AE70 /* libPods-RunnerTests.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 1200A014D953763B34535EB3 /* libPods-Runner.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 331C80F2294D02FB00263BE5 /* RunnerTests */ = { - isa = PBXGroup; - children = ( - 331C80F3294D02FB00263BE5 /* RunnerTests.m */, - ); - path = RunnerTests; - sourceTree = ""; - }; - 3D1BD31C0A91C924BAF12C36 /* Frameworks */ = { - isa = PBXGroup; - children = ( - CB8157ECFBC61BAC8F6DDD98 /* libPods-Runner.a */, - BF91C3F82401F1EC86B8BDBB /* libPods-RunnerTests.a */, - ); - name = Frameworks; - sourceTree = ""; - }; - 9740EEB11CF90186004384FC /* Flutter */ = { - isa = PBXGroup; - children = ( - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 9740EEB31CF90195004384FC /* Generated.xcconfig */, - ); - name = Flutter; - sourceTree = ""; - }; - 97C146E51CF9000F007C117D = { - isa = PBXGroup; - children = ( - 9740EEB11CF90186004384FC /* Flutter */, - 97C146F01CF9000F007C117D /* Runner */, - 331C80F2294D02FB00263BE5 /* RunnerTests */, - 97C146EF1CF9000F007C117D /* Products */, - F4667D52B031A4D8AAF7780D /* Pods */, - 3D1BD31C0A91C924BAF12C36 /* Frameworks */, - ); - sourceTree = ""; - }; - 97C146EF1CF9000F007C117D /* Products */ = { - isa = PBXGroup; - children = ( - 97C146EE1CF9000F007C117D /* Runner.app */, - 331C80F1294D02FB00263BE5 /* RunnerTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 97C146F01CF9000F007C117D /* Runner */ = { - isa = PBXGroup; - children = ( - 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, - 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, - 97C146FA1CF9000F007C117D /* Main.storyboard */, - 97C146FD1CF9000F007C117D /* Assets.xcassets */, - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, - 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, - ); - path = Runner; - sourceTree = ""; - }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 97C146F21CF9000F007C117D /* main.m */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - F4667D52B031A4D8AAF7780D /* Pods */ = { - isa = PBXGroup; - children = ( - C4F40650D87222AA05FBB409 /* Pods-Runner.debug.xcconfig */, - AA2F596DEE97CE584753926C /* Pods-Runner.release.xcconfig */, - F5AC35C52992172B47892D71 /* Pods-Runner.profile.xcconfig */, - DB6D020E7BD00B83208B9A03 /* Pods-RunnerTests.debug.xcconfig */, - F606F420C75B7A999C3003F1 /* Pods-RunnerTests.release.xcconfig */, - 0733CEEBA4D517AC13DB7032 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 331C80F0294D02FB00263BE5 /* RunnerTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 331C80F7294D02FB00263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; - buildPhases = ( - AFF8B152CD6A1DD5D70EC498 /* [CP] Check Pods Manifest.lock */, - 331C80ED294D02FB00263BE5 /* Sources */, - 331C80EE294D02FB00263BE5 /* Frameworks */, - 331C80EF294D02FB00263BE5 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 331C80F6294D02FB00263BE5 /* PBXTargetDependency */, - ); - name = RunnerTests; - productName = RunnerTests; - productReference = 331C80F1294D02FB00263BE5 /* RunnerTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 97C146ED1CF9000F007C117D /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - 99BA78E65A21CE04C8370CA7 /* [CP] Check Pods Manifest.lock */, - 9740EEB61CF901F6004384FC /* Run Script */, - 97C146EA1CF9000F007C117D /* Sources */, - 97C146EB1CF9000F007C117D /* Frameworks */, - 97C146EC1CF9000F007C117D /* Resources */, - 9705A1C41CF9048500538489 /* Embed Frameworks */, - 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Runner; - productName = Runner; - productReference = 97C146EE1CF9000F007C117D /* Runner.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 97C146E61CF9000F007C117D /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 1510; - ORGANIZATIONNAME = ""; - TargetAttributes = { - 331C80F0294D02FB00263BE5 = { - CreatedOnToolsVersion = 14.0; - TestTargetID = 97C146ED1CF9000F007C117D; - }; - 97C146ED1CF9000F007C117D = { - CreatedOnToolsVersion = 7.3.1; - }; - }; - }; - buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 97C146E51CF9000F007C117D; - productRefGroup = 97C146EF1CF9000F007C117D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 97C146ED1CF9000F007C117D /* Runner */, - 331C80F0294D02FB00263BE5 /* RunnerTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 331C80EF294D02FB00263BE5 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 97C146EC1CF9000F007C117D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; - }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; - 99BA78E65A21CE04C8370CA7 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - AFF8B152CD6A1DD5D70EC498 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 331C80ED294D02FB00263BE5 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 331C80F4294D02FB00263BE5 /* RunnerTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 97C146EA1CF9000F007C117D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, - 97C146F31CF9000F007C117D /* main.m in Sources */, - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 331C80F6294D02FB00263BE5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 97C146ED1CF9000F007C117D /* Runner */; - targetProxy = 331C80F5294D02FB00263BE5 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 97C146FA1CF9000F007C117D /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C146FB1CF9000F007C117D /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C147001CF9000F007C117D /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 249021D3217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Profile; - }; - 249021D4217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 979UK3QQJ3; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterPaidExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Profile; - }; - 331C80F8294D02FB00263BE5 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DB6D020E7BD00B83208B9A03 /* Pods-RunnerTests.debug.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterPaidExample.RunnerTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; - }; - name = Debug; - }; - 331C80F9294D02FB00263BE5 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F606F420C75B7A999C3003F1 /* Pods-RunnerTests.release.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterPaidExample.RunnerTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; - }; - name = Release; - }; - 331C80FA294D02FB00263BE5 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 0733CEEBA4D517AC13DB7032 /* Pods-RunnerTests.profile.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterPaidExample.RunnerTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; - }; - name = Profile; - }; - 97C147031CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 97C147041CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 97C147061CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 979UK3QQJ3; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterPaidExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 97C147071CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 979UK3QQJ3; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterPaidExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 331C80F7294D02FB00263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 331C80F8294D02FB00263BE5 /* Debug */, - 331C80F9294D02FB00263BE5 /* Release */, - 331C80FA294D02FB00263BE5 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147031CF9000F007C117D /* Debug */, - 97C147041CF9000F007C117D /* Release */, - 249021D3217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147061CF9000F007C117D /* Debug */, - 97C147071CF9000F007C117D /* Release */, - 249021D4217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 97C146E61CF9000F007C117D /* Project object */; -} diff --git a/packages/flutter_paid/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/packages/flutter_paid/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/packages/flutter_paid/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/packages/flutter_paid/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/flutter_paid/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/packages/flutter_paid/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/packages/flutter_paid/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/flutter_paid/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c..0000000 --- a/packages/flutter_paid/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/packages/flutter_paid/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/flutter_paid/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index 3d0fb00..0000000 --- a/packages/flutter_paid/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/flutter_paid/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/packages/flutter_paid/example/ios/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 21a3cc1..0000000 --- a/packages/flutter_paid/example/ios/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/packages/flutter_paid/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/flutter_paid/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/packages/flutter_paid/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/packages/flutter_paid/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/flutter_paid/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c..0000000 --- a/packages/flutter_paid/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/packages/flutter_paid/example/ios/Runner/AppDelegate.h b/packages/flutter_paid/example/ios/Runner/AppDelegate.h deleted file mode 100644 index 36e21bb..0000000 --- a/packages/flutter_paid/example/ios/Runner/AppDelegate.h +++ /dev/null @@ -1,6 +0,0 @@ -#import -#import - -@interface AppDelegate : FlutterAppDelegate - -@end diff --git a/packages/flutter_paid/example/ios/Runner/AppDelegate.m b/packages/flutter_paid/example/ios/Runner/AppDelegate.m deleted file mode 100644 index 70e8393..0000000 --- a/packages/flutter_paid/example/ios/Runner/AppDelegate.m +++ /dev/null @@ -1,13 +0,0 @@ -#import "AppDelegate.h" -#import "GeneratedPluginRegistrant.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application - didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - [GeneratedPluginRegistrant registerWithRegistry:self]; - // Override point for customization after application launch. - return [super application:application didFinishLaunchingWithOptions:launchOptions]; -} - -@end diff --git a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index d36b1fa..0000000 --- a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "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" : "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" : "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" - } -} diff --git a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png deleted file mode 100644 index dc9ada4..0000000 Binary files a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and /dev/null differ diff --git a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index 7353c41..0000000 Binary files a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and /dev/null differ diff --git a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index 797d452..0000000 Binary files a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and /dev/null differ diff --git a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index 6ed2d93..0000000 Binary files a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and /dev/null differ diff --git a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index 4cd7b00..0000000 Binary files a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and /dev/null differ diff --git a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index fe73094..0000000 Binary files a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and /dev/null differ diff --git a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index 321773c..0000000 Binary files a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and /dev/null differ diff --git a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 797d452..0000000 Binary files a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and /dev/null differ diff --git a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index 502f463..0000000 Binary files a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and /dev/null differ diff --git a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index 0ec3034..0000000 Binary files a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and /dev/null differ diff --git a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index 0ec3034..0000000 Binary files a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and /dev/null differ diff --git a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index e9f5fea..0000000 Binary files a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and /dev/null differ diff --git a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index 84ac32a..0000000 Binary files a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and /dev/null differ diff --git a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index 8953cba..0000000 Binary files a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and /dev/null differ diff --git a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index 0467bf1..0000000 Binary files a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and /dev/null differ diff --git a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/packages/flutter_paid/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json deleted file mode 100644 index 0bedcf2..0000000 --- a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "LaunchImage.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/packages/flutter_paid/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png deleted file mode 100644 index 9da19ea..0000000 Binary files a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png and /dev/null differ diff --git a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/packages/flutter_paid/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png deleted file mode 100644 index 9da19ea..0000000 Binary files a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png and /dev/null differ diff --git a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/packages/flutter_paid/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png deleted file mode 100644 index 9da19ea..0000000 Binary files a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png and /dev/null differ diff --git a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/packages/flutter_paid/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md deleted file mode 100644 index 89c2725..0000000 --- a/packages/flutter_paid/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Launch Screen Assets - -You can customize the launch screen with your own desired assets by replacing the image files in this directory. - -You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/packages/flutter_paid/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/packages/flutter_paid/example/ios/Runner/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f2e259c..0000000 --- a/packages/flutter_paid/example/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/flutter_paid/example/ios/Runner/Base.lproj/Main.storyboard b/packages/flutter_paid/example/ios/Runner/Base.lproj/Main.storyboard deleted file mode 100644 index f3c2851..0000000 --- a/packages/flutter_paid/example/ios/Runner/Base.lproj/Main.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/flutter_paid/example/ios/Runner/Info.plist b/packages/flutter_paid/example/ios/Runner/Info.plist deleted file mode 100644 index 4ea74ef..0000000 --- a/packages/flutter_paid/example/ios/Runner/Info.plist +++ /dev/null @@ -1,49 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Flutter Paid - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - flutter_paid_example - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - - - diff --git a/packages/flutter_paid/example/ios/Runner/main.m b/packages/flutter_paid/example/ios/Runner/main.m deleted file mode 100644 index dff6597..0000000 --- a/packages/flutter_paid/example/ios/Runner/main.m +++ /dev/null @@ -1,9 +0,0 @@ -#import -#import -#import "AppDelegate.h" - -int main(int argc, char* argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/packages/flutter_paid/example/ios/RunnerTests/RunnerTests.m b/packages/flutter_paid/example/ios/RunnerTests/RunnerTests.m deleted file mode 100644 index 28c02d0..0000000 --- a/packages/flutter_paid/example/ios/RunnerTests/RunnerTests.m +++ /dev/null @@ -1,33 +0,0 @@ -#import -#import -#import - -@import flutter_paid; - -// This demonstrates a simple unit test of the Objective-C portion of this plugin's implementation. -// -// See https://developer.apple.com/documentation/xctest for more information about using XCTest. - -@interface RunnerTests : XCTestCase - -@end - -@implementation RunnerTests - -- (void)testExample { - FlutterPaidPlugin *plugin = [[FlutterPaidPlugin alloc] init]; - - FlutterMethodCall *call = [FlutterMethodCall methodCallWithMethodName:@"getPlatformVersion" - arguments:nil]; - XCTestExpectation *expectation = [self expectationWithDescription:@"result block must be called"]; - [plugin handleMethodCall:call - result:^(id result) { - NSString *expected = [NSString - stringWithFormat:@"iOS %@", UIDevice.currentDevice.systemVersion]; - XCTAssertEqualObjects(result, expected); - [expectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:1 handler:nil]; -} - -@end diff --git a/packages/flutter_paid/example/lib/main.dart b/packages/flutter_paid/example/lib/main.dart deleted file mode 100644 index 1cc2ab7..0000000 --- a/packages/flutter_paid/example/lib/main.dart +++ /dev/null @@ -1,72 +0,0 @@ -import 'package:flutter/material.dart'; -import 'dart:async'; - -import 'package:flutter/services.dart'; -import 'package:flutter_paid/flutter_paid.dart'; - -void main() { - runApp(const MyApp()); -} - -class MyApp extends StatefulWidget { - const MyApp({super.key}); - - @override - State createState() => _MyAppState(); -} - -class _MyAppState extends State { - String _platformVersion = 'Unknown'; - String _paid = 'Unknown'; - final _flutterPaidPlugin = FlutterPaid(); - - @override - void initState() { - super.initState(); - initPlatformState(); - } - - // Platform messages are asynchronous, so we initialize in an async method. - Future initPlatformState() async { - String platformVersion; - String paid = "Unknown"; - // Platform messages may fail, so we use a try/catch PlatformException. - // We also handle the message potentially returning null. - try { - platformVersion = await _flutterPaidPlugin.getPlatformVersion() ?? - 'Unknown platform version'; - paid = await _flutterPaidPlugin.paid() ?? 'Unknown paid'; - } on PlatformException { - platformVersion = 'Failed to get platform version.'; - } - - // If the widget was removed from the tree while the asynchronous platform - // message was in flight, we want to discard the reply rather than calling - // setState to update our non-existent appearance. - if (!mounted) return; - - setState(() { - _platformVersion = platformVersion; - _paid = paid; - }); - } - - @override - Widget build(BuildContext context) { - return MaterialApp( - home: Scaffold( - appBar: AppBar( - title: const Text('Plugin example app'), - ), - body: Center( - child: Column( - children: [ - Text('Running on: $_platformVersion\n'), - Text('Paid: $_paid\n'), - ], - ), - ), - ), - ); - } -} diff --git a/packages/flutter_paid/example/pubspec.lock b/packages/flutter_paid/example/pubspec.lock deleted file mode 100644 index 327242d..0000000 --- a/packages/flutter_paid/example/pubspec.lock +++ /dev/null @@ -1,283 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - async: - dependency: transitive - description: - name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" - url: "https://pub.dev" - source: hosted - version: "2.11.0" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - characters: - dependency: transitive - description: - name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - clock: - dependency: transitive - description: - name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.dev" - source: hosted - version: "1.1.1" - collection: - dependency: transitive - description: - name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a - url: "https://pub.dev" - source: hosted - version: "1.18.0" - cupertino_icons: - dependency: "direct main" - description: - name: cupertino_icons - sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 - url: "https://pub.dev" - source: hosted - version: "1.0.8" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - file: - dependency: transitive - description: - name: file - sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" - url: "https://pub.dev" - source: hosted - version: "7.0.0" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_driver: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - flutter_lints: - dependency: "direct dev" - description: - name: flutter_lints - sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - flutter_paid: - dependency: "direct main" - description: - path: ".." - relative: true - source: path - version: "0.0.1" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - fuchsia_remote_debug_protocol: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - integration_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" - url: "https://pub.dev" - source: hosted - version: "10.0.0" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 - url: "https://pub.dev" - source: hosted - version: "2.0.1" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 - url: "https://pub.dev" - source: hosted - version: "2.0.1" - lints: - dependency: transitive - description: - name: lints - sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 - url: "https://pub.dev" - source: hosted - version: "3.0.0" - matcher: - dependency: transitive - description: - name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb - url: "https://pub.dev" - source: hosted - version: "0.12.16+1" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" - url: "https://pub.dev" - source: hosted - version: "0.8.0" - meta: - dependency: transitive - description: - name: meta - sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 - url: "https://pub.dev" - source: hosted - version: "1.11.0" - path: - dependency: transitive - description: - name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" - url: "https://pub.dev" - source: hosted - version: "1.9.0" - platform: - dependency: transitive - description: - name: platform - sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" - url: "https://pub.dev" - source: hosted - version: "3.1.4" - plugin_platform_interface: - dependency: transitive - description: - name: plugin_platform_interface - sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" - url: "https://pub.dev" - source: hosted - version: "2.1.8" - process: - dependency: transitive - description: - name: process - sha256: "21e54fd2faf1b5bdd5102afd25012184a6793927648ea81eea80552ac9405b32" - url: "https://pub.dev" - source: hosted - version: "5.0.2" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.99" - source_span: - dependency: transitive - description: - name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" - url: "https://pub.dev" - source: hosted - version: "1.10.0" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" - url: "https://pub.dev" - source: hosted - version: "1.11.1" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 - url: "https://pub.dev" - source: hosted - version: "2.1.2" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - sync_http: - dependency: transitive - description: - name: sync_http - sha256: "7f0cd72eca000d2e026bcd6f990b81d0ca06022ef4e32fb257b30d3d1014a961" - url: "https://pub.dev" - source: hosted - version: "0.3.1" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.dev" - source: hosted - version: "1.2.1" - test_api: - dependency: transitive - description: - name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" - url: "https://pub.dev" - source: hosted - version: "0.6.1" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - vm_service: - dependency: transitive - description: - name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 - url: "https://pub.dev" - source: hosted - version: "13.0.0" - webdriver: - dependency: transitive - description: - name: webdriver - sha256: "003d7da9519e1e5f329422b36c4dcdf18d7d2978d1ba099ea4e45ba490ed845e" - url: "https://pub.dev" - source: hosted - version: "3.0.3" -sdks: - dart: ">=3.3.0 <4.0.0" - flutter: ">=3.3.0" diff --git a/packages/flutter_paid/example/pubspec.yaml b/packages/flutter_paid/example/pubspec.yaml deleted file mode 100644 index 54d0d08..0000000 --- a/packages/flutter_paid/example/pubspec.yaml +++ /dev/null @@ -1,85 +0,0 @@ -name: flutter_paid_example -description: "Demonstrates how to use the flutter_paid plugin." -# The following line prevents the package from being accidentally published to -# pub.dev using `flutter pub publish`. This is preferred for private packages. -publish_to: 'none' # Remove this line if you wish to publish to pub.dev - -environment: - sdk: '>=3.3.0 <4.0.0' - -# Dependencies specify other packages that your package needs in order to work. -# To automatically upgrade your package dependencies to the latest versions -# consider running `flutter pub upgrade --major-versions`. Alternatively, -# dependencies can be manually updated by changing the version numbers below to -# the latest version available on pub.dev. To see which dependencies have newer -# versions available, run `flutter pub outdated`. -dependencies: - flutter: - sdk: flutter - - flutter_paid: - # When depending on this package from a real application you should use: - # flutter_paid: ^x.y.z - # See https://dart.dev/tools/pub/dependencies#version-constraints - # The example app is bundled with the plugin so we use a path dependency on - # the parent directory to use the current plugin's version. - path: ../ - - # The following adds the Cupertino Icons font to your application. - # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^1.0.6 - -dev_dependencies: - integration_test: - sdk: flutter - flutter_test: - sdk: flutter - - # The "flutter_lints" package below contains a set of recommended lints to - # encourage good coding practices. The lint set provided by the package is - # activated in the `analysis_options.yaml` file located at the root of your - # package. See that file for information about deactivating specific lint - # rules and activating additional ones. - flutter_lints: ^3.0.0 - -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter packages. -flutter: - - # The following line ensures that the Material Icons font is - # included with your application, so that you can use the icons in - # the material Icons class. - uses-material-design: true - - # To add assets to your application, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages - - # To add custom fonts to your application, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages diff --git a/packages/flutter_paid/example/test/widget_test.dart b/packages/flutter_paid/example/test/widget_test.dart deleted file mode 100644 index 76feab0..0000000 --- a/packages/flutter_paid/example/test/widget_test.dart +++ /dev/null @@ -1,27 +0,0 @@ -// This is a basic Flutter widget test. -// -// To perform an interaction with a widget in your test, use the WidgetTester -// utility in the flutter_test package. For example, you can send tap and scroll -// gestures. You can also use WidgetTester to find child widgets in the widget -// tree, read text, and verify that the values of widget properties are correct. - -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import 'package:flutter_paid_example/main.dart'; - -void main() { - testWidgets('Verify Platform version', (WidgetTester tester) async { - // Build our app and trigger a frame. - await tester.pumpWidget(const MyApp()); - - // Verify that platform version is retrieved. - expect( - find.byWidgetPredicate( - (Widget widget) => widget is Text && - widget.data!.startsWith('Running on:'), - ), - findsOneWidget, - ); - }); -} diff --git a/packages/flutter_paid/ios/.gitignore b/packages/flutter_paid/ios/.gitignore deleted file mode 100644 index 0c88507..0000000 --- a/packages/flutter_paid/ios/.gitignore +++ /dev/null @@ -1,38 +0,0 @@ -.idea/ -.vagrant/ -.sconsign.dblite -.svn/ - -.DS_Store -*.swp -profile - -DerivedData/ -build/ -GeneratedPluginRegistrant.h -GeneratedPluginRegistrant.m - -.generated/ - -*.pbxuser -*.mode1v3 -*.mode2v3 -*.perspectivev3 - -!default.pbxuser -!default.mode1v3 -!default.mode2v3 -!default.perspectivev3 - -xcuserdata - -*.moved-aside - -*.pyc -*sync/ -Icon? -.tags* - -/Flutter/Generated.xcconfig -/Flutter/ephemeral/ -/Flutter/flutter_export_environment.sh \ No newline at end of file diff --git a/packages/flutter_paid/ios/Assets/.gitkeep b/packages/flutter_paid/ios/Assets/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/packages/flutter_paid/ios/Classes/FlutterPaidPlugin.h b/packages/flutter_paid/ios/Classes/FlutterPaidPlugin.h deleted file mode 100644 index 3689b96..0000000 --- a/packages/flutter_paid/ios/Classes/FlutterPaidPlugin.h +++ /dev/null @@ -1,4 +0,0 @@ -#import - -@interface FlutterPaidPlugin : NSObject -@end diff --git a/packages/flutter_paid/ios/Classes/FlutterPaidPlugin.m b/packages/flutter_paid/ios/Classes/FlutterPaidPlugin.m deleted file mode 100644 index 62e27a0..0000000 --- a/packages/flutter_paid/ios/Classes/FlutterPaidPlugin.m +++ /dev/null @@ -1,105 +0,0 @@ -#import "FlutterPaidPlugin.h" -#import -#import -#import - -@interface NSString (Paid) -+ (NSString *)paid; -@end - - -@implementation FlutterPaidPlugin -+ (void)registerWithRegistrar:(NSObject*)registrar { - FlutterMethodChannel* channel = [FlutterMethodChannel - methodChannelWithName:@"flutter_paid" - binaryMessenger:[registrar messenger]]; - FlutterPaidPlugin* instance = [[FlutterPaidPlugin alloc] init]; - [registrar addMethodCallDelegate:instance channel:channel]; -} - -- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { - if ([@"getPlatformVersion" isEqualToString:call.method]) { - result([@"iOS " stringByAppendingString:[[UIDevice currentDevice] systemVersion]]); - } else if ([@"paid" isEqualToString:call.method]) { - result([NSString paid]); - } - else { - result(FlutterMethodNotImplemented); - } -} - -@end - - - -time_t bootSecTime(NSString *abc){ - struct timeval boottime; - size_t len = sizeof(boottime); - int mib[2] = { CTL_KERN, KERN_BOOTTIME }; - if( sysctl(mib, 2, &boottime, &len, NULL, 0) < 0 ) { - return 0; - } - return boottime.tv_sec; -} - - - -@implementation NSString (Paid) -- (NSString *)MD5 -{ - const char *cStr = [self UTF8String]; - unsigned char result[CC_MD5_DIGEST_LENGTH]; - CC_MD5( cStr, (int)strlen(cStr), result ); // This is the md5 call - return [NSString stringWithFormat: - @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", - result[0], result[1], result[2], result[3], - result[4], result[5], result[6], result[7], - result[8], result[9], result[10], result[11], - result[12], result[13], result[14], result[15] - ]; -} - -+ (NSString *)paid { - NSString *paid1 = [self getFileTime]; - NSString *paid2 = [self getSysU]; - NSString *paid3 = [self bootTimeInSec]; - - NSString *result = [NSString stringWithFormat:@"%@-%@-%@", [paid1 MD5], [paid2 MD5], [paid3 MD5]]; -// NSLog(@"---PAID----\n%@", result); - return result; -} - -+ (NSString *)getFileTime { - struct stat info; - int result = stat("/var/mobile", &info); - if (result!=0) { - return @""; - } - struct timespec time = info.st_birthtimespec; - return [NSString stringWithFormat:@"%ld.%09ld", time.tv_sec, time.tv_nsec]; -} - - -+(NSString *)getSysU { - NSString *result = nil; - NSString *information = @"L3Zhci9tb2JpbGUvTGlicmFyeS9Vc2VyQ29uZmlndXJhdGlvblByb2ZpbGVzL1B1YmxpY0luZm8vTUNNZXRhLnBsaXN0"; - NSData *data=[[NSData alloc]initWithBase64EncodedString:information options:0]; - NSString *dataString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; - NSError *error = nil; - NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:dataString error:&error]; - if (fileAttributes) { - id singleAttibute = [fileAttributes objectForKey:NSFileCreationDate]; - if ([singleAttibute isKindOfClass:[NSDate class]]) { - NSDate *dataDate = singleAttibute; - result = [NSString stringWithFormat:@"%.6f",[dataDate timeIntervalSince1970]]; - } - } - return result; -} - - -+(NSString *)bootTimeInSec { - return [NSString stringWithFormat:@"%ld", bootSecTime(@"")]; -} - -@end diff --git a/packages/flutter_paid/ios/flutter_paid.podspec b/packages/flutter_paid/ios/flutter_paid.podspec deleted file mode 100644 index d8dcd92..0000000 --- a/packages/flutter_paid/ios/flutter_paid.podspec +++ /dev/null @@ -1,23 +0,0 @@ -# -# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html. -# Run `pod lib lint flutter_paid.podspec` to validate before publishing. -# -Pod::Spec.new do |s| - s.name = 'flutter_paid' - s.version = '0.0.1' - s.summary = 'A new Flutter plugin project.' - s.description = <<-DESC -A new Flutter plugin project. - DESC - s.homepage = 'http://example.com' - s.license = { :file => '../LICENSE' } - s.author = { 'Your Company' => 'email@example.com' } - s.source = { :path => '.' } - s.source_files = 'Classes/**/*' - s.public_header_files = 'Classes/**/*.h' - s.dependency 'Flutter' - s.platform = :ios, '11.0' - - # Flutter.framework does not contain a i386 slice. - s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } -end diff --git a/packages/flutter_paid/lib/flutter_paid.dart b/packages/flutter_paid/lib/flutter_paid.dart deleted file mode 100644 index 30fed9b..0000000 --- a/packages/flutter_paid/lib/flutter_paid.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'flutter_paid_platform_interface.dart'; - -class FlutterPaid { - Future getPlatformVersion() { - return FlutterPaidPlatform.instance.getPlatformVersion(); - } - - Future paid() { - return FlutterPaidPlatform.instance.paid(); - } -} diff --git a/packages/flutter_paid/lib/flutter_paid_method_channel.dart b/packages/flutter_paid/lib/flutter_paid_method_channel.dart deleted file mode 100644 index 538aad2..0000000 --- a/packages/flutter_paid/lib/flutter_paid_method_channel.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/services.dart'; - -import 'flutter_paid_platform_interface.dart'; - -/// An implementation of [FlutterPaidPlatform] that uses method channels. -class MethodChannelFlutterPaid extends FlutterPaidPlatform { - /// The method channel used to interact with the native platform. - @visibleForTesting - final methodChannel = const MethodChannel('flutter_paid'); - - @override - Future getPlatformVersion() async { - final version = await methodChannel.invokeMethod('getPlatformVersion'); - return version; - } - - @override - Future paid() async { - final paid = await methodChannel.invokeMethod('paid'); - return paid; - } -} diff --git a/packages/flutter_paid/lib/flutter_paid_platform_interface.dart b/packages/flutter_paid/lib/flutter_paid_platform_interface.dart deleted file mode 100644 index 3e1172e..0000000 --- a/packages/flutter_paid/lib/flutter_paid_platform_interface.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:plugin_platform_interface/plugin_platform_interface.dart'; - -import 'flutter_paid_method_channel.dart'; - -abstract class FlutterPaidPlatform extends PlatformInterface { - /// Constructs a FlutterPaidPlatform. - FlutterPaidPlatform() : super(token: _token); - - static final Object _token = Object(); - - static FlutterPaidPlatform _instance = MethodChannelFlutterPaid(); - - /// The default instance of [FlutterPaidPlatform] to use. - /// - /// Defaults to [MethodChannelFlutterPaid]. - static FlutterPaidPlatform get instance => _instance; - - /// Platform-specific implementations should set this with their own - /// platform-specific class that extends [FlutterPaidPlatform] when - /// they register themselves. - static set instance(FlutterPaidPlatform instance) { - PlatformInterface.verifyToken(instance, _token); - _instance = instance; - } - - Future getPlatformVersion() { - throw UnimplementedError('platformVersion() has not been implemented.'); - } - Future paid() { - throw UnimplementedError('platformVersion() has not been implemented.'); - } -} diff --git a/packages/flutter_paid/pubspec.yaml b/packages/flutter_paid/pubspec.yaml deleted file mode 100644 index 7f4a62d..0000000 --- a/packages/flutter_paid/pubspec.yaml +++ /dev/null @@ -1,69 +0,0 @@ -name: flutter_paid -description: "A new Flutter plugin project." -version: 0.0.1 -homepage: - -environment: - sdk: '>=3.3.0 <4.0.0' - flutter: '>=3.3.0' - -dependencies: - flutter: - sdk: flutter - plugin_platform_interface: ^2.0.2 - -dev_dependencies: - flutter_test: - sdk: flutter - flutter_lints: ^3.0.0 - -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter packages. -flutter: - # This section identifies this Flutter project as a plugin project. - # The 'pluginClass' specifies the class (in Java, Kotlin, Swift, Objective-C, etc.) - # which should be registered in the plugin registry. This is required for - # using method channels. - # The Android 'package' specifies package in which the registered class is. - # This is required for using method channels on Android. - # The 'ffiPlugin' specifies that native code should be built and bundled. - # This is required for using `dart:ffi`. - # All these are used by the tooling to maintain consistency when - # adding or updating assets for this project. - plugin: - platforms: - ios: - pluginClass: FlutterPaidPlugin - - # To add assets to your plugin package, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - # - # For details regarding assets in packages, see - # https://flutter.dev/assets-and-images/#from-packages - # - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware - - # To add custom fonts to your plugin package, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts in packages, see - # https://flutter.dev/custom-fonts/#from-packages diff --git a/packages/flutter_paid/test/flutter_paid_method_channel_test.dart b/packages/flutter_paid/test/flutter_paid_method_channel_test.dart deleted file mode 100644 index 4aa02be..0000000 --- a/packages/flutter_paid/test/flutter_paid_method_channel_test.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:flutter/services.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_paid/flutter_paid_method_channel.dart'; - -void main() { - TestWidgetsFlutterBinding.ensureInitialized(); - - MethodChannelFlutterPaid platform = MethodChannelFlutterPaid(); - const MethodChannel channel = MethodChannel('flutter_paid'); - - setUp(() { - TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler( - channel, - (MethodCall methodCall) async { - return '42'; - }, - ); - }); - - tearDown(() { - TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler(channel, null); - }); - - test('getPlatformVersion', () async { - expect(await platform.getPlatformVersion(), '42'); - }); -} diff --git a/packages/flutter_paid/test/flutter_paid_test.dart b/packages/flutter_paid/test/flutter_paid_test.dart deleted file mode 100644 index 88e9a19..0000000 --- a/packages/flutter_paid/test/flutter_paid_test.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_paid/flutter_paid.dart'; -import 'package:flutter_paid/flutter_paid_platform_interface.dart'; -import 'package:flutter_paid/flutter_paid_method_channel.dart'; -import 'package:plugin_platform_interface/plugin_platform_interface.dart'; - -class MockFlutterPaidPlatform - with MockPlatformInterfaceMixin - implements FlutterPaidPlatform { - - @override - Future getPlatformVersion() => Future.value('42'); -} - -void main() { - final FlutterPaidPlatform initialPlatform = FlutterPaidPlatform.instance; - - test('$MethodChannelFlutterPaid is the default instance', () { - expect(initialPlatform, isInstanceOf()); - }); - - test('getPlatformVersion', () async { - FlutterPaid flutterPaidPlugin = FlutterPaid(); - MockFlutterPaidPlatform fakePlatform = MockFlutterPaidPlatform(); - FlutterPaidPlatform.instance = fakePlatform; - - expect(await flutterPaidPlugin.getPlatformVersion(), '42'); - }); -} diff --git a/pubspec.lock b/pubspec.lock index 2d7edfb..71cd272 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -29,15 +29,19 @@ packages: dependency: "direct main" description: path: "packages/android_id" - relative: true - source: path + ref: main + resolved-ref: "51fd4ba38d57fdc8fb23e744aa65bf2368878b7f" + url: "https://gitea.neuronlabs.art/third-party-project/flutter-packages.git" + source: git version: "0.4.0" android_oaid: dependency: "direct main" description: path: "packages/android_oaid" - relative: true - source: path + ref: main + resolved-ref: "51fd4ba38d57fdc8fb23e744aa65bf2368878b7f" + url: "https://gitea.neuronlabs.art/third-party-project/flutter-packages.git" + source: git version: "0.4.0" ansicolor: dependency: transitive @@ -283,10 +287,10 @@ packages: dependency: "direct main" description: name: device_info_plus - sha256: "98f28b42168cc509abc92f88518882fd58061ea372d7999aecc424345c7bff6a" + sha256: "4df8babf73058181227e18b08e6ea3520cf5fc5d796888d33b7cb0f33f984b7c" url: "https://pub.dev" source: hosted - version: "11.5.0" + version: "12.3.0" device_info_plus_platform_interface: dependency: transitive description: @@ -437,8 +441,10 @@ packages: dependency: "direct main" description: path: "packages/flutter_paid" - relative: true - source: path + ref: main + resolved-ref: "51fd4ba38d57fdc8fb23e744aa65bf2368878b7f" + url: "https://gitea.neuronlabs.art/third-party-project/flutter-packages.git" + source: git version: "0.0.1" flutter_remix: dependency: "direct main" diff --git a/pubspec.yaml b/pubspec.yaml index 823d8ca..82c1ec6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -24,10 +24,11 @@ dependencies: protobuf: ^4.2.0 fixnum: ^1.1.1 # 存储 - flutter_secure_storage: ^10.2.0 + flutter_secure_storage: ^10.3.1 shared_preferences: ^2.5.3 # 设备信息 - device_info_plus: ^11.3.3 + # 12.4.0 requires the iOS 26.1 SDK; 12.3.0 remains compatible with Xcode 26.0.x. + device_info_plus: 12.3.0 package_info_plus: ^8.3.0 uuid: ^4.4.0 # UI / 视觉 @@ -36,28 +37,34 @@ dependencies: flutter_remix: ^0.0.3 shimmer: ^3.0.0 flutter_markdown_plus: ^1.0.7 - video_player: ^2.9.2 # 启动页视频背景 + video_player: ^2.10.0 # 启动页视频背景 # 工具 url_launcher: ^6.3.1 fancy_dio_inspector: ^2.0.1 cupertino_icons: ^1.0.8 android_id: - path: packages/android_id + git: + url: https://gitea.neuronlabs.art/third-party-project/flutter-packages.git + path: packages/android_id + ref: main android_oaid: - path: packages/android_oaid + git: + url: https://gitea.neuronlabs.art/third-party-project/flutter-packages.git + path: packages/android_oaid + ref: main flutter_paid: - path: packages/flutter_paid + git: + url: https://gitea.neuronlabs.art/third-party-project/flutter-packages.git + path: packages/flutter_paid + ref: main platform_metadata: git: - # 待合并git的请求 - # url: https://github.com/zhouyuzhouyu/platform_metadata.git - # ref: 3e3b6f5 - url: https://github.com/maoios/platform_metadata.git - ref: f381964 + url: https://gitea.neuronlabs.art/zhouyu/platform_metadata.git + ref: main flutter_dotenv: ^6.0.1 fluttertoast: ^9.0.0 - shorebird_code_push: ^2.0.3 + shorebird_code_push: ^2.0.6 flutter_html: ^3.0.0 diff --git a/test/common/privacy/privacy_gate_test.dart b/test/common/privacy/privacy_gate_test.dart new file mode 100644 index 0000000..4aa361e --- /dev/null +++ b/test/common/privacy/privacy_gate_test.dart @@ -0,0 +1,45 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:jinzhi_flutter_app/common/privacy/privacy_gate.dart'; + +void main() { + group('requiresAndroidPrivacyConsent', () { + test('requires consent only for an Android native app without consent', () { + expect( + requiresAndroidPrivacyConsent( + isWeb: false, + platform: TargetPlatform.android, + privacyAgreed: false, + ), + isTrue, + ); + }); + + test('does not block Android after consent or non-Android targets', () { + expect( + requiresAndroidPrivacyConsent( + isWeb: false, + platform: TargetPlatform.android, + privacyAgreed: true, + ), + isFalse, + ); + expect( + requiresAndroidPrivacyConsent( + isWeb: false, + platform: TargetPlatform.iOS, + privacyAgreed: false, + ), + isFalse, + ); + expect( + requiresAndroidPrivacyConsent( + isWeb: true, + platform: TargetPlatform.android, + privacyAgreed: false, + ), + isFalse, + ); + }); + }); +}