From bd6bb0ffcec3ac3b02d20b48877cc05ec4368a18 Mon Sep 17 00:00:00 2001 From: jingyun <> Date: Thu, 13 Aug 2026 17:17:52 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BC=98=E5=8C=96=E5=92=8C?= =?UTF-8?q?=E5=AF=B9=E9=BD=90=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 7 + android/app/files/jinzhi.jks | Bin 2728 -> 0 bytes android/app/src/debug/AndroidManifest.xml | 12 +- android/app/src/main/AndroidManifest.xml | 2 +- android/key.properties | 4 - assets/env/.env | 6 - lib/common/network/auth_interceptor.dart | 19 +- lib/common/network/dio_provider.dart | 11 +- lib/common/privacy/privacy_gate.dart | 9 + .../services/device_header_service.dart | 20 +- .../storage/secure_identity_storage.dart | 21 + packages/android_id/.gitattributes | 2 - packages/android_id/.github/dependabot.yml | 37 - .../workflows/flutter_build_example.yml | 34 - .../.github/workflows/flutter_checks.yml | 101 --- .../.github/workflows/pub_publish.yml | 18 - .../.github/workflows/pub_publish_dry_run.yml | 21 - .../.github/workflows/pub_score.yml | 32 - packages/android_id/.gitignore | 26 - packages/android_id/.metadata | 30 - packages/android_id/CHANGELOG.md | 103 --- packages/android_id/LICENSE | 29 - packages/android_id/README.md | 47 -- packages/android_id/analysis_options.yaml | 1 - packages/android_id/android/.gitignore | 9 - packages/android_id/android/build.gradle | 74 -- packages/android_id/android/settings.gradle | 1 - .../android/src/main/AndroidManifest.xml | 8 - .../android_id/AndroidIdPlugin.kt | 279 ------- packages/android_id/lib/android_id.dart | 58 -- packages/android_id/pubspec.yaml | 36 - packages/android_id/test/android_id_test.dart | 26 - packages/android_oaid/.gitignore | 26 - packages/android_oaid/CHANGELOG.md | 3 - packages/android_oaid/LICENSE | 29 - packages/android_oaid/README.md | 15 - packages/android_oaid/analysis_options.yaml | 1 - packages/android_oaid/android/.gitignore | 9 - packages/android_oaid/android/build.gradle | 74 -- packages/android_oaid/android/settings.gradle | 1 - .../android/src/main/AndroidManifest.xml | 5 - .../android_oaid/AndroidOaidPlugin.kt | 59 -- packages/android_oaid/lib/android_oaid.dart | 18 - packages/android_oaid/pubspec.yaml | 26 - .../android_oaid/test/android_id_test.dart | 26 - packages/flutter_paid/.gitignore | 29 - packages/flutter_paid/.metadata | 30 - packages/flutter_paid/CHANGELOG.md | 3 - packages/flutter_paid/LICENSE | 1 - packages/flutter_paid/README.md | 15 - packages/flutter_paid/analysis_options.yaml | 4 - packages/flutter_paid/example/.gitignore | 43 -- packages/flutter_paid/example/README.md | 16 - .../example/analysis_options.yaml | 28 - .../plugin_integration_test.dart | 25 - packages/flutter_paid/example/ios/.gitignore | 34 - .../ios/Flutter/AppFrameworkInfo.plist | 26 - .../example/ios/Flutter/Debug.xcconfig | 2 - .../example/ios/Flutter/Release.xcconfig | 2 - packages/flutter_paid/example/ios/Podfile | 41 - .../flutter_paid/example/ios/Podfile.lock | 28 - .../ios/Runner.xcodeproj/project.pbxproj | 704 ------------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 - .../xcshareddata/xcschemes/Runner.xcscheme | 98 --- .../contents.xcworkspacedata | 10 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 - .../example/ios/Runner/AppDelegate.h | 6 - .../example/ios/Runner/AppDelegate.m | 13 - .../AppIcon.appiconset/Contents.json | 122 --- .../Icon-App-1024x1024@1x.png | Bin 10932 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 295 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 406 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 450 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 282 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 462 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 704 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 406 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 586 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 862 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 862 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 1674 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 762 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 1226 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 1418 -> 0 bytes .../LaunchImage.imageset/Contents.json | 23 - .../LaunchImage.imageset/LaunchImage.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/README.md | 5 - .../Runner/Base.lproj/LaunchScreen.storyboard | 37 - .../ios/Runner/Base.lproj/Main.storyboard | 26 - .../example/ios/Runner/Info.plist | 49 -- .../flutter_paid/example/ios/Runner/main.m | 9 - .../example/ios/RunnerTests/RunnerTests.m | 33 - packages/flutter_paid/example/lib/main.dart | 72 -- packages/flutter_paid/example/pubspec.lock | 283 ------- packages/flutter_paid/example/pubspec.yaml | 85 --- .../example/test/widget_test.dart | 27 - packages/flutter_paid/ios/.gitignore | 38 - packages/flutter_paid/ios/Assets/.gitkeep | 0 .../ios/Classes/FlutterPaidPlugin.h | 4 - .../ios/Classes/FlutterPaidPlugin.m | 105 --- .../flutter_paid/ios/flutter_paid.podspec | 23 - packages/flutter_paid/lib/flutter_paid.dart | 11 - .../lib/flutter_paid_method_channel.dart | 23 - .../lib/flutter_paid_platform_interface.dart | 32 - packages/flutter_paid/pubspec.yaml | 69 -- .../flutter_paid_method_channel_test.dart | 27 - .../flutter_paid/test/flutter_paid_test.dart | 29 - pubspec.lock | 22 +- pubspec.yaml | 31 +- test/common/privacy/privacy_gate_test.dart | 45 ++ 115 files changed, 155 insertions(+), 3647 deletions(-) delete mode 100644 android/app/files/jinzhi.jks delete mode 100644 android/key.properties delete mode 100644 assets/env/.env create mode 100644 lib/common/privacy/privacy_gate.dart create mode 100644 lib/common/storage/secure_identity_storage.dart delete mode 100644 packages/android_id/.gitattributes delete mode 100644 packages/android_id/.github/dependabot.yml delete mode 100644 packages/android_id/.github/workflows/flutter_build_example.yml delete mode 100644 packages/android_id/.github/workflows/flutter_checks.yml delete mode 100644 packages/android_id/.github/workflows/pub_publish.yml delete mode 100644 packages/android_id/.github/workflows/pub_publish_dry_run.yml delete mode 100644 packages/android_id/.github/workflows/pub_score.yml delete mode 100644 packages/android_id/.gitignore delete mode 100644 packages/android_id/.metadata delete mode 100644 packages/android_id/CHANGELOG.md delete mode 100644 packages/android_id/LICENSE delete mode 100644 packages/android_id/README.md delete mode 100644 packages/android_id/analysis_options.yaml delete mode 100644 packages/android_id/android/.gitignore delete mode 100644 packages/android_id/android/build.gradle delete mode 100644 packages/android_id/android/settings.gradle delete mode 100644 packages/android_id/android/src/main/AndroidManifest.xml delete mode 100644 packages/android_id/android/src/main/kotlin/dev/fluttercommunity/android_id/AndroidIdPlugin.kt delete mode 100644 packages/android_id/lib/android_id.dart delete mode 100644 packages/android_id/pubspec.yaml delete mode 100644 packages/android_id/test/android_id_test.dart delete mode 100644 packages/android_oaid/.gitignore delete mode 100644 packages/android_oaid/CHANGELOG.md delete mode 100644 packages/android_oaid/LICENSE delete mode 100644 packages/android_oaid/README.md delete mode 100644 packages/android_oaid/analysis_options.yaml delete mode 100644 packages/android_oaid/android/.gitignore delete mode 100644 packages/android_oaid/android/build.gradle delete mode 100644 packages/android_oaid/android/settings.gradle delete mode 100644 packages/android_oaid/android/src/main/AndroidManifest.xml delete mode 100644 packages/android_oaid/android/src/main/kotlin/dev/fluttercommunity/android_oaid/AndroidOaidPlugin.kt delete mode 100644 packages/android_oaid/lib/android_oaid.dart delete mode 100644 packages/android_oaid/pubspec.yaml delete mode 100644 packages/android_oaid/test/android_id_test.dart delete mode 100644 packages/flutter_paid/.gitignore delete mode 100644 packages/flutter_paid/.metadata delete mode 100644 packages/flutter_paid/CHANGELOG.md delete mode 100644 packages/flutter_paid/LICENSE delete mode 100644 packages/flutter_paid/README.md delete mode 100644 packages/flutter_paid/analysis_options.yaml delete mode 100644 packages/flutter_paid/example/.gitignore delete mode 100644 packages/flutter_paid/example/README.md delete mode 100644 packages/flutter_paid/example/analysis_options.yaml delete mode 100644 packages/flutter_paid/example/integration_test/plugin_integration_test.dart delete mode 100644 packages/flutter_paid/example/ios/.gitignore delete mode 100644 packages/flutter_paid/example/ios/Flutter/AppFrameworkInfo.plist delete mode 100644 packages/flutter_paid/example/ios/Flutter/Debug.xcconfig delete mode 100644 packages/flutter_paid/example/ios/Flutter/Release.xcconfig delete mode 100644 packages/flutter_paid/example/ios/Podfile delete mode 100644 packages/flutter_paid/example/ios/Podfile.lock delete mode 100644 packages/flutter_paid/example/ios/Runner.xcodeproj/project.pbxproj delete mode 100644 packages/flutter_paid/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 packages/flutter_paid/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 packages/flutter_paid/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 packages/flutter_paid/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme delete mode 100644 packages/flutter_paid/example/ios/Runner.xcworkspace/contents.xcworkspacedata delete mode 100644 packages/flutter_paid/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 packages/flutter_paid/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 packages/flutter_paid/example/ios/Runner/AppDelegate.h delete mode 100644 packages/flutter_paid/example/ios/Runner/AppDelegate.m delete mode 100644 packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png delete mode 100644 packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png delete mode 100644 packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png delete mode 100644 packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png delete mode 100644 packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png delete mode 100644 packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png delete mode 100644 packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png delete mode 100644 packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png delete mode 100644 packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png delete mode 100644 packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png delete mode 100644 packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png delete mode 100644 packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png delete mode 100644 packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png delete mode 100644 packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png delete mode 100644 packages/flutter_paid/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png delete mode 100644 packages/flutter_paid/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json delete mode 100644 packages/flutter_paid/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png delete mode 100644 packages/flutter_paid/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png delete mode 100644 packages/flutter_paid/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png delete mode 100644 packages/flutter_paid/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md delete mode 100644 packages/flutter_paid/example/ios/Runner/Base.lproj/LaunchScreen.storyboard delete mode 100644 packages/flutter_paid/example/ios/Runner/Base.lproj/Main.storyboard delete mode 100644 packages/flutter_paid/example/ios/Runner/Info.plist delete mode 100644 packages/flutter_paid/example/ios/Runner/main.m delete mode 100644 packages/flutter_paid/example/ios/RunnerTests/RunnerTests.m delete mode 100644 packages/flutter_paid/example/lib/main.dart delete mode 100644 packages/flutter_paid/example/pubspec.lock delete mode 100644 packages/flutter_paid/example/pubspec.yaml delete mode 100644 packages/flutter_paid/example/test/widget_test.dart delete mode 100644 packages/flutter_paid/ios/.gitignore delete mode 100644 packages/flutter_paid/ios/Assets/.gitkeep delete mode 100644 packages/flutter_paid/ios/Classes/FlutterPaidPlugin.h delete mode 100644 packages/flutter_paid/ios/Classes/FlutterPaidPlugin.m delete mode 100644 packages/flutter_paid/ios/flutter_paid.podspec delete mode 100644 packages/flutter_paid/lib/flutter_paid.dart delete mode 100644 packages/flutter_paid/lib/flutter_paid_method_channel.dart delete mode 100644 packages/flutter_paid/lib/flutter_paid_platform_interface.dart delete mode 100644 packages/flutter_paid/pubspec.yaml delete mode 100644 packages/flutter_paid/test/flutter_paid_method_channel_test.dart delete mode 100644 packages/flutter_paid/test/flutter_paid_test.dart create mode 100644 test/common/privacy/privacy_gate_test.dart 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 22af8aa5c3e54c1f9f2e3e842751fbd33fbce061..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2728 zcma);X*d*$8pmhGY=&VNOOZWGDP}PCv5Y;k9EAyyEDerzL}Z&ITZzb0LrRD&N4AhN z7zx9O$i9xUWXVz_Nf*w;KdOx8y#`Bj0g2WIp z>i>+K7A2N`_@GCsiz^)Y30DHmE%fI1B1$2pGhj} z<#Ws(P>wFk)<&pa3(tDFPw{FF(+!TQsztBUmxlbK zSdI#B^F*&w7YV2$U6JjBpT)Q@QlX$}@ostQpYRDY-Qu$aIhR~WzCoYVn#xvoj&lzb znmOF6d_LuvOmPDef>A;Y%$&d`2CXkRozaddi#3z2Au>EzOnyKA`?cX!vvK zMBrWF(@b8S&a&lfJHuh)B&nL+J)%}|(#8z&!13aRhx_7sPh$D^(pTQ(Y;3BITF78! zNz%H#`Y(1)_;4sao5~~Kv^=rJItP6C4WqENP`HQ(2~RuDnbgOs^@5wJijBh$teTQ>j#m8%~!l?`0H?0%s zj!`bj#q`_u1|0g;pxCdh1(g@JfPu2NLtP#+3)8Bhi&}RVjfy(=agPWs{l~8H-Ma;8 zc=$bpS|w=E9(Dff$;i)b<8v?0VPC`s*+f1%WY<70*A`~!?5Ln#`(lFO=JjMcZk6i9 zIE>OkO0@M^Y;IhJ@b}@+#zt3Zs1#`xrLqwG@^G!7E}|j^=ILBL4H^*_dLpf5z%Yb{ z^bdF+FwaH6I=Fws;47GHb>FKMh8UWNR?$+M@nhM|j(ZtaCpl5y=?jFyXYA>BDnd%S z$JBT|y%ZmA8FW3ac<)Sf`ztlPdf`SL(V%#Z?Jj6>VxahGAzd_6wTnPF-WGL@(`HK& ztXfZyqPLXREA>Esun1Kk%c`AVJUuJMOD}ixw=EFh_4PsP#&TiX>RM^Zm}|G_Qm&R&((7po+O$bnSPpj{ zNshy^fJSh^=gmkq-}?%0wl}Vnv6LOTCpw4B?suAMv#L1_E2U?cdz%Ey^oxO#qgKos zYJGh9*sKDSB=Q~3I)vM#kK^owpqTZc^E;gsu-vW+IhlogEJpS2U`#U(o*mP?cq;0+)F`~cyAYXA~P;vbP8%LnGYK>FQ79IK{|Ra3=jDB-Xw z7z_m*`)dgXeM|ud{X~8sAmC^7`bPo&ub4LJ$Gjsb{8-U<}c(;LP1boo>@uTj04o}Ko+ZL`@*sjV+FP^65*Cz0RfJ9~@FWrr^Z z2pJiG$xP0EZu(wp;?Hm8t&Q1>H$nt1HK1LBCZTNKa(9XptO_{AUqw66Ep?CEaDlLNRIe;AT zB~q;62`%rw-b!tZBjoKB=Z4BFcmS+pIt_BqET$NL3GVDVi@0819N~E?3jT7`1UthKc3#+~qd)o3@n-@6R!$v? zc2`qpu7w76h-dJxwocStyi}0ZP@UTo)N4-v(ouJPBGCFWfZFW=rpYI8_)C%+@?)R8 z4K8tBc&)zjId9($0#|?Id`b>>i{M*qVbk<+HNse9a!4fU{%Or!i>jT_ft@h_u!>oB zvSp%%0{U>@c9HkT&sX6Zm-o`Cgmf$Hwy|6muSf#UOuuZy+E902aRj zazYIfb{n2`Szk;f*G6y@b&CBp*2p{s^obUkt9cIQo7v~A(OzA8zH^QGqu`>eE<&qS I|6h^wH|CGcDF6Tf 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 dc9ada4725e9b0ddb1deab583e5b5102493aa332..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10932 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 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 797d452e458972bab9d994556c8305db4c827017..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 406 zcmV;H0crk;P))>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c 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 6ed2d933e1120817fe9182483a228007b18ab6ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 450 zcmV;z0X_bSP)iGWQ_5NJQ_~rNh*z)}eT%KUb z`7gNk0#AwF^#0T0?hIa^`~Ck;!}#m+_uT050aTR(J!bU#|IzRL%^UsMS#KsYnTF*!YeDOytlP4VhV?b} z%rz_<=#CPc)tU1MZTq~*2=8~iZ!lSa<{9b@2Jl;?IEV8)=fG217*|@)CCYgFze-x? zIFODUIA>nWKpE+bn~n7;-89sa>#DR>TSlqWk*!2hSN6D~Qb#VqbP~4Fk&m`@1$JGr zXPIdeRE&b2Thd#{MtDK$px*d3-Wx``>!oimf%|A-&-q*6KAH)e$3|6JV%HX{Hig)k suLT-RhftRq8b9;(V=235Wa|I=027H2wCDra;{X5v07*qoM6N<$f;9x^2LJ#7 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 4cd7b0099ca80c806f8fe495613e8d6c69460d76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmV+#0p(^bcu7P-R4C8Q z&e;xxFbF_Vrezo%_kH*OKhshZ6BFpG-Y1e10`QXJKbND7AMQ&cMj60B5TNObaZxYybcN07*qoM6N<$g3m;S%K!iX 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 fe730945a01f64a61e2235dbe3f45b08f7729182..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 462 zcmV;<0WtoGP)-}iV`2<;=$?g5M=KQbZ{F&YRNy7Nn@%_*5{gvDM0aKI4?ESmw z{NnZg)A0R`+4?NF_RZexyVB&^^ZvN!{I28tr{Vje;QNTz`dG&Jz0~Ek&f2;*Z7>B|cg}xYpxEFY+0YrKLF;^Q+-HreN0P{&i zK~zY`?b7ECf-n?@;d<&orQ*Q7KoR%4|C>{W^h6@&01>0SKS`dn{Q}GT%Qj_{PLZ_& zs`MFI#j-(>?bvdZ!8^xTwlY{qA)T4QLbY@j(!YJ7aXJervHy6HaG_2SB`6CC{He}f zHVw(fJWApwPq!6VY7r1w-Fs)@ox~N+q|w~e;JI~C4Vf^@d>Wvj=fl`^u9x9wd9 zR%3*Q+)t%S!MU_`id^@&Y{y7-r98lZX0?YrHlfmwb?#}^1b{8g&KzmkE(L>Z&)179 zp<)v6Y}pRl100G2FL_t(o!|l{-Q-VMg#&MKg7c{O0 z2wJImOS3Gy*Z2Qifdv~JYOp;v+U)a|nLoc7hNH;I$;lzDt$}rkaFw1mYK5_0Q(Sut zvbEloxON7$+HSOgC9Z8ltuC&0OSF!-mXv5caV>#bc3@hBPX@I$58-z}(ZZE!t-aOG zpjNkbau@>yEzH(5Yj4kZiMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_st8pKG z(%SHyHdU&v%f36~uERh!bd`!T2dw;z6PrOTQ7Vt*#9F2uHlUVnb#ev_o^fh}Dzmq} zWtlk35}k=?xj28uO|5>>$yXadTUE@@IPpgH`gJ~Ro4>jd1IF|(+IX>8M4Ps{PNvmI zNj4D+XgN83gPt_Gm}`Ybv{;+&yu-C(Grdiahmo~BjG-l&mWM+{e5M1sm&=xduwgM9 z`8OEh`=F3r`^E{n_;%9weN{cf2%7=VzC@cYj+lg>+3|D|_1C@{hcU(DyQG_BvBWe? zvTv``=%b1zrol#=R`JB)>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c 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 502f463a9bc882b461c96aadf492d1729e49e725..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 586 zcmV-Q0=4~#P)+}#`wDE{8-2Mebf5<{{PqV{TgVcv*r8?UZ3{-|G?_}T*&y;@cqf{ z{Q*~+qr%%p!1pS*_Uicl#q9lc(D`!D`LN62sNwq{oYw(Wmhk)k<@f$!$@ng~_5)Ru z0Z)trIA5^j{DIW^c+vT2%lW+2<(RtE2wR;4O@)Tm`Xr*?A(qYoM}7i5Yxw>D(&6ou zxz!_Xr~yNF+waPe00049Nkl*;a!v6h%{rlvIH#gW3s8p;bFr=l}mRqpW2h zw=OA%hdyL~z+UHOzl0eKhEr$YYOL-c-%Y<)=j?(bzDweB7{b+%_ypvm_cG{SvM=DK zhv{K@m>#Bw>2W$eUI#iU)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G! zhkE!s;%oku3;IwG3U^2kw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn`0X*2 zy3(k600_CSZj?O$Qu%&$;|TGUJrptR(HzyIx>5E(2r{eA(<6t3e3I0B)7d6s7?Z5J zZ!rtKvA{MiEBm&KFtoifx>5P^Z=vl)95XJn()aS5%ad(s?4-=Tkis9IGu{`Fy8r+H07*qoM6N<$f20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU 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 0ec303439225b78712f49115768196d8d76f6790..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 862 zcmV-k1EKthP)20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU 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 e9f5fea27c705180eb716271f41b582e76dcbd90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1674 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 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 0467bf12aa4d28f374bb26596605a46dcbb3e7c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H 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 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v 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 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v 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 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v 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, + ); + }); + }); +}