From 7c8d71a0bc067c5579ca5ea2d1ad39964fd2cf72 Mon Sep 17 00:00:00 2001 From: Loic Sharma Date: Wed, 5 Feb 2025 12:49:39 -0800 Subject: [PATCH 1/3] Add telemetry event --- pkgs/unified_analytics/CHANGELOG.md | 3 + pkgs/unified_analytics/lib/src/constants.dart | 2 +- pkgs/unified_analytics/lib/src/enums.dart | 7 +- pkgs/unified_analytics/lib/src/event.dart | 65 +++++++++++++++++++ pkgs/unified_analytics/pubspec.yaml | 2 +- pkgs/unified_analytics/test/event_test.dart | 31 ++++++++- 6 files changed, 106 insertions(+), 4 deletions(-) diff --git a/pkgs/unified_analytics/CHANGELOG.md b/pkgs/unified_analytics/CHANGELOG.md index f3fd2c984d..3d4c4f278d 100644 --- a/pkgs/unified_analytics/CHANGELOG.md +++ b/pkgs/unified_analytics/CHANGELOG.md @@ -1,3 +1,6 @@ +## 8.0.1 +- Added `Event.flutterInjectDarwinPlugins` event for plugins injected into an iOS/macOS project. + ## 8.0.0 - Send `enabled_features` as an event parameter in all events rather than as a user property. diff --git a/pkgs/unified_analytics/lib/src/constants.dart b/pkgs/unified_analytics/lib/src/constants.dart index 7dcf8b6b2c..c6ba7496e2 100644 --- a/pkgs/unified_analytics/lib/src/constants.dart +++ b/pkgs/unified_analytics/lib/src/constants.dart @@ -87,7 +87,7 @@ const int kMaxLogFileSize = 25 * (1 << 20); const String kLogFileName = 'dart-flutter-telemetry.log'; /// The current version of the package, should be in line with pubspec version. -const String kPackageVersion = '8.0.0'; +const String kPackageVersion = '8.0.1'; /// The minimum length for a session. const int kSessionDurationMinutes = 30; diff --git a/pkgs/unified_analytics/lib/src/enums.dart b/pkgs/unified_analytics/lib/src/enums.dart index d67ab66a0e..eff8205a5a 100644 --- a/pkgs/unified_analytics/lib/src/enums.dart +++ b/pkgs/unified_analytics/lib/src/enums.dart @@ -74,7 +74,7 @@ enum DashEvent { ), codeSizeAnalysis( label: 'code_size_analysis', - description: 'Indicates when the "--analyize-size" command is run', + description: 'Indicates when the "--analyze-size" command is run', toolOwner: DashTool.flutterTool, ), commandUsageValues( @@ -98,6 +98,11 @@ enum DashEvent { description: 'Provides information about flutter commands that ran', toolOwner: DashTool.flutterTool, ), + flutterInjectDarwinPlugins( + label: 'flutter_inject_darwin_plugins', + description: 'Information on plugins injected into an iOS/macOS project', + toolOwner: DashTool.flutterTool, + ), hotReloadTime( label: 'hot_reload_time', description: 'Hot reload duration', diff --git a/pkgs/unified_analytics/lib/src/event.dart b/pkgs/unified_analytics/lib/src/event.dart index c451386adb..1aa7b9c398 100644 --- a/pkgs/unified_analytics/lib/src/event.dart +++ b/pkgs/unified_analytics/lib/src/event.dart @@ -557,6 +557,71 @@ final class Event { }, ); + /// Provides information about the plugins injected into an iOS or macOS + /// project. + /// + /// This event is not sent if a project has no plugins. + /// + /// [platform] - The project's platform. Either 'ios' or 'macos'. + /// + /// [isModule] - whether the project is an add-to-app Flutter module. + /// + /// [swiftPackageManagerUsed] - if Swift Package Manager can be used for the + /// project's plugins. + /// + /// [swiftPackageManagerFeatureEnabled] - if the Swift Package Manager feature + /// flag is on. If false, Swift Package Manager is off for all projects on + /// the development machine. + /// + /// [projectDisabledSwiftPackageManager] - if the project's .pubspec has + /// `disable-swift-package-manager: true`. This turns off Swift Package + /// Manager for a single project. + /// + /// [projectHasSwiftPackageManagerIntegration] - if the Xcode project has + /// Swift Package Manager integration. If false, the project needs to be + /// migrated. + /// + /// [pluginCount] - the total number of plugins for this project. A plugin + /// can be compatible with both Swift Package Manager and CocoaPods. Plugins + /// compatible with both will be counted in both [swiftPackageCount] and + /// [podCount]. Swift Package Manager was used to inject all plugins if + /// [pluginCount] is equal to [swiftPackageCount]. + /// + /// [swiftPackageCount] - the number of plugins compatible with Swift Package + /// Manager. This is less than or equal to [pluginCount]. If + /// [swiftPackageCount] is less than [pluginCount], the project uses CocoaPods + /// to inject plugins. + /// + /// [podCount] - the number of plugins compatible with CocoaPods. This is less + /// than or equal to [podCount]. + Event.flutterInjectDarwinPlugins({ + required String platform, + required bool isModule, + required bool swiftPackageManagerUsed, + required bool swiftPackageManagerFeatureEnabled, + required bool projectDisabledSwiftPackageManager, + required bool projectHasSwiftPackageManagerIntegration, + required int pluginCount, + required int swiftPackageCount, + required int podCount, + }) : this._( + eventName: DashEvent.flutterInjectDarwinPlugins, + eventData: { + 'platform': platform, + 'isModule': isModule, + 'swiftPackageManagerUsed': swiftPackageManagerUsed, + 'swiftPackageManagerFeatureEnabled': + swiftPackageManagerFeatureEnabled, + 'projectDisabledSwiftPackageManager': + projectDisabledSwiftPackageManager, + 'projectHasSwiftPackageManagerIntegration': + projectHasSwiftPackageManagerIntegration, + 'pluginCount': pluginCount, + 'swiftPackageCount': swiftPackageCount, + 'podCount': podCount, + }, + ); + // TODO: eliasyishak, remove this or replace once we have a generic // timing event that can be used by potentially more than one DashTool Event.hotReloadTime({required int timeMs}) diff --git a/pkgs/unified_analytics/pubspec.yaml b/pkgs/unified_analytics/pubspec.yaml index 65c5de46d5..8bba46243b 100644 --- a/pkgs/unified_analytics/pubspec.yaml +++ b/pkgs/unified_analytics/pubspec.yaml @@ -5,7 +5,7 @@ description: >- # LINT.IfChange # When updating this, keep the version consistent with the changelog and the # value in lib/src/constants.dart. -version: 8.0.0 +version: 8.0.1 # LINT.ThenChange(lib/src/constants.dart) repository: https://github.com/dart-lang/tools/tree/main/pkgs/unified_analytics issue_tracker: https://github.com/dart-lang/tools/issues?q=is%3Aissue+is%3Aopen+label%3Apackage%3Aunified_analytics diff --git a/pkgs/unified_analytics/test/event_test.dart b/pkgs/unified_analytics/test/event_test.dart index 2db0b2a0bc..dbcb37fc3e 100644 --- a/pkgs/unified_analytics/test/event_test.dart +++ b/pkgs/unified_analytics/test/event_test.dart @@ -400,6 +400,35 @@ void main() { expect(constructedEvent.eventData.length, 4); }); + test('Event.flutterInjectDarwinPlugins constructed', () { + Event generateEvent() => Event.flutterInjectDarwinPlugins( + platform: 'ios', + isModule: true, + swiftPackageManagerUsed: true, + swiftPackageManagerFeatureEnabled: true, + projectDisabledSwiftPackageManager: false, + projectHasSwiftPackageManagerIntegration: true, + pluginCount: 123, + swiftPackageCount: 456, + podCount: 678, + ); + + final constructedEvent = generateEvent(); + + expect(generateEvent, returnsNormally); + expect(constructedEvent.eventName, DashEvent.flutterInjectDarwinPlugins); + expect(constructedEvent.eventData['platform'], 'ios'); + expect(constructedEvent.eventData['isModule'], isTrue); + expect(constructedEvent.eventData['swiftPackageManagerUsed'], isTrue); + expect(constructedEvent.eventData['swiftPackageManagerFeatureEnabled'], isTrue); + expect(constructedEvent.eventData['projectDisabledSwiftPackageManager'], isFalse); + expect(constructedEvent.eventData['projectHasSwiftPackageManagerIntegration'], isTrue); + expect(constructedEvent.eventData['pluginCount'], 123); + expect(constructedEvent.eventData['swiftPackageCount'], 456); + expect(constructedEvent.eventData['podCount'], 678); + expect(constructedEvent.eventData.length, 9); + }); + test('Event.codeSizeAnalysis constructed', () { Event generateEvent() => Event.codeSizeAnalysis(platform: 'platform'); @@ -634,7 +663,7 @@ void main() { // Change this integer below if your PR either adds or removes // an Event constructor - final eventsAccountedForInTests = 27; + final eventsAccountedForInTests = 28; expect(eventsAccountedForInTests, constructorCount, reason: 'If you added or removed an event constructor, ' 'ensure you have updated ' From 9366589e7a2ffe47185f727bea68731c5bc1fcce Mon Sep 17 00:00:00 2001 From: Loic Sharma Date: Mon, 7 Apr 2025 13:24:53 -0700 Subject: [PATCH 2/3] Format --- pkgs/unified_analytics/test/event_test.dart | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pkgs/unified_analytics/test/event_test.dart b/pkgs/unified_analytics/test/event_test.dart index dbcb37fc3e..b4b38aea29 100644 --- a/pkgs/unified_analytics/test/event_test.dart +++ b/pkgs/unified_analytics/test/event_test.dart @@ -420,9 +420,13 @@ void main() { expect(constructedEvent.eventData['platform'], 'ios'); expect(constructedEvent.eventData['isModule'], isTrue); expect(constructedEvent.eventData['swiftPackageManagerUsed'], isTrue); - expect(constructedEvent.eventData['swiftPackageManagerFeatureEnabled'], isTrue); - expect(constructedEvent.eventData['projectDisabledSwiftPackageManager'], isFalse); - expect(constructedEvent.eventData['projectHasSwiftPackageManagerIntegration'], isTrue); + expect(constructedEvent.eventData['swiftPackageManagerFeatureEnabled'], + isTrue); + expect(constructedEvent.eventData['projectDisabledSwiftPackageManager'], + isFalse); + expect( + constructedEvent.eventData['projectHasSwiftPackageManagerIntegration'], + isTrue); expect(constructedEvent.eventData['pluginCount'], 123); expect(constructedEvent.eventData['swiftPackageCount'], 456); expect(constructedEvent.eventData['podCount'], 678); From fbb731a6bb92235bc6ef197ef9c4b6afd8107749 Mon Sep 17 00:00:00 2001 From: Loic Sharma Date: Mon, 7 Apr 2025 14:13:09 -0700 Subject: [PATCH 3/3] used -> usable --- pkgs/unified_analytics/lib/src/event.dart | 10 +++++----- pkgs/unified_analytics/test/event_test.dart | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pkgs/unified_analytics/lib/src/event.dart b/pkgs/unified_analytics/lib/src/event.dart index 1aa7b9c398..0071ebd84e 100644 --- a/pkgs/unified_analytics/lib/src/event.dart +++ b/pkgs/unified_analytics/lib/src/event.dart @@ -566,8 +566,8 @@ final class Event { /// /// [isModule] - whether the project is an add-to-app Flutter module. /// - /// [swiftPackageManagerUsed] - if Swift Package Manager can be used for the - /// project's plugins. + /// [swiftPackageManagerUsable] - if `true`, Swift Package Manager can be used + /// for the project's plugins if any are Swift Package Manager compatible. /// /// [swiftPackageManagerFeatureEnabled] - if the Swift Package Manager feature /// flag is on. If false, Swift Package Manager is off for all projects on @@ -578,7 +578,7 @@ final class Event { /// Manager for a single project. /// /// [projectHasSwiftPackageManagerIntegration] - if the Xcode project has - /// Swift Package Manager integration. If false, the project needs to be + /// Swift Package Manager integration. If `false`, the project needs to be /// migrated. /// /// [pluginCount] - the total number of plugins for this project. A plugin @@ -597,7 +597,7 @@ final class Event { Event.flutterInjectDarwinPlugins({ required String platform, required bool isModule, - required bool swiftPackageManagerUsed, + required bool swiftPackageManagerUsable, required bool swiftPackageManagerFeatureEnabled, required bool projectDisabledSwiftPackageManager, required bool projectHasSwiftPackageManagerIntegration, @@ -609,7 +609,7 @@ final class Event { eventData: { 'platform': platform, 'isModule': isModule, - 'swiftPackageManagerUsed': swiftPackageManagerUsed, + 'swiftPackageManagerUsable': swiftPackageManagerUsable, 'swiftPackageManagerFeatureEnabled': swiftPackageManagerFeatureEnabled, 'projectDisabledSwiftPackageManager': diff --git a/pkgs/unified_analytics/test/event_test.dart b/pkgs/unified_analytics/test/event_test.dart index b4b38aea29..e8a9f5696f 100644 --- a/pkgs/unified_analytics/test/event_test.dart +++ b/pkgs/unified_analytics/test/event_test.dart @@ -404,7 +404,7 @@ void main() { Event generateEvent() => Event.flutterInjectDarwinPlugins( platform: 'ios', isModule: true, - swiftPackageManagerUsed: true, + swiftPackageManagerUsable: true, swiftPackageManagerFeatureEnabled: true, projectDisabledSwiftPackageManager: false, projectHasSwiftPackageManagerIntegration: true, @@ -419,7 +419,7 @@ void main() { expect(constructedEvent.eventName, DashEvent.flutterInjectDarwinPlugins); expect(constructedEvent.eventData['platform'], 'ios'); expect(constructedEvent.eventData['isModule'], isTrue); - expect(constructedEvent.eventData['swiftPackageManagerUsed'], isTrue); + expect(constructedEvent.eventData['swiftPackageManagerUsable'], isTrue); expect(constructedEvent.eventData['swiftPackageManagerFeatureEnabled'], isTrue); expect(constructedEvent.eventData['projectDisabledSwiftPackageManager'],