diff --git a/Podfile b/Podfile index 4d908eb2fed7..03bb9998ab90 100644 --- a/Podfile +++ b/Podfile @@ -216,7 +216,7 @@ abstract_target 'Apps' do # Production - pod 'Automattic-Tracks-iOS', '~> 0.13' + pod 'Automattic-Tracks-iOS', '~> 2.2' # While in PR # pod 'Automattic-Tracks-iOS', git: 'https://github.com/Automattic/Automattic-Tracks-iOS.git', branch: '' # Local Development @@ -404,7 +404,7 @@ pre_install do |installer| installer.pod_targets.each do |pod| # Statically linking Sentry results in a conflict with `NSDictionary.objectAtKeyPath`, but dynamically # linking it resolves this. - if pod.name == 'Sentry' + if %w[Sentry SentryPrivate].include? pod.name dynamic << pod next end diff --git a/Podfile.lock b/Podfile.lock index d16602aa4c3c..24d215e41afb 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -20,8 +20,8 @@ PODS: - AppCenter/Core - AppCenter/Distribute (4.4.1): - AppCenter/Core - - Automattic-Tracks-iOS (0.13.0): - - Sentry (~> 7.25) + - Automattic-Tracks-iOS (2.2.0): + - Sentry (~> 8.0) - Sodium (>= 0.9.1) - UIDeviceIdentifier (~> 2.0) - boost (1.76.0) @@ -490,14 +490,17 @@ PODS: - SDWebImageWebPCoder (0.8.5): - libwebp (~> 1.0) - SDWebImage/Core (~> 5.10) - - Sentry (7.27.0): - - Sentry/Core (= 7.27.0) - - Sentry/Core (7.27.0) + - Sentry (8.6.0): + - Sentry/Core (= 8.6.0) + - SentryPrivate (= 8.6.0) + - Sentry/Core (8.6.0): + - SentryPrivate (= 8.6.0) + - SentryPrivate (8.6.0) - Sodium (0.9.1) - Starscream (3.0.6) - SVProgressHUD (2.2.5) - SwiftLint (0.50.3) - - UIDeviceIdentifier (2.1.0) + - UIDeviceIdentifier (2.3.0) - WordPress-Aztec-iOS (1.19.8) - WordPress-Editor-iOS (1.19.8): - WordPress-Aztec-iOS (= 1.19.8) @@ -541,7 +544,7 @@ DEPENDENCIES: - AlamofireNetworkActivityIndicator (~> 2.4) - AppCenter (~> 4.1) - AppCenter/Distribute (~> 4.1) - - Automattic-Tracks-iOS (~> 0.13) + - Automattic-Tracks-iOS (~> 2.2) - boost (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.94.0/third-party-podspecs/boost.podspec.json`) - BVLinearGradient (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.94.0/third-party-podspecs/BVLinearGradient.podspec.json`) - CocoaLumberjack/Swift (~> 3.0) @@ -651,6 +654,7 @@ SPEC REPOS: - SDWebImage - SDWebImageWebPCoder - Sentry + - SentryPrivate - Sodium - Starscream - SVProgressHUD @@ -800,7 +804,7 @@ SPEC CHECKSUMS: AlamofireNetworkActivityIndicator: 9acc3de3ca6645bf0efed462396b0df13dd3e7b8 AppAuth: e48b432bb4ba88b10cb2bcc50d7f3af21e78b9c2 AppCenter: b0b6f1190215b5f983c42934db718f3b46fff3c0 - Automattic-Tracks-iOS: 63e55654f500b3e8fb35087e64575e00d12eb2f5 + Automattic-Tracks-iOS: a1b020ab02f0e5a39c5d4e6870a498273f286158 boost: 32a63928ef0a5bf8b60f6b930c8864113fa28779 BVLinearGradient: 708898fab8f7113d927b0ef611a321e759f6ad3e CocoaLumberjack: 78abfb691154e2a9df8ded4350d504ee19d90732 @@ -871,12 +875,13 @@ SPEC CHECKSUMS: RNTAztecView: 80480c43423929f7e3b7012670787e7375fbac9c SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d - Sentry: 026b36fdc09531604db9279e55f047fe652e3f4a + Sentry: d80553ff85ea72def75b792aaa5a71c158e51595 + SentryPrivate: ef1c5b3dfe44ec0c70e2eb343a5be2689164c021 Sodium: 23d11554ecd556196d313cf6130d406dfe7ac6da Starscream: ef3ece99d765eeccb67de105bfa143f929026cf5 SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6 SwiftLint: 77f7cb2b9bb81ab4a12fcc86448ba3f11afa50c6 - UIDeviceIdentifier: e6a801d25f4f178de5bdf475ffe29050d0148176 + UIDeviceIdentifier: 442b65b4ff1832d4ca9c2a157815cb29ad981b17 WordPress-Aztec-iOS: 7d11d598f14c82c727c08b56bd35fbeb7dafb504 WordPress-Editor-iOS: 9eb9f12f21a5209cb837908d81ffe1e31cb27345 WordPressAuthenticator: b0b900696de5129a215adcd1e9ae6eb89da36ac8 @@ -895,6 +900,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: ae5b4b813d216d3bf0a148773267fff14bd51d37 -PODFILE CHECKSUM: d48e2c793016c27a80eba0bc3b3ccb30ee05ba6f +PODFILE CHECKSUM: ab88bd849ac377484fd7f0c4b079701ce16de5a3 COCOAPODS: 1.11.3 diff --git a/WordPress/Classes/Services/SiteAddressService.swift b/WordPress/Classes/Services/SiteAddressService.swift index a7a96520998b..af5c41ada729 100644 --- a/WordPress/Classes/Services/SiteAddressService.swift +++ b/WordPress/Classes/Services/SiteAddressService.swift @@ -51,7 +51,10 @@ final class DomainsServiceAdapter: SiteAddressService { // MARK: Properties - private let domainPurchasingEnabled = FeatureFlag.siteCreationDomainPurchasing.enabled + /// Checks if the Domain Purchasing Feature Flag and AB Experiment are enabled + private var domainPurchasingEnabled: Bool { + FeatureFlag.siteCreationDomainPurchasing.enabled && ABTest.siteCreationDomainPurchasing.isTreatmentVariation + } /** Corresponds to: diff --git a/WordPress/Classes/Utility/AB Testing/ABTest.swift b/WordPress/Classes/Utility/AB Testing/ABTest.swift index 11359e5bca87..4aeb74cec7cf 100644 --- a/WordPress/Classes/Utility/AB Testing/ABTest.swift +++ b/WordPress/Classes/Utility/AB Testing/ABTest.swift @@ -4,25 +4,35 @@ import AutomatticTracks // Jetpack is not supported enum ABTest: String, CaseIterable { case unknown = "unknown" + case siteCreationDomainPurchasing = "jpios_site_creation_domain_purchasing_v1" /// Returns a variation for the given experiment var variation: Variation { return ExPlat.shared?.experiment(self.rawValue) ?? .control } + + /// Flag indicating whether the experiment's variation is treament or not. + var isTreatmentVariation: Bool { + switch variation { + case .treatment, .customTreatment: return true + case .control: return false + } + } } extension ABTest { /// Start the AB Testing platform if any experiment exists /// static func start() { - guard ABTest.allCases.count > 1, AccountHelper.isLoggedIn, - AppConfiguration.isWordPress else { + guard ABTest.allCases.count > 1, + AccountHelper.isLoggedIn, + AppConfiguration.isJetpack, + let exPlat = ExPlat.shared + else { return } - let experimentNames = ABTest.allCases.filter { $0 != .unknown }.map { $0.rawValue } - ExPlat.shared?.register(experiments: experimentNames) - - ExPlat.shared?.refresh() + exPlat.register(experiments: experimentNames) + exPlat.refresh() } } diff --git a/WordPress/Classes/Utility/Analytics/WPAnalytics+Domains.swift b/WordPress/Classes/Utility/Analytics/WPAnalytics+Domains.swift index 35ab93fa47c1..d3877434ca99 100644 --- a/WordPress/Classes/Utility/Analytics/WPAnalytics+Domains.swift +++ b/WordPress/Classes/Utility/Analytics/WPAnalytics+Domains.swift @@ -1,6 +1,12 @@ import Foundation extension WPAnalytics { + + /// Checks if the Domain Purchasing Feature Flag and AB Experiment are enabled + private static var domainPurchasingEnabled: Bool { + FeatureFlag.siteCreationDomainPurchasing.enabled && ABTest.siteCreationDomainPurchasing.isTreatmentVariation + } + static func domainsProperties(for blog: Blog) -> [AnyHashable: Any] { // For now we do not have the `siteCreation` route implemented so hardcoding `menu` domainsProperties(usingCredit: blog.canRegisterDomainWithPaidPlan, origin: .menu) @@ -11,7 +17,7 @@ extension WPAnalytics { origin: DomainPurchaseWebViewViewOrigin? ) -> [AnyHashable: Any] { var dict: [AnyHashable: Any] = ["using_credit": usingCredit.stringLiteral] - if FeatureFlag.siteCreationDomainPurchasing.enabled, + if Self.domainPurchasingEnabled, let origin = origin { dict["origin"] = origin.rawValue } diff --git a/WordPress/Classes/Utility/Analytics/WPAnalyticsTrackerAutomatticTracks.m b/WordPress/Classes/Utility/Analytics/WPAnalyticsTrackerAutomatticTracks.m index bd0379073284..756260b398d0 100644 --- a/WordPress/Classes/Utility/Analytics/WPAnalyticsTrackerAutomatticTracks.m +++ b/WordPress/Classes/Utility/Analytics/WPAnalyticsTrackerAutomatticTracks.m @@ -48,6 +48,7 @@ - (instancetype)init _contextManager = [TracksContextManager new]; _tracksService = [[TracksService alloc] initWithContextManager:_contextManager]; _tracksService.eventNamePrefix = AppConstants.eventNamePrefix; + _tracksService.platform = AppConstants.explatPlatform; } return self; } diff --git a/WordPress/Classes/Utility/App Configuration/AppConstants.swift b/WordPress/Classes/Utility/App Configuration/AppConstants.swift index 1cf25761c7cc..b7c9bb2f5298 100644 --- a/WordPress/Classes/Utility/App Configuration/AppConstants.swift +++ b/WordPress/Classes/Utility/App Configuration/AppConstants.swift @@ -14,6 +14,7 @@ import WordPressAuthenticator static let shareAppName: ShareAppName = .wordpress static let mobileAnnounceAppId = "2" @objc static let eventNamePrefix = "wpios" + @objc static let explatPlatform = "wpios" @objc static let authKeychainServiceName = "public-api.wordpress.com" /// Notifications Constants diff --git a/WordPress/Classes/ViewRelated/Blog/Blog List/BlogListViewController+SiteCreation.swift b/WordPress/Classes/ViewRelated/Blog/Blog List/BlogListViewController+SiteCreation.swift index 52cefc5e90d4..328a1ad45978 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog List/BlogListViewController+SiteCreation.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog List/BlogListViewController+SiteCreation.swift @@ -13,7 +13,7 @@ extension BlogListViewController { return } self.present(wizard, animated: true) - WPAnalytics.track(.enhancedSiteCreationAccessed, withProperties: ["source": source]) + SiteCreationAnalyticsHelper.trackSiteCreationAccessed(source: source) }) } } diff --git a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift index 97a8398d09c9..5c97bc11a29d 100644 --- a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift +++ b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift @@ -734,7 +734,7 @@ class MySiteViewController: UIViewController, NoResultsViewHost { return } self.present(wizard, animated: true) - WPAnalytics.track(.enhancedSiteCreationAccessed, withProperties: ["source": source]) + SiteCreationAnalyticsHelper.trackSiteCreationAccessed(source: source) }) } diff --git a/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift b/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift index c919fccb2d84..a5bcc6074deb 100644 --- a/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift +++ b/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift @@ -395,7 +395,7 @@ extension WordPressAuthenticationManager: WordPressAuthenticatorDelegate { } navigationController.present(wizard, animated: true) - WPAnalytics.track(.enhancedSiteCreationAccessed, withProperties: ["source": source]) + SiteCreationAnalyticsHelper.trackSiteCreationAccessed(source: source) }) } diff --git a/WordPress/Classes/ViewRelated/Site Creation/Final Assembly/SiteAssemblyContentView.swift b/WordPress/Classes/ViewRelated/Site Creation/Final Assembly/SiteAssemblyContentView.swift index 312d762aa337..a33543678f00 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Final Assembly/SiteAssemblyContentView.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Final Assembly/SiteAssemblyContentView.swift @@ -158,7 +158,7 @@ final class SiteAssemblyContentView: UIView { label.font = WPStyleGuide.fontForTextStyle(.title1, fontWeight: .bold) label.textColor = .text - if FeatureFlag.siteCreationDomainPurchasing.enabled { + if siteCreator.domainPurchasingEnabled { label.textAlignment = .natural } else { label.textAlignment = .center diff --git a/WordPress/Classes/ViewRelated/Site Creation/Shared/SiteCreationAnalyticsEvent.swift b/WordPress/Classes/ViewRelated/Site Creation/Shared/SiteCreationAnalyticsEvent.swift new file mode 100644 index 000000000000..f40209048265 --- /dev/null +++ b/WordPress/Classes/ViewRelated/Site Creation/Shared/SiteCreationAnalyticsEvent.swift @@ -0,0 +1,5 @@ +import Foundation + +enum SiteCreationAnalyticsEvent: String { + case domainPurchasingExperiment = "site_creation_domain_purchasing_experiment" +} diff --git a/WordPress/Classes/ViewRelated/Site Creation/Shared/SiteCreationAnalyticsHelper.swift b/WordPress/Classes/ViewRelated/Site Creation/Shared/SiteCreationAnalyticsHelper.swift index c4f8d4c833a9..40370021915f 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Shared/SiteCreationAnalyticsHelper.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Shared/SiteCreationAnalyticsHelper.swift @@ -7,6 +7,8 @@ extension Variation { switch self { case .treatment: return "treatment" + case .customTreatment: + return "custom_treatment" case .control: return "control" } @@ -23,6 +25,25 @@ class SiteCreationAnalyticsHelper { private static let variationKey = "variation" private static let siteNameKey = "site_name" private static let recommendedKey = "recommended" + private static let customTreatmentNameKey = "custom_treatment_variation_name" + + // MARK: - Lifecycle + static func trackSiteCreationAccessed(source: String) { + WPAnalytics.track(.enhancedSiteCreationAccessed, withProperties: ["source": source]) + + if FeatureFlag.siteCreationDomainPurchasing.enabled { + let domainPurchasingExperimentProperties: [String: String] = { + var dict: [String: String] = [Self.variationKey: ABTest.siteCreationDomainPurchasing.variation.tracksProperty] + + if case let .customTreatment(name) = ABTest.siteCreationDomainPurchasing.variation { + dict[Self.customTreatmentNameKey] = name + } + + return dict + }() + Self.track(.domainPurchasingExperiment, properties: domainPurchasingExperimentProperties) + } + } // MARK: - Site Intent static func trackSiteIntentViewed() { @@ -135,6 +156,11 @@ class SiteCreationAnalyticsHelper { } // MARK: - Common + private static func track(_ event: SiteCreationAnalyticsEvent, properties: [String: String] = [:]) { + let event = AnalyticsEvent(name: event.rawValue, properties: properties) + WPAnalytics.track(event) + } + private static func commonProperties(_ properties: Any?...) -> [AnyHashable: Any] { var result: [AnyHashable: Any] = [:] diff --git a/WordPress/Classes/ViewRelated/Site Creation/Web Address/AddressTableViewCell.swift b/WordPress/Classes/ViewRelated/Site Creation/Web Address/AddressTableViewCell.swift index 7e305ff31bab..627b81c35fc1 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Web Address/AddressTableViewCell.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Web Address/AddressTableViewCell.swift @@ -5,7 +5,9 @@ final class AddressTableViewCell: UITableViewCell { // MARK: - Dependencies - private let domainPurchasingEnabled = FeatureFlag.siteCreationDomainPurchasing.enabled + private var domainPurchasingEnabled: Bool { + FeatureFlag.siteCreationDomainPurchasing.enabled && ABTest.siteCreationDomainPurchasing.isTreatmentVariation + } // MARK: - Views diff --git a/WordPress/Classes/ViewRelated/Site Creation/Web Address/WebAddressWizardContent.swift b/WordPress/Classes/ViewRelated/Site Creation/Web Address/WebAddressWizardContent.swift index d300d19b614b..7bf39b69a59d 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Web Address/WebAddressWizardContent.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Web Address/WebAddressWizardContent.swift @@ -20,8 +20,10 @@ final class WebAddressWizardContent: CollapsableHeaderViewController { return .hidden } - /// Checks if the Domain Purchasing Feature Flag is enabled - private let domainPurchasingEnabled = FeatureFlag.siteCreationDomainPurchasing.enabled + /// Checks if the Domain Purchasing Feature Flag and AB Experiment are enabled + private var domainPurchasingEnabled: Bool { + return siteCreator.domainPurchasingEnabled + } /// The creator collects user input as they advance through the wizard flow. private let siteCreator: SiteCreator @@ -146,7 +148,7 @@ final class WebAddressWizardContent: CollapsableHeaderViewController { } private func configureUIIfNeeded() { - guard FeatureFlag.siteCreationDomainPurchasing.enabled else { + guard domainPurchasingEnabled else { return } @@ -160,7 +162,7 @@ final class WebAddressWizardContent: CollapsableHeaderViewController { private func loadHeaderView() { - if FeatureFlag.siteCreationDomainPurchasing.enabled { + if domainPurchasingEnabled { searchBar.searchBarStyle = UISearchBar.Style.default searchBar.translatesAutoresizingMaskIntoConstraints = false WPStyleGuide.configureSearchBar(searchBar, backgroundColor: .clear, returnKeyType: .search) @@ -215,9 +217,9 @@ final class WebAddressWizardContent: CollapsableHeaderViewController { updateNoResultsLabelTopInset() coordinator.animate(alongsideTransition: nil) { [weak self] (_) in - guard let `self` = self else { return } + guard let self else { return } - if FeatureFlag.siteCreationDomainPurchasing.enabled { + if self.domainPurchasingEnabled { if !self.siteTemplateHostingController.view.isHidden { self.updateTitleViewVisibility(true) } @@ -332,7 +334,7 @@ final class WebAddressWizardContent: CollapsableHeaderViewController { } private func restoreSearchIfNeeded() { - if FeatureFlag.siteCreationDomainPurchasing.enabled { + if domainPurchasingEnabled { search(searchBar.text) } else { search(query(from: searchTextField)) @@ -422,7 +424,7 @@ final class WebAddressWizardContent: CollapsableHeaderViewController { "search_term": lastSearchQuery as AnyObject ] - if FeatureFlag.siteCreationDomainPurchasing.enabled { + if domainPurchasingEnabled { domainSuggestionProperties["domain_cost"] = domainSuggestion.costString } @@ -447,7 +449,7 @@ final class WebAddressWizardContent: CollapsableHeaderViewController { // MARK: - Search logic private func setAddressHintVisibility(isHidden: Bool) { - if FeatureFlag.siteCreationDomainPurchasing.enabled { + if domainPurchasingEnabled { siteTemplateHostingController.view?.isHidden = isHidden } else { sitePromptView.isHidden = isHidden @@ -455,7 +457,7 @@ final class WebAddressWizardContent: CollapsableHeaderViewController { } private func addAddressHintView() { - if FeatureFlag.siteCreationDomainPurchasing.enabled { + if domainPurchasingEnabled { guard let siteCreationView = siteTemplateHostingController.view else { return } @@ -661,7 +663,7 @@ extension WebAddressWizardContent: UITableViewDelegate { let domainSuggestion = data[indexPath.row] self.selectedDomain = domainSuggestion - if FeatureFlag.siteCreationDomainPurchasing.enabled { + if domainPurchasingEnabled { searchBar.resignFirstResponder() } else { searchTextField.resignFirstResponder() diff --git a/WordPress/Classes/ViewRelated/Site Creation/Wizard/SiteCreator.swift b/WordPress/Classes/ViewRelated/Site Creation/Wizard/SiteCreator.swift index 3aa83891d526..f879b7211708 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Wizard/SiteCreator.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Wizard/SiteCreator.swift @@ -55,9 +55,14 @@ final class SiteCreator { information?.title != nil } + /// Checks if the Domain Purchasing Feature Flag and AB Experiment are enabled + var domainPurchasingEnabled: Bool { + FeatureFlag.siteCreationDomainPurchasing.enabled && ABTest.siteCreationDomainPurchasing.isTreatmentVariation + } + /// Flag indicating whether the domain checkout flow should appear or not. var shouldShowDomainCheckout: Bool { - return FeatureFlag.siteCreationDomainPurchasing.enabled && !(address?.isFree ?? false) + domainPurchasingEnabled && !(address?.isFree ?? false) } /// Returns the domain suggestion if there's one, diff --git a/WordPress/Jetpack/AppConstants.swift b/WordPress/Jetpack/AppConstants.swift index 93dbddefad29..cd71b0e53e52 100644 --- a/WordPress/Jetpack/AppConstants.swift +++ b/WordPress/Jetpack/AppConstants.swift @@ -14,6 +14,7 @@ import WordPressKit static let shareAppName: ShareAppName = .jetpack static let mobileAnnounceAppId = "6" @objc static let eventNamePrefix = "jpios" + @objc static let explatPlatform = "wpios" @objc static let authKeychainServiceName = "jetpack.public-api.wordpress.com" /// Notifications Constants diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index cc73e223553a..e66d539178a2 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -3532,6 +3532,8 @@ F44FB6CB287895AF0001E3CE /* SuggestionsListViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F44FB6CA287895AF0001E3CE /* SuggestionsListViewModelTests.swift */; }; F44FB6CD287897F90001E3CE /* SuggestionsTableViewMockDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F44FB6CC287897F90001E3CE /* SuggestionsTableViewMockDelegate.swift */; }; F44FB6D12878A1020001E3CE /* user-suggestions.json in Resources */ = {isa = PBXBuildFile; fileRef = F44FB6D02878A1020001E3CE /* user-suggestions.json */; }; + F45326D829F6B8A6005F9F31 /* SiteCreationAnalyticsEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = F45326D729F6B8A6005F9F31 /* SiteCreationAnalyticsEvent.swift */; }; + F45326D929F6B8A6005F9F31 /* SiteCreationAnalyticsEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = F45326D729F6B8A6005F9F31 /* SiteCreationAnalyticsEvent.swift */; }; F4552086299D147B00D9F6A8 /* BlockedSite.swift in Sources */ = {isa = PBXBuildFile; fileRef = F48D44B5298992C30051EAA6 /* BlockedSite.swift */; }; F465976E28E4669200D5F49A /* cool-green-icon-app-76@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F465976928E4669200D5F49A /* cool-green-icon-app-76@2x.png */; }; F465976F28E4669200D5F49A /* cool-green-icon-app-76.png in Resources */ = {isa = PBXBuildFile; fileRef = F465976A28E4669200D5F49A /* cool-green-icon-app-76.png */; }; @@ -8890,6 +8892,7 @@ F44FB6CA287895AF0001E3CE /* SuggestionsListViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionsListViewModelTests.swift; sourceTree = ""; }; F44FB6CC287897F90001E3CE /* SuggestionsTableViewMockDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionsTableViewMockDelegate.swift; sourceTree = ""; }; F44FB6D02878A1020001E3CE /* user-suggestions.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "user-suggestions.json"; sourceTree = ""; }; + F45326D729F6B8A6005F9F31 /* SiteCreationAnalyticsEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiteCreationAnalyticsEvent.swift; sourceTree = ""; }; F465976928E4669200D5F49A /* cool-green-icon-app-76@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "cool-green-icon-app-76@2x.png"; sourceTree = ""; }; F465976A28E4669200D5F49A /* cool-green-icon-app-76.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "cool-green-icon-app-76.png"; sourceTree = ""; }; F465976B28E4669200D5F49A /* cool-green-icon-app-60@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "cool-green-icon-app-60@3x.png"; sourceTree = ""; }; @@ -10348,7 +10351,7 @@ path = Classes; sourceTree = ""; }; - 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { + 29B97314FDCFA39411CA2CEA = { isa = PBXGroup; children = ( 3F20FDF3276BF21000DA3CAD /* Packages */, @@ -12520,6 +12523,7 @@ 738B9A5D21B8632E0005062B /* UITableView+Header.swift */, 738B9A5B21B85EB00005062B /* UIView+ContentLayout.swift */, 46D6114E2555DAED00B0B7BB /* SiteCreationAnalyticsHelper.swift */, + F45326D729F6B8A6005F9F31 /* SiteCreationAnalyticsEvent.swift */, ); path = Shared; sourceTree = ""; @@ -18630,14 +18634,14 @@ bg, sk, ); - mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; + mainGroup = 29B97314FDCFA39411CA2CEA; packageReferences = ( 3FF1442E266F3C2400138163 /* XCRemoteSwiftPackageReference "ScreenObject" */, 3FC2C33B26C4CF0A00C6D98F /* XCRemoteSwiftPackageReference "XCUITestHelpers" */, 17A8858B2757B97F0071FCA3 /* XCRemoteSwiftPackageReference "AutomatticAbout-swift" */, 3F2B62DA284F4E0B0008CD59 /* XCRemoteSwiftPackageReference "Charts" */, 3F3B23C02858A1B300CACE60 /* XCRemoteSwiftPackageReference "test-collector-swift" */, - 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios" */, + 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios.git" */, 3F338B6F289BD3040014ADC5 /* XCRemoteSwiftPackageReference "Nimble" */, ); productRefGroup = 19C28FACFE9D520D11CA2CBB /* Products */; @@ -19844,6 +19848,7 @@ inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Apps-WordPress/Pods-Apps-WordPress-frameworks.sh", "${BUILT_PRODUCTS_DIR}/Sentry/Sentry.framework", + "${BUILT_PRODUCTS_DIR}/SentryPrivate/SentryPrivate.framework", "${PODS_XCFRAMEWORKS_BUILD_DIR}/ZendeskCommonUISDK/CommonUISDK.framework/CommonUISDK", "${PODS_XCFRAMEWORKS_BUILD_DIR}/ZendeskCoreSDK/ZendeskCoreSDK.framework/ZendeskCoreSDK", "${PODS_XCFRAMEWORKS_BUILD_DIR}/ZendeskMessagingAPISDK/MessagingAPI.framework/MessagingAPI", @@ -19855,6 +19860,7 @@ name = "[CP] Embed Pods Frameworks"; outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sentry.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SentryPrivate.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CommonUISDK.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZendeskCoreSDK.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MessagingAPI.framework", @@ -20494,6 +20500,7 @@ inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Apps-Jetpack/Pods-Apps-Jetpack-frameworks.sh", "${BUILT_PRODUCTS_DIR}/Sentry/Sentry.framework", + "${BUILT_PRODUCTS_DIR}/SentryPrivate/SentryPrivate.framework", "${PODS_XCFRAMEWORKS_BUILD_DIR}/ZendeskCommonUISDK/CommonUISDK.framework/CommonUISDK", "${PODS_XCFRAMEWORKS_BUILD_DIR}/ZendeskCoreSDK/ZendeskCoreSDK.framework/ZendeskCoreSDK", "${PODS_XCFRAMEWORKS_BUILD_DIR}/ZendeskMessagingAPISDK/MessagingAPI.framework/MessagingAPI", @@ -20505,6 +20512,7 @@ name = "[CP] Embed Pods Frameworks"; outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sentry.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SentryPrivate.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CommonUISDK.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZendeskCoreSDK.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MessagingAPI.framework", @@ -21079,6 +21087,7 @@ 80A2154629D15B88002FE8EB /* RemoteConfigOverrideStore.swift in Sources */, F4DDE2C229C92F0D00C02A76 /* CrashLogging+Singleton.swift in Sources */, 4629E4212440C5B20002E15C /* GutenbergCoverUploadProcessor.swift in Sources */, + F45326D829F6B8A6005F9F31 /* SiteCreationAnalyticsEvent.swift in Sources */, FF00889F204E01AE007CCE66 /* MediaQuotaCell.swift in Sources */, 982DDF94263238A6002B3904 /* LikeUserPreferredBlog+CoreDataClass.swift in Sources */, F5844B6B235EAF3D007C6557 /* PartScreenPresentationController.swift in Sources */, @@ -23800,6 +23809,7 @@ 8B55F9EE2614D977007D618E /* UnifiedPrologueStatsContentView.swift in Sources */, FABB21932602FC2C00C8785C /* GutenbergTenorMediaPicker.swift in Sources */, 3F8B45A029283D6C00730FA4 /* DashboardMigrationSuccessCell.swift in Sources */, + F45326D929F6B8A6005F9F31 /* SiteCreationAnalyticsEvent.swift in Sources */, FA98B61A29A3BF050071AAE8 /* BlazeCardView.swift in Sources */, FABB21942602FC2C00C8785C /* AztecPostViewController.swift in Sources */, F1585442267D3BF900A2E966 /* CalendarDayToggleButton.swift in Sources */, @@ -30345,7 +30355,7 @@ minimumVersion = 0.3.0; }; }; - 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios" */ = { + 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios.git" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/airbnb/lottie-ios.git"; requirement = { @@ -30426,12 +30436,12 @@ }; 3F411B6E28987E3F002513AE /* Lottie */ = { isa = XCSwiftPackageProductDependency; - package = 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios" */; + package = 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios.git" */; productName = Lottie; }; 3F44DD57289C379C006334CD /* Lottie */ = { isa = XCSwiftPackageProductDependency; - package = 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios" */; + package = 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios.git" */; productName = Lottie; }; 3FC2C33C26C4CF0A00C6D98F /* XCUITestHelpers */ = {