Skip to content

Simplify Experiments into a Swift package #15622

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jun 5, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
653 changes: 0 additions & 653 deletions Experiments/Experiments.xcodeproj/project.pbxproj

This file was deleted.

This file was deleted.

This file was deleted.

11 changes: 0 additions & 11 deletions Experiments/Experiments/Experiments.h

This file was deleted.

1 change: 0 additions & 1 deletion Experiments/Experiments/Experiments.xcconfig

This file was deleted.

22 changes: 0 additions & 22 deletions Experiments/Experiments/Info.plist

This file was deleted.

22 changes: 0 additions & 22 deletions Experiments/ExperimentsTests/Info.plist

This file was deleted.

Original file line number Diff line number Diff line change
@@ -15,10 +15,10 @@
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "0270C08027069A8900FC799F"
BuildableName = "Experiments.framework"
BlueprintIdentifier = "Experiments"
BuildableName = "Experiments"
BlueprintName = "Experiments"
ReferencedContainer = "container:Experiments.xcodeproj">
ReferencedContainer = "container:">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
@@ -30,7 +30,7 @@
shouldUseLaunchSchemeArgsEnv = "YES">
<TestPlans>
<TestPlanReference
reference = "container:ExperimentsTests/Experiments.xctestplan"
reference = "container:Tests/ExperimentsTests/Experiments.xctestplan"
default = "YES">
</TestPlanReference>
</TestPlans>
@@ -55,10 +55,10 @@
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "0270C08027069A8900FC799F"
BuildableName = "Experiments.framework"
BlueprintIdentifier = "Experiments"
BuildableName = "Experiments"
BlueprintName = "Experiments"
ReferencedContainer = "container:Experiments.xcodeproj">
ReferencedContainer = "container:">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
36 changes: 19 additions & 17 deletions Modules/Package.swift
Original file line number Diff line number Diff line change
@@ -15,6 +15,10 @@ let package = Package(
name: "Codegen",
targets: ["Codegen"]
),
.library(
name: "Experiments",
targets: ["Experiments"]
),
.library(
name: "TestKit",
targets: ["TestKit"]
@@ -77,6 +81,12 @@ let package = Package(
name: "Codegen",
exclude: ["README.md", "Sourcery"] // Relative to sources path
),
.target(
name: "Experiments",
dependencies: [
.product(name: "AutomatticTracks", package: "Automattic-Tracks-iOS"),
]
),
.target(
name: "TestKit",
dependencies: ["Difference", "Nimble"]
@@ -114,6 +124,13 @@ let package = Package(
name: "WPMediaPicker",
resources: [.process("Resources")]
),
.testTarget(
name: "ExperimentsTests",
dependencies: [
"Experiments",
.product(name: "AutomatticTracks", package: "Automattic-Tracks-iOS"),
]
),
.testTarget(
name: "WooFoundationTests",
dependencies: ["TestKit", .target(name: "WooFoundation")]
@@ -151,8 +168,6 @@ let package = Package(
// including frameworks with large resources bundled into multiple targets.

enum XcodeTargetNames {
static let experiments = "Experiments"
static let experimentsTests = "ExperimentsTests"
static let fakes = "Fakes"
static let hardware = "Hardware"
static let hardwareTests = "HardwareTests"
@@ -178,8 +193,6 @@ enum XcodeTargetNames {
enum XcodeSupport {
static var products: [Product] {
[
XcodeTargetNames.experiments,
XcodeTargetNames.experimentsTests,
XcodeTargetNames.fakes,
XcodeTargetNames.hardware,
XcodeTargetNames.hardwareTests,
@@ -205,19 +218,6 @@ enum XcodeSupport {

static var targets: [Target] {
[
.xcodeTarget(
XcodeTargetNames.experiments,
dependencies: [
.product(name: "AutomatticTracks", package: "Automattic-Tracks-iOS"),
]
),
.xcodeTarget(
XcodeTargetNames.experimentsTests,
dependencies: [
.product(name: "AutomatticTracks", package: "Automattic-Tracks-iOS"),
XcodeTargetNames.experiments.asDependency
]
),
.xcodeTarget(
XcodeTargetNames.fakes,
dependencies: ["Codegen"]
@@ -284,6 +284,7 @@ enum XcodeSupport {
.xcodeTarget(
XcodeTargetNames.storeWidgetsExtension,
dependencies: [
"Experiments",
"WooFoundation",
.product(name: "KeychainAccess", package: "KeychainAccess"),
]
@@ -299,6 +300,7 @@ enum XcodeSupport {
XcodeTargetNames.wooCommerce,
dependencies: [
"Codegen",
"Experiments",
"WooFoundation",
"WordPressShared",
"WordPressUI",
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -14,8 +14,8 @@
"testTargets" : [
{
"target" : {
"containerPath" : "container:Experiments.xcodeproj",
"identifier" : "0270C08927069A8900FC799F",
"containerPath" : "container:",
"identifier" : "ExperimentsTests",
"name" : "ExperimentsTests"
}
}
3 changes: 0 additions & 3 deletions WooCommerce.xcworkspace/contents.xcworkspacedata

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import Foundation
import KeychainAccess
import Networking
import UserNotifications
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Explanation for why this and the Foundation import below are here can be found in #15698


/// View Model for the `OrderNotificationViewController`type.
///
2 changes: 2 additions & 0 deletions WooCommerce/StoreWidgets/StoreInfoDataService.swift
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import Foundation

#if canImport(Networking)
import Networking
#elseif canImport(NetworkingWatchOS)
6 changes: 0 additions & 6 deletions WooCommerce/WooCommerce.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
@@ -492,8 +492,6 @@
02A9BCD62737F73C00159C79 /* JetpackBenefitItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02A9BCD52737F73C00159C79 /* JetpackBenefitItem.swift */; };
02AA586628531D0E0068B6F0 /* CloseAccountCoordinatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02AA586528531D0E0068B6F0 /* CloseAccountCoordinatorTests.swift */; };
02AAD54525023A8300BA1E26 /* ProductFormRemoteActionUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02AAD54425023A8300BA1E26 /* ProductFormRemoteActionUseCase.swift */; };
02AB82EC27069D5D008D7334 /* Experiments.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 02AB82EB27069D5D008D7334 /* Experiments.framework */; };
02AB82ED27069D5D008D7334 /* Experiments.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 02AB82EB27069D5D008D7334 /* Experiments.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
02AC30CF2888EC8100146A25 /* WooAnalyticsEvent+LoginOnboarding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02AC30CE2888EC8100146A25 /* WooAnalyticsEvent+LoginOnboarding.swift */; };
02AC822C2498BC9700A615FB /* ProductFormViewModel+UpdatesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02AC822B2498BC9700A615FB /* ProductFormViewModel+UpdatesTests.swift */; };
02ACD25A2852E11700EC928E /* CloseAccountCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02ACD2592852E11700EC928E /* CloseAccountCoordinator.swift */; };
@@ -1165,7 +1163,6 @@
26D1E9E82949818B00A7DC62 /* AnalyticsHubTimeRageAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26D1E9E72949818B00A7DC62 /* AnalyticsHubTimeRageAdapter.swift */; };
26D57CF72B59820600E8EFB8 /* View+ContainerBackground.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26D57CF62B59820600E8EFB8 /* View+ContainerBackground.swift */; };
26D86B692C50110600435411 /* TopPerformersCardDataSyncUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26D86B682C50110600435411 /* TopPerformersCardDataSyncUseCase.swift */; };
26D9E54828C10A3B0098DF26 /* Experiments.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26D9E54728C10A3B0098DF26 /* Experiments.framework */; };
26DB7E3528636D2200506173 /* NonEditableOrderBanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26DB7E3428636D2200506173 /* NonEditableOrderBanner.swift */; };
26DD32D42BEBCDFB00F2C69C /* WooConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D1AFBF20BC67C200DB0E8C /* WooConstants.swift */; };
26DD32D62BEBCE3900F2C69C /* UserDefaults+Woo.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5AA7B3E20ED81C2004DA14F /* UserDefaults+Woo.swift */; };
@@ -3259,7 +3256,6 @@
3F09A3FE2D243D3F00D8ACCE /* WordPressAuthenticator.framework in Embed Frameworks */,
D88FDB4625DD223B00CB0DBD /* Hardware.framework in Embed Frameworks */,
B5C3B5EA20D189FC0072CB9D /* Storage.framework in Embed Frameworks */,
02AB82ED27069D5D008D7334 /* Experiments.framework in Embed Frameworks */,
B5C3B5E920D189F70072CB9D /* Yosemite.framework in Embed Frameworks */,
B5C3B5E820D189F30072CB9D /* Networking.framework in Embed Frameworks */,
3F0904152D26A40800D8ACCE /* WordPressAuthenticator.framework in Embed Frameworks */,
@@ -6469,7 +6465,6 @@
260DE20C28CA8F31009ECD7C /* Networking.framework in Frameworks */,
3F1FA84328B60125009E246C /* SwiftUI.framework in Frameworks */,
3F1FA84228B60125009E246C /* WidgetKit.framework in Frameworks */,
26D9E54828C10A3B0098DF26 /* Experiments.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -6495,7 +6490,6 @@
3F2B4AEE2DDC31A200E5E49C /* XcodeTarget_WooCommerce in Frameworks */,
3F0904142D26A40800D8ACCE /* WordPressAuthenticator.framework in Frameworks */,
B5C3B5E320D189E60072CB9D /* Networking.framework in Frameworks */,
02AB82EC27069D5D008D7334 /* Experiments.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
82 changes: 41 additions & 41 deletions WooCommerce/WooCommerceTests/UnitTests.xctestplan
Original file line number Diff line number Diff line change
@@ -29,13 +29,6 @@
"testRepetitionMode" : "retryOnFailure"
},
"testTargets" : [
{
"target" : {
"containerPath" : "container:..\/Modules",
"identifier" : "WooFoundationTests",
"name" : "WooFoundationTests"
}
},
{
"target" : {
"containerPath" : "container:..\/Modules",
@@ -45,32 +38,9 @@
},
{
"target" : {
"containerPath" : "container:..\/Modules",
"identifier" : "WordPressSharedObjCTests",
"name" : "WordPressSharedObjCTests"
}
},
{
"skippedTests" : [
"InAppPurchasesOrderResultMapperTests",
"InAppPurchasesOrderResultMapperTests\/test_iap_order_creation_is_decoded_from_json_response()",
"InAppPurchasesProductsMapperTests",
"InAppPurchasesRemoteTests",
"InAppPurchasesRemoteTests\/test_load_products_returns_list_of_products()",
"InAppPurchasesRemoteTests\/test_purchase_product_returns_created_order()",
"InAppPurchasesRemoteTests\/test_retrieveHandledTransactionSiteID_when_fails_to_retrieve_response_then_returns_network_error()",
"InAppPurchasesRemoteTests\/test_retrieveHandledTransactionSiteID_when_success_to_retrieve_response_and_transaction_is_handled_then_returns_siteID()",
"InAppPurchasesRemoteTests\/test_retrieveHandledTransactionSiteID_when_success_to_retrieve_response_and_transaction_is_not_handled_then_returns_errorResponse()",
"InAppPurchasesTransactionMapperTests",
"InAppPurchasesTransactionMapperTests\/test_iap_handled_transaction_is_decoded_from_json_response()",
"InAppPurchasesTransactionMapperTests\/test_iap_unhandled_transaction_is_decoded_from_json_response()",
"WCPayRemoteTests\/test_loadAccount_properly_handles_implicitly_not_eligible_for_card_present_payments()",
"WCPayRemoteTests\/test_loadAccount_properly_handles_not_eligible_for_card_present_payments()"
],
"target" : {
"containerPath" : "container:..\/Networking\/Networking.xcodeproj",
"identifier" : "B557D9EB209753AA005962F4",
"name" : "NetworkingTests"
"containerPath" : "container:..\/Hardware\/Hardware.xcodeproj",
"identifier" : "D88FDB0725DD216B00CB0DBD",
"name" : "HardwareTests"
}
},
{
@@ -82,9 +52,9 @@
},
{
"target" : {
"containerPath" : "container:..\/Yosemite\/Yosemite.xcodeproj",
"identifier" : "B5C9DDFD2087FEC0006B910A",
"name" : "YosemiteTests"
"containerPath" : "container:..\/Modules",
"identifier" : "WooFoundationTests",
"name" : "WooFoundationTests"
}
},
{
@@ -112,15 +82,38 @@
},
{
"target" : {
"containerPath" : "container:..\/Hardware\/Hardware.xcodeproj",
"identifier" : "D88FDB0725DD216B00CB0DBD",
"name" : "HardwareTests"
"containerPath" : "container:..\/Yosemite\/Yosemite.xcodeproj",
"identifier" : "B5C9DDFD2087FEC0006B910A",
"name" : "YosemiteTests"
}
},
{
"skippedTests" : [
"InAppPurchasesOrderResultMapperTests",
"InAppPurchasesOrderResultMapperTests\/test_iap_order_creation_is_decoded_from_json_response()",
"InAppPurchasesProductsMapperTests",
"InAppPurchasesRemoteTests",
"InAppPurchasesRemoteTests\/test_load_products_returns_list_of_products()",
"InAppPurchasesRemoteTests\/test_purchase_product_returns_created_order()",
"InAppPurchasesRemoteTests\/test_retrieveHandledTransactionSiteID_when_fails_to_retrieve_response_then_returns_network_error()",
"InAppPurchasesRemoteTests\/test_retrieveHandledTransactionSiteID_when_success_to_retrieve_response_and_transaction_is_handled_then_returns_siteID()",
"InAppPurchasesRemoteTests\/test_retrieveHandledTransactionSiteID_when_success_to_retrieve_response_and_transaction_is_not_handled_then_returns_errorResponse()",
"InAppPurchasesTransactionMapperTests",
"InAppPurchasesTransactionMapperTests\/test_iap_handled_transaction_is_decoded_from_json_response()",
"InAppPurchasesTransactionMapperTests\/test_iap_unhandled_transaction_is_decoded_from_json_response()",
"WCPayRemoteTests\/test_loadAccount_properly_handles_implicitly_not_eligible_for_card_present_payments()",
"WCPayRemoteTests\/test_loadAccount_properly_handles_not_eligible_for_card_present_payments()"
],
"target" : {
"containerPath" : "container:..\/Experiments\/Experiments.xcodeproj",
"identifier" : "0270C08927069A8900FC799F",
"containerPath" : "container:..\/Networking\/Networking.xcodeproj",
"identifier" : "B557D9EB209753AA005962F4",
"name" : "NetworkingTests"
}
},
{
"target" : {
"containerPath" : "container:..\/Modules",
"identifier" : "ExperimentsTests",
"name" : "ExperimentsTests"
}
},
@@ -131,6 +124,13 @@
"identifier" : "3F0904072D26A40800D8ACCE",
"name" : "WordPressAuthenticatorTests"
}
},
{
"target" : {
"containerPath" : "container:..\/Modules",
"identifier" : "WordPressSharedObjCTests",
"name" : "WordPressSharedObjCTests"
}
}
],
"version" : 1