diff --git a/.github/workflows/analyze-test.yaml b/.github/workflows/analyze-test.yaml new file mode 100644 index 000000000..749e9a457 --- /dev/null +++ b/.github/workflows/analyze-test.yaml @@ -0,0 +1,73 @@ +on: + workflow_call: + +name: Analyze and test + +jobs: + analyze-test: + runs-on: ubuntu-latest + strategy: + matrix: + modules: + - default + - core + - model + - contact + - forward + - rule_filter + fail-fast: false + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Setup flutter + uses: subosito/flutter-action@v2 + with: + flutter-version: "3.0.5" + channel: "stable" + cache: true + cache-key: "deps-${{ hashFiles('pubspec.lock') }}" + cache-path: ${{ runner.tool_cache }}/flutter # optional, change this to specify the cache path + + - name: Run prebuild + run: bash prebuild.sh + + - name: Analyze + uses: zgosalvez/github-actions-analyze-dart@v1 + with: + analysis-options-file: "placeholder" + + - name: Test + run: | + if [[ "${{ matrix.modules }}" == "default" ]]; then + flutter test -r json > test-report-${{ matrix.modules }}.json + else + flutter test -r json ${{ matrix.modules }} > test-report-${{ matrix.modules }}.json + fi + + - name: Upload test reports + if: success() || failure() # Always upload report + uses: actions/upload-artifact@v3 + with: + name: test-reports + path: test-report*.json + + report: + runs-on: ubuntu-latest + if: success() || failure() # Always upload report + needs: + - analyze-test + steps: + - uses: actions/checkout@v3 + + - uses: actions/download-artifact@v3 + with: + name: test-reports + + - uses: dorny/test-reporter@v1 + with: + name: Flutter Tests + path: "*.json" + reporter: flutter-json + only-summary: "true" diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 000000000..9f7e43854 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,94 @@ +on: + pull_request: + paths-ignore: + - ".github/**" + +name: CI + +jobs: + analyze-test: + name: Analyze and test + uses: ./.github/workflows/analyze-test.yaml + + build-app: + name: Build app + needs: + - analyze-test + runs-on: macos-latest + strategy: + matrix: + os: + - android + - ios + environment: dev + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Setup flutter + uses: subosito/flutter-action@v2 + with: + flutter-version: "3.0.5" + channel: "stable" + cache: true + cache-key: deps-${{ hashFiles('pubspec.lock') }} # optional, change this to force refresh cache + cache-path: ${{ runner.tool_cache }}/flutter # optional, change this to specify the cache path + + - name: Setup Android environment + if: matrix.os == 'android' + env: + # GOOGLE_SERVICES_JSON: ${{ secrets.GOOGLE_SERVICES_JSON }} + PLAY_STORE_UPLOAD_KEY_BASE64: ${{ secrets.PLAY_STORE_UPLOAD_KEY_BASE64 }} + PLAY_STORE_KEY_INFO_BASE64: ${{ secrets.PLAY_STORE_KEY_INFO_BASE64 }} + run: | + # echo "$GOOGLE_SERVICES_JSON" > app/google-services.json + echo "$PLAY_STORE_UPLOAD_KEY_BASE64" | base64 --decode --output app/keystore.jks + echo "$PLAY_STORE_KEY_INFO_BASE64" | base64 --decode --output key.properties + working-directory: ${{ matrix.os }} + + - name: Setup Java + if: matrix.os == 'android' + uses: actions/setup-java@v3 + with: + distribution: "temurin" + java-version: "11" + + - name: Setup iOS environment + if: matrix.os == 'ios' + env: + # GOOGLE_SERVICES_PLIST: ${{ secrets.GOOGLE_SERVICES_PLIST }} + CERTIFICATE_BASE64: ${{ secrets.CERTIFICATE_BASE64 }} + PROVISION_PROFILE_BASE64: ${{ secrets.PROVISION_PROFILE_BASE64 }} + SHAREEXT_PROVISION_PROFILE_BASE64: ${{ secrets.SHAREEXT_PROVISION_PROFILE_BASE64 }} + run: | + # echo -n "$GOOGLE_SERVICES_PLIST" > Runner/GoogleService-Info.plist + echo -n "$CERTIFICATE_BASE64" | base64 --decode --output cert.p12 + echo -n "$PROVISION_PROFILE_BASE64" | base64 --decode --output buildpp.mobileprovision + echo -n "$SHAREEXT_PROVISION_PROFILE_BASE64" | base64 --decode --output shareextpp.mobileprovision + flutter pub get && pod install + working-directory: ${{ matrix.os }} + + - name: Setup Fastlane + uses: ruby/setup-ruby@v1 + with: + ruby-version: "ruby" + bundler-cache: true + working-directory: ${{ matrix.os }} + + - name: Run prebuild + run: bash prebuild.sh + + - name: Build + env: + CERTIFICATE_PASSWORD: ${{ secrets.CERTIFICATE_PASSWORD }} + run: bundle exec fastlane dev + working-directory: ${{ matrix.os }} + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + name: tmail-dev-pr-${{ github.event.pull_request.number }} + path: | + build/app/outputs/flutter-apk/app-release.apk + ios/Runner.ipa diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml new file mode 100644 index 000000000..b9904caf4 --- /dev/null +++ b/.github/workflows/deploy.yaml @@ -0,0 +1,94 @@ +on: + push: + branches: + - "release" + tags: + - "v*.*.*" + +name: Release + +jobs: + analyze-test: + name: Analyze and test + uses: ./.github/workflows/analyze-test.yaml + + release: + name: Release + if: startsWith(github.ref, 'refs/tags/v') + needs: + - analyze-test + runs-on: macos-latest + strategy: + matrix: + os: + - android + - ios + environment: prod + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + with: + ref: "release" + fetch-depth: 0 + + - name: Setup flutter + uses: subosito/flutter-action@v2 + with: + flutter-version: "3.0.5" + channel: "stable" + cache: true + cache-key: deps-${{ hashFiles('pubspec.lock') }} # optional, change this to force refresh cache + cache-path: ${{ runner.tool_cache }}/flutter # optional, change this to specify the cache path + + - name: Setup Android environment + if: matrix.os == 'android' + env: + PLAY_STORE_UPLOAD_KEY_BASE64: ${{ secrets.PLAY_STORE_UPLOAD_KEY_BASE64 }} + PLAY_STORE_KEY_INFO_BASE64: ${{ secrets.PLAY_STORE_KEY_INFO_BASE64 }} + run: | + echo "$PLAY_STORE_UPLOAD_KEY_BASE64" | base64 --decode --output app/keystore.jks + echo "$PLAY_STORE_KEY_INFO_BASE64" | base64 --decode --output key.properties + working-directory: ${{ matrix.os }} + + - name: Setup Java + if: matrix.os == 'android' + uses: actions/setup-java@v3 + with: + distribution: "temurin" + java-version: "11" + + - name: Setup iOS environment + if: matrix.os == 'ios' + env: + CERTIFICATE_BASE64: ${{ secrets.CERTIFICATE_BASE64 }} + PROVISION_PROFILE_BASE64: ${{ secrets.PROVISION_PROFILE_BASE64 }} + SHAREEXT_PROVISION_PROFILE_BASE64: ${{ secrets.SHAREEXT_PROVISION_PROFILE_BASE64 }} + APPLE_API_KEY_BASE64: ${{ secrets.APPLE_API_KEY_BASE64 }} + run: | + echo -n "$CERTIFICATE_BASE64" | base64 --decode --output cert.p12 + echo -n "$PROVISION_PROFILE_BASE64" | base64 --decode --output buildpp.mobileprovision + echo -n "$SHAREEXT_PROVISION_PROFILE_BASE64" | base64 --decode --output shareextpp.mobileprovision + echo -n "$APPLE_API_KEY_BASE64" | base64 --decode --output apiKey.p8 + flutter pub get && pod install + working-directory: ${{ matrix.os }} + + - name: Setup Fastlane + uses: ruby/setup-ruby@v1 + with: + ruby-version: "ruby" + bundler-cache: true + working-directory: ${{ matrix.os }} + + - name: Run prebuild + run: bash prebuild.sh + + - name: Build and deploy + env: + CERTIFICATE_PASSWORD: ${{ secrets.CERTIFICATE_PASSWORD }} + FASTLANE_USER: ${{ secrets.APPLE_ID }} + PLAY_STORE_CONFIG_JSON: ${{ secrets.PLAY_STORE_CONFIG_JSON }} + APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }} + APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }} + run: bundle exec fastlane release + working-directory: ${{ matrix.os }} diff --git a/.gitignore b/.gitignore index f1f603da2..b475f4f6a 100644 --- a/.gitignore +++ b/.gitignore @@ -113,7 +113,9 @@ app.*.symbols !**/ios/**/default.perspectivev3 !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages !/dev/ci/**/Gemfile.lock +!**/pubspec.lock +!**/Podfile.lock #generated file *.g.dart -messages_*.dart \ No newline at end of file +messages_*.dart diff --git a/android/Gemfile b/android/Gemfile new file mode 100644 index 000000000..7a118b49b --- /dev/null +++ b/android/Gemfile @@ -0,0 +1,3 @@ +source "https://rubygems.org" + +gem "fastlane" diff --git a/android/app/build.gradle b/android/app/build.gradle index 4bdfad779..c187feb14 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -25,6 +25,12 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" +def keystoreProperties = new Properties() +def keystorePropertiesFile = rootProject.file('key.properties') +if (keystorePropertiesFile.exists()) { + keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) +} + android { compileSdkVersion 32 @@ -45,11 +51,20 @@ android { ] } + // Use key information file + signingConfigs { + release { + keyAlias keystoreProperties['keyAlias'] + keyPassword keystoreProperties['keyPassword'] + storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null + storePassword keystoreProperties['storePassword'] + } + } buildTypes { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug + signingConfig signingConfigs.release } } } diff --git a/android/fastlane/Appfile b/android/fastlane/Appfile new file mode 100644 index 000000000..6b55c414d --- /dev/null +++ b/android/fastlane/Appfile @@ -0,0 +1 @@ +package_name("com.linagora.android.teammail") # e.g. com.krausefx.app diff --git a/android/fastlane/Fastfile b/android/fastlane/Fastfile new file mode 100644 index 000000000..81212ccfd --- /dev/null +++ b/android/fastlane/Fastfile @@ -0,0 +1,41 @@ +# This file contains the fastlane.tools configuration +# You can find the documentation at https://docs.fastlane.tools +# +# For a list of all available actions, check out +# +# https://docs.fastlane.tools/actions +# +# For a list of all available plugins, check out +# +# https://docs.fastlane.tools/plugins/available-plugins +# + +# Uncomment the line if you want fastlane to automatically update itself +# update_fastlane +# + +opt_out_usage # Opt out of telemetry +default_platform(:android) + +platform :android do + desc "Build development version" + lane :dev do + sh "flutter build apk --verbose --release --dart-define=SERVER_URL=$SERVER_URL" + end + + desc "Build and deploy release version" + lane :release do + track = "alpha" + latest_build_number = google_play_track_version_codes( + track: track, + json_key_data: ENV["PLAY_STORE_CONFIG_JSON"] + )[0].to_i + build_name = last_git_tag.gsub("v", "") + sh "flutter build appbundle --verbose --release --dart-define=SERVER_URL=$SERVER_URL --build-number=#{latest_build_number+1} --build-name=#{build_name}" + upload_to_play_store( + json_key_data: ENV["PLAY_STORE_CONFIG_JSON"], + track: track, + aab: "../build/app/outputs/bundle/release/app-release.aab", + ) + end +end diff --git a/ios/Gemfile b/ios/Gemfile new file mode 100644 index 000000000..7a118b49b --- /dev/null +++ b/ios/Gemfile @@ -0,0 +1,3 @@ +source "https://rubygems.org" + +gem "fastlane" diff --git a/ios/Podfile.lock b/ios/Podfile.lock new file mode 100644 index 000000000..3ef56b7bf --- /dev/null +++ b/ios/Podfile.lock @@ -0,0 +1,249 @@ +PODS: + - AppAuth (1.4.0): + - AppAuth/Core (= 1.4.0) + - AppAuth/ExternalUserAgent (= 1.4.0) + - AppAuth/Core (1.4.0) + - AppAuth/ExternalUserAgent (1.4.0) + - better_open_file (0.0.1): + - Flutter + - connectivity_plus (0.0.1): + - Flutter + - ReachabilitySwift + - contacts_service (0.2.2): + - Flutter + - device_info_plus (0.0.1): + - Flutter + - DKImagePickerController/Core (4.3.4): + - DKImagePickerController/ImageDataManager + - DKImagePickerController/Resource + - DKImagePickerController/ImageDataManager (4.3.4) + - DKImagePickerController/PhotoGallery (4.3.4): + - DKImagePickerController/Core + - DKPhotoGallery + - DKImagePickerController/Resource (4.3.4) + - DKPhotoGallery (0.0.17): + - DKPhotoGallery/Core (= 0.0.17) + - DKPhotoGallery/Model (= 0.0.17) + - DKPhotoGallery/Preview (= 0.0.17) + - DKPhotoGallery/Resource (= 0.0.17) + - SDWebImage + - SwiftyGif + - DKPhotoGallery/Core (0.0.17): + - DKPhotoGallery/Model + - DKPhotoGallery/Preview + - SDWebImage + - SwiftyGif + - DKPhotoGallery/Model (0.0.17): + - SDWebImage + - SwiftyGif + - DKPhotoGallery/Preview (0.0.17): + - DKPhotoGallery/Model + - DKPhotoGallery/Resource + - SDWebImage + - SwiftyGif + - DKPhotoGallery/Resource (0.0.17): + - SDWebImage + - SwiftyGif + - file_picker (0.0.1): + - DKImagePickerController/PhotoGallery + - Flutter + - fk_user_agent (2.0.0): + - Flutter + - Flutter (1.0.0) + - flutter_appauth (0.0.1): + - AppAuth (= 1.4.0) + - Flutter + - flutter_downloader (0.0.1): + - Flutter + - flutter_image_compress (0.0.1): + - Flutter + - Mantle + - SDWebImage + - SDWebImageWebPCoder + - flutter_inappwebview (0.0.1): + - Flutter + - flutter_inappwebview/Core (= 0.0.1) + - OrderedSet (~> 5.0) + - flutter_inappwebview/Core (0.0.1): + - Flutter + - OrderedSet (~> 5.0) + - flutter_keyboard_visibility (0.0.1): + - Flutter + - flutter_native_splash (0.0.1): + - Flutter + - fluttertoast (0.0.2): + - Flutter + - Toast + - FMDB (2.7.5): + - FMDB/standard (= 2.7.5) + - FMDB/standard (2.7.5) + - libwebp (1.2.3): + - libwebp/demux (= 1.2.3) + - libwebp/mux (= 1.2.3) + - libwebp/webp (= 1.2.3) + - libwebp/demux (1.2.3): + - libwebp/webp + - libwebp/mux (1.2.3): + - libwebp/demux + - libwebp/webp (1.2.3) + - Mantle (2.2.0): + - Mantle/extobjc (= 2.2.0) + - Mantle/extobjc (2.2.0) + - OrderedSet (5.0.0) + - package_info_plus (0.4.5): + - Flutter + - path_provider (0.0.1): + - Flutter + - permission_handler_apple (9.0.4): + - Flutter + - ReachabilitySwift (5.0.0) + - receive_sharing_intent (0.0.1): + - Flutter + - SDWebImage (5.13.3): + - SDWebImage/Core (= 5.13.3) + - SDWebImage/Core (5.13.3) + - SDWebImageWebPCoder (0.9.1): + - libwebp (~> 1.0) + - SDWebImage/Core (~> 5.13) + - share (0.0.1): + - Flutter + - shared_preferences (0.0.1): + - Flutter + - sqflite (0.0.2): + - Flutter + - FMDB (>= 2.7.5) + - SwiftyGif (5.4.3) + - Toast (4.0.0) + - url_launcher_ios (0.0.1): + - Flutter + - webview_flutter_wkwebview (0.0.1): + - Flutter + +DEPENDENCIES: + - better_open_file (from `.symlinks/plugins/better_open_file/ios`) + - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`) + - contacts_service (from `.symlinks/plugins/contacts_service/ios`) + - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) + - file_picker (from `.symlinks/plugins/file_picker/ios`) + - fk_user_agent (from `.symlinks/plugins/fk_user_agent/ios`) + - Flutter (from `Flutter`) + - flutter_appauth (from `.symlinks/plugins/flutter_appauth/ios`) + - flutter_downloader (from `.symlinks/plugins/flutter_downloader/ios`) + - flutter_image_compress (from `.symlinks/plugins/flutter_image_compress/ios`) + - flutter_inappwebview (from `.symlinks/plugins/flutter_inappwebview/ios`) + - flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`) + - flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`) + - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) + - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) + - path_provider (from `.symlinks/plugins/path_provider/ios`) + - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) + - receive_sharing_intent (from `.symlinks/plugins/receive_sharing_intent/ios`) + - share (from `.symlinks/plugins/share/ios`) + - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`) + - sqflite (from `.symlinks/plugins/sqflite/ios`) + - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) + - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`) + +SPEC REPOS: + trunk: + - AppAuth + - DKImagePickerController + - DKPhotoGallery + - FMDB + - libwebp + - Mantle + - OrderedSet + - ReachabilitySwift + - SDWebImage + - SDWebImageWebPCoder + - SwiftyGif + - Toast + +EXTERNAL SOURCES: + better_open_file: + :path: ".symlinks/plugins/better_open_file/ios" + connectivity_plus: + :path: ".symlinks/plugins/connectivity_plus/ios" + contacts_service: + :path: ".symlinks/plugins/contacts_service/ios" + device_info_plus: + :path: ".symlinks/plugins/device_info_plus/ios" + file_picker: + :path: ".symlinks/plugins/file_picker/ios" + fk_user_agent: + :path: ".symlinks/plugins/fk_user_agent/ios" + Flutter: + :path: Flutter + flutter_appauth: + :path: ".symlinks/plugins/flutter_appauth/ios" + flutter_downloader: + :path: ".symlinks/plugins/flutter_downloader/ios" + flutter_image_compress: + :path: ".symlinks/plugins/flutter_image_compress/ios" + flutter_inappwebview: + :path: ".symlinks/plugins/flutter_inappwebview/ios" + flutter_keyboard_visibility: + :path: ".symlinks/plugins/flutter_keyboard_visibility/ios" + flutter_native_splash: + :path: ".symlinks/plugins/flutter_native_splash/ios" + fluttertoast: + :path: ".symlinks/plugins/fluttertoast/ios" + package_info_plus: + :path: ".symlinks/plugins/package_info_plus/ios" + path_provider: + :path: ".symlinks/plugins/path_provider/ios" + permission_handler_apple: + :path: ".symlinks/plugins/permission_handler_apple/ios" + receive_sharing_intent: + :path: ".symlinks/plugins/receive_sharing_intent/ios" + share: + :path: ".symlinks/plugins/share/ios" + shared_preferences: + :path: ".symlinks/plugins/shared_preferences/ios" + sqflite: + :path: ".symlinks/plugins/sqflite/ios" + url_launcher_ios: + :path: ".symlinks/plugins/url_launcher_ios/ios" + webview_flutter_wkwebview: + :path: ".symlinks/plugins/webview_flutter_wkwebview/ios" + +SPEC CHECKSUMS: + AppAuth: 31bcec809a638d7bd2f86ea8a52bd45f6e81e7c7 + better_open_file: 03cf320415d4d3f46b6e00adc4a567d76c1a399d + connectivity_plus: 413a8857dd5d9f1c399a39130850d02fe0feaf7e + contacts_service: 849e1f84281804c8bfbec1b4c3eedcb23c5d3eca + device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed + DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac + DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179 + file_picker: 817ab1d8cd2da9d2da412a417162deee3500fc95 + fk_user_agent: 1f47ec39291e8372b1d692b50084b0d54103c545 + Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a + flutter_appauth: 05c3778a1e4ae23364dd2ef37cbae14b244f646b + flutter_downloader: 058b9c41564a90500f67f3e432e3524613a7fd83 + flutter_image_compress: fd2b476345226e1a10ea352fa306af95704642c1 + flutter_inappwebview: bfd58618f49dc62f2676de690fc6dcda1d6c3721 + flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069 + flutter_native_splash: 52501b97d1c0a5f898d687f1646226c1f93c56ef + fluttertoast: 6122fa75143e992b1d3470f61000f591a798cc58 + FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a + libwebp: 60305b2e989864154bd9be3d772730f08fc6a59c + Mantle: c5aa8794a29a022dfbbfc9799af95f477a69b62d + OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c + package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e + path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c + permission_handler_apple: 44366e37eaf29454a1e7b1b7d736c2cceaeb17ce + ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 + receive_sharing_intent: c0d87310754e74c0f9542947e7cbdf3a0335a3b1 + SDWebImage: af5bbffef2cde09f148d826f9733dcde1a9414cd + SDWebImageWebPCoder: 18503de6621dd2c420d680e33d46bf8e1d5169b0 + share: 0b2c3e82132f5888bccca3351c504d0003b3b410 + shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d + sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904 + SwiftyGif: 6c3eafd0ce693cad58bb63d2b2fb9bacb8552780 + Toast: 91b396c56ee72a5790816f40d3a94dd357abc196 + url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de + webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f + +PODFILE CHECKSUM: 91efd4097cc41f032416d67ecaac21cc2de8dd55 + +COCOAPODS: 1.11.3 diff --git a/ios/fastlane/Appfile b/ios/fastlane/Appfile new file mode 100644 index 000000000..1626f066c --- /dev/null +++ b/ios/fastlane/Appfile @@ -0,0 +1,5 @@ +app_identifier("com.linagora.ios.teammail") # The bundle identifier of your app + + +# For more information about the Appfile, see: +# https://docs.fastlane.tools/advanced/#appfile diff --git a/ios/fastlane/Fastfile b/ios/fastlane/Fastfile new file mode 100644 index 000000000..b9c0a0cba --- /dev/null +++ b/ios/fastlane/Fastfile @@ -0,0 +1,110 @@ +# This file contains the fastlane.tools configuration +# You can find the documentation at https://docs.fastlane.tools +# +# For a list of all available actions, check out +# +# https://docs.fastlane.tools/actions +# +# For a list of all available plugins, check out +# +# https://docs.fastlane.tools/plugins/available-plugins +# + +# Uncomment the line if you want fastlane to automatically update itself +# update_fastlane + +opt_out_usage +default_platform(:ios) +setup_ci if ENV['CI'] + +# Import signing certificate +import_certificate( + certificate_path: "cert.p12", + certificate_password: ENV["CERTIFICATE_PASSWORD"], + keychain_name: ENV["MATCH_KEYCHAIN_NAME"] +) + +# 2 provisioning profiles, 1 for the main app and 1 for the share extension +install_provisioning_profile(path: "buildpp.mobileprovision") +install_provisioning_profile(path: "shareextpp.mobileprovision") + + +platform :ios do + desc "Build development version" + lane :dev do + update_code_signing_settings( + use_automatic_signing: false, + path: "Runner.xcodeproj", + code_sign_identity: "Apple Development" + ) + # Update the provisioning profile for both the main app and extension + update_project_provisioning( + xcodeproj: "Runner.xcodeproj", + profile: "./buildpp.mobileprovision", + target_filter: ".*Runner.*" + ) + update_project_provisioning( + xcodeproj: "Runner.xcodeproj", + profile: "./shareextpp.mobileprovision", + target_filter: ".*TeamMailShareExtension.*" + ) + build_app( + scheme: "Runner", + workspace: "Runner.xcworkspace", + export_method: "development", + export_options: { + provisioningProfiles: { + "com.linagora.ios.teammail": "tmail.development.profile", + "com.linagora.ios.teammail.TeamMailShareExtension": "tmail.ext.ios.development.provisioning.profile" + } + } + ) + end + + desc "Build and deploy release version" + lane :release do + # App Store Connect API setup + app_store_connect_api_key( + key_id: ENV["APPLE_KEY_ID"], + issuer_id: ENV["APPLE_ISSUER_ID"], + key_filepath: "./apiKey.p8" + ) + increment_build_number( + build_number: latest_testflight_build_number + 1 + ) + increment_version_number( + version_number: last_git_tag.gsub("v", "") + ) + update_code_signing_settings( + use_automatic_signing: false, + path: "Runner.xcodeproj", + code_sign_identity: "Apple Distribution" + ) + # Update the provisioning profile for both the main app and extension + update_project_provisioning( + xcodeproj: "Runner.xcodeproj", + profile: "./buildpp.mobileprovision", + target_filter: ".*Runner.*" + ) + update_project_provisioning( + xcodeproj: "Runner.xcodeproj", + profile: "./shareextpp.mobileprovision", + target_filter: ".*TeamMailShareExtension.*" + ) + build_app( + scheme: "Runner", + workspace: "Runner.xcworkspace", + export_method: "app-store", + export_options: { + provisioningProfiles: { + "com.linagora.ios.teammail": "tmail.distribution.profile", + "com.linagora.ios.teammail.TeamMailShareExtension": "tmail.share.ext.distribution.profile" + } + } + ) + upload_to_testflight( + skip_waiting_for_build_processing: true, + ipa: "Runner.ipa" + ) + end +end diff --git a/prebuild.sh b/prebuild.sh index 370561d02..5b6557911 100644 --- a/prebuild.sh +++ b/prebuild.sh @@ -1,12 +1,15 @@ -#!/bin/bash -echo Pre-build ... +#!/usr/bin/env bash +# fail if any commands fails +set -e +# debug log +set -x cd core flutter pub get -# Install necessary pods -cd ../ios -flutter pub get && pod install +## Install necessary pods +#cd ../ios +#flutter pub get && pod install cd ../model flutter pub get && flutter pub run build_runner build --delete-conflicting-outputs @@ -14,17 +17,14 @@ flutter pub get && flutter pub run build_runner build --delete-conflicting-outpu cd ../contact flutter pub get && flutter pub run build_runner build --delete-conflicting-outputs -cd ../rule_filter -flutter pub get && flutter pub run build_runner build --delete-conflicting-outputs - cd ../forward flutter pub get && flutter pub run build_runner build --delete-conflicting-outputs -cd .. +cd ../rule_filter flutter pub get && flutter pub run build_runner build --delete-conflicting-outputs -flutter pub get && flutter pub run intl_generator:extract_to_arb --output-dir=./lib/l10n lib/main/localizations/app_localizations.dart - -flutter pub get && flutter pub run intl_generator:generate_from_arb --output-dir=lib/l10n --no-use-deferred-loading lib/main/localizations/app_localizations.dart lib/l10n/intl*.arb - -echo \[Completed\] pre-build!!! +cd .. +flutter pub get \ + && flutter pub run build_runner build --delete-conflicting-outputs \ + && flutter pub run intl_generator:extract_to_arb --output-dir=./lib/l10n lib/main/localizations/app_localizations.dart \ + && flutter pub run intl_generator:generate_from_arb --output-dir=lib/l10n --no-use-deferred-loading lib/main/localizations/app_localizations.dart lib/l10n/intl*.arb diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 000000000..3cfb1c52c --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,1471 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + url: "https://pub.dartlang.org" + source: hosted + version: "47.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + url: "https://pub.dartlang.org" + source: hosted + version: "4.7.0" + archive: + dependency: transitive + description: + name: archive + url: "https://pub.dartlang.org" + source: hosted + version: "3.3.1" + args: + dependency: transitive + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.1" + async: + dependency: "direct main" + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.8.2" + better_open_file: + dependency: "direct main" + description: + name: better_open_file + url: "https://pub.dartlang.org" + source: hosted + version: "3.6.3" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + build: + dependency: transitive + description: + name: build + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.1" + build_config: + dependency: transitive + description: + name: build_config + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + build_daemon: + dependency: transitive + description: + name: build_daemon + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.10" + build_runner: + dependency: "direct dev" + description: + name: build_runner + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.11" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + url: "https://pub.dartlang.org" + source: hosted + version: "7.2.4" + built_collection: + dependency: "direct main" + description: + name: built_collection + url: "https://pub.dartlang.org" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + url: "https://pub.dartlang.org" + source: hosted + version: "8.4.1" + byte_converter: + dependency: "direct main" + description: + name: byte_converter + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + code_builder: + dependency: transitive + description: + name: code_builder + url: "https://pub.dartlang.org" + source: hosted + version: "4.3.0" + collection: + dependency: "direct main" + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.16.0" + connectivity_plus: + dependency: "direct main" + description: + name: connectivity_plus + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.1" + connectivity_plus_linux: + dependency: transitive + description: + name: connectivity_plus_linux + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + connectivity_plus_macos: + dependency: transitive + description: + name: connectivity_plus_macos + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.4" + connectivity_plus_platform_interface: + dependency: transitive + description: + name: connectivity_plus_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.1" + connectivity_plus_web: + dependency: transitive + description: + name: connectivity_plus_web + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.3" + connectivity_plus_windows: + dependency: transitive + description: + name: connectivity_plus_windows + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.2" + contact: + dependency: "direct main" + description: + path: contact + relative: true + source: path + version: "1.0.0+1" + contacts_service: + dependency: "direct main" + description: + path: "." + ref: master + resolved-ref: c003ba24559afb984707aa0ac0dbfb533946754a + url: "https://github.com/linagora/flutter_contacts.git" + source: git + version: "0.6.1" + convert: + dependency: transitive + description: + name: convert + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.2" + core: + dependency: "direct main" + description: + path: core + relative: true + source: path + version: "1.0.0+1" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.2" + csslib: + dependency: transitive + description: + name: csslib + url: "https://pub.dartlang.org" + source: hosted + version: "0.17.2" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + cupertino_list_tile: + dependency: transitive + description: + name: cupertino_list_tile + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.1" + cupertino_progress_bar: + dependency: transitive + description: + name: cupertino_progress_bar + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0" + cupertino_stepper: + dependency: transitive + description: + name: cupertino_stepper + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.1" + custom_pop_up_menu: + dependency: "direct main" + description: + name: custom_pop_up_menu + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.4" + dart_style: + dependency: transitive + description: + name: dart_style + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.4" + dartz: + dependency: "direct main" + description: + name: dartz + url: "https://pub.dartlang.org" + source: hosted + version: "0.10.1" + dbus: + dependency: transitive + description: + name: dbus + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.8" + debounce_throttle: + dependency: transitive + description: + name: debounce_throttle + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + device_info_plus: + dependency: "direct main" + description: + name: device_info_plus + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.2" + device_info_plus_linux: + dependency: transitive + description: + name: device_info_plus_linux + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + device_info_plus_macos: + dependency: transitive + description: + name: device_info_plus_macos + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.3" + device_info_plus_platform_interface: + dependency: transitive + description: + name: device_info_plus_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.6.1" + device_info_plus_web: + dependency: transitive + description: + name: device_info_plus_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + device_info_plus_windows: + dependency: transitive + description: + name: device_info_plus_windows + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.3" + dio: + dependency: "direct main" + description: + name: dio + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.6" + dropdown_button2: + dependency: "direct main" + description: + name: dropdown_button2 + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.0" + enough_html_editor: + dependency: "direct main" + description: + path: "." + ref: email_supported + resolved-ref: d8a9d89a872029082e6a7b90b1c916552682f0b8 + url: "https://github.com/linagora/enough_html_editor.git" + source: git + version: "0.0.5" + enough_platform_widgets: + dependency: transitive + description: + name: enough_platform_widgets + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.0" + equatable: + dependency: "direct main" + description: + name: equatable + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.3" + external_path: + dependency: "direct main" + description: + name: external_path + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" + ffi: + dependency: transitive + description: + name: ffi + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + file: + dependency: transitive + description: + name: file + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.4" + file_picker: + dependency: "direct main" + description: + name: file_picker + url: "https://pub.dartlang.org" + source: hosted + version: "5.0.1" + filesize: + dependency: "direct main" + description: + name: filesize + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + fixnum: + dependency: transitive + description: + name: fixnum + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + fk_user_agent: + dependency: "direct main" + description: + name: fk_user_agent + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + flex_color_picker: + dependency: transitive + description: + name: flex_color_picker + url: "https://pub.dartlang.org" + source: hosted + version: "2.5.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_appauth: + dependency: "direct main" + description: + name: flutter_appauth + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.0" + flutter_appauth_platform_interface: + dependency: transitive + description: + name: flutter_appauth_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "5.2.0" + flutter_appauth_web: + dependency: "direct main" + description: + path: "." + ref: HEAD + resolved-ref: b21b4aed3688dcf9dcb08ebac9e53015f09137bc + url: "https://github.com/CarlosPacheco/flutter_appauth_web.git" + source: git + version: "0.0.1" + flutter_colorpicker: + dependency: transitive + description: + name: flutter_colorpicker + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.3" + flutter_dotenv: + dependency: "direct main" + description: + name: flutter_dotenv + url: "https://pub.dartlang.org" + source: hosted + version: "5.0.2" + flutter_downloader: + dependency: "direct main" + description: + name: flutter_downloader + url: "https://pub.dartlang.org" + source: hosted + version: "1.7.0" + flutter_image_compress: + dependency: transitive + description: + name: flutter_image_compress + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + flutter_inappwebview: + dependency: transitive + description: + name: flutter_inappwebview + url: "https://pub.dartlang.org" + source: hosted + version: "5.4.3+7" + flutter_keyboard_visibility: + dependency: transitive + description: + name: flutter_keyboard_visibility + url: "https://pub.dartlang.org" + source: hosted + version: "5.2.0" + flutter_keyboard_visibility_platform_interface: + dependency: transitive + description: + name: flutter_keyboard_visibility_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_web: + dependency: transitive + description: + name: flutter_keyboard_visibility_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + flutter_launcher_icons: + dependency: "direct dev" + description: + name: flutter_launcher_icons + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.3" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" + flutter_localizations: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_native_splash: + dependency: "direct dev" + description: + name: flutter_native_splash + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.3+1" + flutter_platform_widgets: + dependency: transitive + description: + name: flutter_platform_widgets + url: "https://pub.dartlang.org" + source: hosted + version: "1.20.0" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.7" + flutter_portal: + dependency: "direct main" + description: + name: flutter_portal + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + flutter_staggered_grid_view: + dependency: "direct main" + description: + name: flutter_staggered_grid_view + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.1" + flutter_svg: + dependency: "direct main" + description: + name: flutter_svg + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_typeahead: + dependency: "direct main" + description: + name: flutter_typeahead + url: "https://pub.dartlang.org" + source: hosted + version: "3.2.7" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + fluttertoast: + dependency: transitive + description: + name: fluttertoast + url: "https://pub.dartlang.org" + source: hosted + version: "8.0.8" + forward: + dependency: "direct main" + description: + path: forward + relative: true + source: path + version: "1.0.0+1" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.3" + get: + dependency: "direct main" + description: + name: get + url: "https://pub.dartlang.org" + source: hosted + version: "4.6.5" + glob: + dependency: transitive + description: + name: glob + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + graphs: + dependency: transitive + description: + name: graphs + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + hive: + dependency: "direct main" + description: + name: hive + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.4" + hive_generator: + dependency: "direct dev" + description: + name: hive_generator + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.3" + html: + dependency: "direct main" + description: + name: html + url: "https://pub.dartlang.org" + source: hosted + version: "0.15.0" + html_editor_enhanced: + dependency: "direct main" + description: + path: "." + ref: email_supported + resolved-ref: "75cbc35932ec85c0e7f94c17147cf231ea0b812e" + url: "https://github.com/linagora/html-editor-enhanced.git" + source: git + version: "2.5.0" + http: + dependency: transitive + description: + name: http + url: "https://pub.dartlang.org" + source: hosted + version: "0.13.4" + http_mock_adapter: + dependency: transitive + description: + name: http_mock_adapter + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.2" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + url: "https://pub.dartlang.org" + source: hosted + version: "3.2.1" + http_parser: + dependency: "direct main" + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.0" + image: + dependency: transitive + description: + name: image + url: "https://pub.dartlang.org" + source: hosted + version: "3.2.0" + infinite_listview: + dependency: transitive + description: + name: infinite_listview + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + intl: + dependency: transitive + description: + name: intl + url: "https://pub.dartlang.org" + source: hosted + version: "0.17.0" + intl_generator: + dependency: "direct main" + description: + name: intl_generator + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.0" + io: + dependency: transitive + description: + name: io + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.3" + jmap_dart_client: + dependency: "direct main" + description: + path: "." + ref: master + resolved-ref: "2b31aeee11104f93df725f9465f0f4d0593d7a4d" + url: "https://github.com/linagora/jmap-dart-client.git" + source: git + version: "0.0.1" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.4" + json_annotation: + dependency: transitive + description: + name: json_annotation + url: "https://pub.dartlang.org" + source: hosted + version: "4.5.0" + json_serializable: + dependency: transitive + description: + name: json_serializable + url: "https://pub.dartlang.org" + source: hosted + version: "6.2.0" + lint: + dependency: transitive + description: + name: lint + url: "https://pub.dartlang.org" + source: hosted + version: "1.10.0" + lints: + dependency: transitive + description: + name: lints + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + logging: + dependency: transitive + description: + name: logging + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.11" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.4" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.7.0" + mime: + dependency: transitive + description: + name: mime + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + mockito: + dependency: "direct dev" + description: + name: mockito + url: "https://pub.dartlang.org" + source: hosted + version: "5.2.0" + model: + dependency: "direct main" + description: + path: model + relative: true + source: path + version: "1.0.0+1" + nm: + dependency: transitive + description: + name: nm + url: "https://pub.dartlang.org" + source: hosted + version: "0.5.0" + numberpicker: + dependency: transitive + description: + name: numberpicker + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + package_config: + dependency: transitive + description: + name: package_config + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + package_info_plus: + dependency: "direct main" + description: + name: package_info_plus + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.3" + package_info_plus_linux: + dependency: transitive + description: + name: package_info_plus_linux + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + package_info_plus_macos: + dependency: transitive + description: + name: package_info_plus_macos + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" + package_info_plus_platform_interface: + dependency: transitive + description: + name: package_info_plus_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + package_info_plus_web: + dependency: transitive + description: + name: package_info_plus_web + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + package_info_plus_windows: + dependency: transitive + description: + name: package_info_plus_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.1" + path_drawing: + dependency: transitive + description: + name: path_drawing + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + path_parsing: + dependency: transitive + description: + name: path_parsing + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + path_provider: + dependency: "direct main" + description: + name: path_provider + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.3" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.7" + path_provider_macos: + dependency: transitive + description: + name: path_provider_macos + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.6" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.4" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.3" + pedantic: + dependency: transitive + description: + name: pedantic + url: "https://pub.dartlang.org" + source: hosted + version: "1.11.1" + percent_indicator: + dependency: "direct main" + description: + name: percent_indicator + url: "https://pub.dartlang.org" + source: hosted + version: "4.2.2" + permission_handler: + dependency: "direct main" + description: + name: permission_handler + url: "https://pub.dartlang.org" + source: hosted + version: "9.2.0" + permission_handler_android: + dependency: transitive + description: + name: permission_handler_android + url: "https://pub.dartlang.org" + source: hosted + version: "9.0.2+1" + permission_handler_apple: + dependency: transitive + description: + name: permission_handler_apple + url: "https://pub.dartlang.org" + source: hosted + version: "9.0.4" + permission_handler_platform_interface: + dependency: transitive + description: + name: permission_handler_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "3.7.1" + permission_handler_windows: + dependency: transitive + description: + name: permission_handler_windows + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.0" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "5.0.0" + platform: + dependency: transitive + description: + name: platform + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.3" + pointer_interceptor: + dependency: "direct main" + description: + name: pointer_interceptor + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.1" + pointycastle: + dependency: transitive + description: + name: pointycastle + url: "https://pub.dartlang.org" + source: hosted + version: "3.6.2" + pool: + dependency: transitive + description: + name: pool + url: "https://pub.dartlang.org" + source: hosted + version: "1.5.1" + process: + dependency: transitive + description: + name: process + url: "https://pub.dartlang.org" + source: hosted + version: "4.2.4" + pub_semver: + dependency: transitive + description: + name: pub_semver + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + quiver: + dependency: transitive + description: + name: quiver + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1+1" + receive_sharing_intent: + dependency: "direct main" + description: + path: "." + ref: master + resolved-ref: e1a945c3da610cdb0ec2788f1b89a96e3f0c6f32 + url: "https://github.com/KasemJaffer/receive_sharing_intent.git" + source: git + version: "1.4.5" + rule_filter: + dependency: "direct main" + description: + path: rule_filter + relative: true + source: path + version: "1.0.0+1" + rxdart: + dependency: "direct main" + description: + name: rxdart + url: "https://pub.dartlang.org" + source: hosted + version: "0.27.3" + share: + dependency: "direct main" + description: + name: share + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.4" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.5" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + shared_preferences_macos: + dependency: transitive + description: + name: shared_preferences_macos + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.4" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.4" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + shelf: + dependency: transitive + description: + name: shelf + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.0" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + simple_observable: + dependency: transitive + description: + name: simple_observable + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.5" + source_helper: + dependency: transitive + description: + name: source_helper + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.3" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.2" + sqflite: + dependency: transitive + description: + name: sqflite + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0+4" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.10.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + stream_transform: + dependency: transitive + description: + name: stream_transform + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + super_tag_editor: + dependency: "direct main" + description: + name: super_tag_editor + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.1" + synchronized: + dependency: transitive + description: + name: synchronized + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.0+3" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.9" + textfield_tags: + dependency: "direct main" + description: + name: textfield_tags + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" + timeago: + dependency: "direct main" + description: + name: timeago + url: "https://pub.dartlang.org" + source: hosted + version: "3.2.2" + timing: + dependency: transitive + description: + name: timing + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + universal_html: + dependency: transitive + description: + name: universal_html + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.8" + universal_io: + dependency: transitive + description: + name: universal_io + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.4" + uri: + dependency: transitive + description: + name: uri + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + url_launcher: + dependency: transitive + description: + name: url_launcher + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.5" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.19" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.17" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.13" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + uuid: + dependency: "direct main" + description: + name: uuid + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.4" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.2" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.3" + watcher: + dependency: transitive + description: + name: watcher + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.0" + webview_flutter: + dependency: transitive + description: + name: webview_flutter + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.0" + webview_flutter_android: + dependency: transitive + description: + name: webview_flutter_android + url: "https://pub.dartlang.org" + source: hosted + version: "2.10.2" + webview_flutter_platform_interface: + dependency: transitive + description: + name: webview_flutter_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.3" + webview_flutter_wkwebview: + dependency: transitive + description: + name: webview_flutter_wkwebview + url: "https://pub.dartlang.org" + source: hosted + version: "2.9.4" + win32: + dependency: transitive + description: + name: win32 + url: "https://pub.dartlang.org" + source: hosted + version: "2.7.0" + worker_manager: + dependency: "direct main" + description: + name: worker_manager + url: "https://pub.dartlang.org" + source: hosted + version: "4.4.0" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0+2" + xml: + dependency: "direct dev" + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.0" + yaml: + dependency: transitive + description: + name: yaml + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.1" +sdks: + dart: ">=2.17.0 <3.0.0" + flutter: ">=3.0.0"