Skip to content

Commit 018da55

Browse files
authored
Move BuildConfiguration to BuildSettingsKit (#24276)
* Move BuildConfiguration to BuildSettingsKit * Rename .localDeveloper to .debug * Remove ~= operation for BuildConfiguration * Rename .appStore * Update unit tests * Update CompliancePopoverViewModelTests
1 parent c6cb510 commit 018da55

27 files changed

+64
-61
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/// The configuration the app was compiled with.
2+
public enum BuildConfiguration: String, Sendable {
3+
/// Development build, usually run from Xcode.
4+
case debug
5+
6+
/// Preproduction builds for Automattic employees.
7+
case alpha
8+
9+
/// Production build released in the app store.
10+
case release
11+
12+
public static var current: BuildConfiguration {
13+
BuildSettings.current.configuration
14+
}
15+
16+
/// Returns `true` if the build is intented only for internal use.
17+
public var isInternal: Bool {
18+
switch self {
19+
case .debug, .alpha: true
20+
case .release: false
21+
}
22+
}
23+
}

Modules/Sources/BuildSettingsKit/BuildSettings+Live.swift

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ extension BuildSettings {
44
static let live = BuildSettings(bundle: .app)
55

66
init(bundle: Bundle) {
7+
configuration = BuildConfiguration(rawValue: bundle.infoValue(forKey: "WPBuildConfiguration"))!
78
brand = AppBrand(rawValue: bundle.infoValue(forKey: "WPAppBrand"))!
89
pushNotificationAppID = bundle.infoValue(forKey: "WPPushNotificationAppID")
910
appGroupName = bundle.infoValue(forKey: "WPAppGroupName")

Modules/Sources/BuildSettingsKit/BuildSettings+Preview.swift

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import Foundation
33
/// The container for Xcode previews.
44
extension BuildSettings {
55
nonisolated(unsafe) static var preview = BuildSettings(
6+
configuration: .debug,
67
brand: .jetpack,
78
pushNotificationAppID: "xcpreview_push_notification_id",
89
appGroupName: "xcpreview_app_group_name",

Modules/Sources/BuildSettingsKit/BuildSettings.swift

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import Foundation
1212
/// - **Test** – `BuildSettings` are not available when running unit tests as
1313
/// they are incompatible with parallelized tests and are generally not recommended.
1414
public struct BuildSettings: Sendable {
15+
public var configuration: BuildConfiguration
1516
public var brand: AppBrand
1617
public var pushNotificationAppID: String
1718
public var appGroupName: String

WordPress/Classes/Services/Page Layouts/PageLayoutService.swift

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import UIKit
2+
import BuildSettingsKit
23
import CoreData
34
import Gutenberg
45
import WordPressKit
@@ -65,7 +66,7 @@ class PageLayoutService {
6566
}
6667

6768
private static let supportedBlocks: String = {
68-
let isDevMode = BuildConfiguration.current ~= [.localDeveloper, .alpha]
69+
let isDevMode = BuildConfiguration.current.isInternal
6970
return Gutenberg.supportedBlocks(isDev: isDevMode).joined(separator: ",")
7071
}()
7172

@@ -74,7 +75,7 @@ class PageLayoutService {
7475
private static let type = "mobile"
7576

7677
// Return "true" or "false" for isBeta that gets passed into the endpoint.
77-
private static let isBeta = String(BuildConfiguration.current ~= [.localDeveloper, .alpha])
78+
private static let isBeta = String(BuildConfiguration.current.isInternal)
7879

7980
}
8081

WordPress/Classes/System/WordPressAppDelegate.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -548,7 +548,7 @@ extension WordPressAppDelegate {
548548
/// Otherwise an anonymous remote will be used
549549
func updateFeatureFlags(authToken: String? = nil, completion: (() -> Void)? = nil) {
550550
// Enable certain feature flags on test builds.
551-
if BuildConfiguration.current ~= [.alpha, .localDeveloper] {
551+
if BuildConfiguration.current.isInternal {
552552
FeatureFlagOverrideStore().override(RemoteFeatureFlag.dotComWebLogin, withValue: true)
553553
}
554554

WordPress/Classes/Utility/BuildInformation/BuildConfiguration.swift

-28
This file was deleted.

WordPress/Classes/Utility/BuildInformation/FeatureFlag.swift

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import BuildSettingsKit
2+
13
/// FeatureFlag exposes a series of features to be conditionally enabled on
24
/// different builds.
35
@objc
@@ -50,9 +52,9 @@ enum FeatureFlag: Int, CaseIterable {
5052
case .bloggingPrompts:
5153
return AppConfiguration.isJetpack
5254
case .jetpackDisconnect:
53-
return BuildConfiguration.current == .localDeveloper
55+
return BuildConfiguration.current == .debug
5456
case .siteIconCreator:
55-
return BuildConfiguration.current != .appStore
57+
return BuildConfiguration.current.isInternal
5658
case .betaSiteDesigns:
5759
return false
5860
case .commentModerationUpdate:
@@ -62,7 +64,7 @@ enum FeatureFlag: Int, CaseIterable {
6264
case .googleDomainsCard:
6365
return false
6466
case .voiceToContent:
65-
return AppConfiguration.isJetpack && BuildConfiguration.current ~= [.localDeveloper, .alpha]
67+
return AppConfiguration.isJetpack && BuildConfiguration.current.isInternal
6668
case .authenticateUsingApplicationPassword:
6769
return false
6870
case .newGutenberg:

WordPress/Classes/Utility/BuildInformation/RemoteFeatureFlag.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Foundation
2+
import BuildSettingsKit
23

34
@objc
45
enum RemoteFeatureFlag: Int, CaseIterable {
@@ -83,7 +84,7 @@ enum RemoteFeatureFlag: Int, CaseIterable {
8384
case .inAppUpdates:
8485
return false
8586
case .gravatarQuickEditor:
86-
return BuildConfiguration.current ~= [.localDeveloper, .alpha]
87+
return BuildConfiguration.current.isInternal
8788
case .dotComWebLogin:
8889
return false
8990
}

WordPress/Classes/Utility/KeychainTools.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Foundation
2+
import BuildSettingsKit
23
import Security
34
import WordPressShared
45

@@ -23,7 +24,7 @@ final class KeychainTools: NSObject {
2324
/// - Attention: This is only enabled in debug builds.
2425
///
2526
@objc static func processKeychainDebugArguments() {
26-
guard BuildConfiguration.current == .localDeveloper else {
27+
guard BuildConfiguration.current == .debug else {
2728
return
2829
}
2930

WordPress/Classes/Utility/Logging/WPCrashLoggingProvider.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import UIKit
2+
import BuildSettingsKit
23
import Combine
34
import AutomatticTracks
45
import AutomatticEncryptedLogs
@@ -50,7 +51,7 @@ struct WPCrashLoggingDataProvider: CrashLoggingDataProvider {
5051
return UserSettings.userHasOptedOutOfCrashLogging
5152
}
5253

53-
var buildType: String = BuildConfiguration.current.rawValue
54+
var buildType: String { BuildConfiguration.current.rawValue }
5455

5556
var shouldEnableAutomaticSessionTracking: Bool {
5657
return !UserSettings.userHasOptedOutOfCrashLogging

WordPress/Classes/Utility/Universal Links/UniversalLinkRouter.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Foundation
2+
import BuildSettingsKit
23

34
protocol LinkRouter {
45
init(routes: [Route])
@@ -12,7 +13,7 @@ protocol LinkRouter {
1213
struct UniversalLinkRouter: LinkRouter {
1314
private let matcher: RouteMatcher
1415

15-
private static let extraLoggingEnabled = BuildConfiguration.current == .localDeveloper
16+
private static let extraLoggingEnabled = BuildConfiguration.current == .debug
1617

1718
init(routes: [Route]) {
1819
matcher = RouteMatcher(routes: routes)

WordPress/Classes/ViewRelated/Me/App Settings/AppSettingsViewController.swift

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Foundation
2+
import BuildSettingsKit
23
import UIKit
34
import SwiftUI
45
import Gridicons

WordPress/Classes/ViewRelated/Me/App Settings/DebugMenuViewController.swift

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import UIKit
22
import AutomatticTracks
3+
import BuildSettingsKit
34
import SwiftUI
45
import WordPressFlux
56
import TipKit

WordPress/Classes/ViewRelated/NUX/Helpers/WordPressAuthenticationManager.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Foundation
2+
import BuildSettingsKit
23
import SFHFKeychainUtils
34
import WordPressAuthenticator
45
import WordPressShared
@@ -59,7 +60,7 @@ extension WordPressAuthenticationManager {
5960
private func authenticatorConfiguation() -> WordPressAuthenticatorConfiguration {
6061
// SIWA can not be enabled for internal builds
6162
// Ref https://github.com/wordpress-mobile/WordPress-iOS/pull/12332#issuecomment-521994963
62-
let enableSignInWithApple = !(BuildConfiguration.current ~= [.alpha])
63+
let enableSignInWithApple = BuildConfiguration.current != .alpha
6364

6465
return WordPressAuthenticatorConfiguration(
6566
wpcomClientId: ApiCredentials.client,

WordPress/Info.plist

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
<string>wpios</string>
1717
<key>WPItunesAppID</key>
1818
<string>335703880</string>
19+
<key>WPBuildConfiguration</key>
20+
<string>${WP_BUILD_CONFIGURATION}</string>
1921
<key>BGTaskSchedulerPermittedIdentifiers</key>
2022
<array>
2123
<string>org.wordpress.bgtask.weeklyroundup</string>

WordPress/Jetpack/Classes/Utility/DataMigrator.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,15 @@ final class DataMigrator {
2424
private let keychainUtils: KeychainUtils
2525
private let localDefaults: UserPersistentRepository
2626
private let sharedDefaults: UserPersistentRepository?
27-
private let crashLogger: CrashLogging
27+
private let crashLogger: CrashLogging?
2828
private let appGroupName: String
2929

3030
init(coreDataStack: CoreDataStack = ContextManager.shared,
3131
backupLocation: URL? = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: BuildSettings.current.appGroupName)?.appendingPathComponent("WordPress.sqlite"),
3232
keychainUtils: KeychainUtils = KeychainUtils(),
3333
localDefaults: UserPersistentRepository = UserDefaults.standard,
3434
sharedDefaults: UserPersistentRepository? = UserDefaults(suiteName: BuildSettings.current.appGroupName),
35-
crashLogger: CrashLogging = .main,
35+
crashLogger: CrashLogging? = .main,
3636
appGroupName: String = BuildSettings.current.appGroupName) {
3737
self.coreDataStack = coreDataStack
3838
self.backupLocation = backupLocation
@@ -180,7 +180,7 @@ private extension DataMigrator {
180180
private func log(error: DataMigrationError, userInfo: [String: Any] = [:]) {
181181
let userInfo = userInfo.merging(self.userInfo(for: error)) { $1 }
182182
DDLogError("\(error)")
183-
crashLogger.logError(error, userInfo: userInfo, level: .error)
183+
crashLogger?.logError(error, userInfo: userInfo, level: .error)
184184
}
185185

186186
private func userInfo(for error: DataMigrationError) -> [String: Any] {

WordPress/Jetpack/Info.plist

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
<string>wpios</string>
1717
<key>WPItunesAppID</key>
1818
<string>1565481562</string>
19+
<key>WPBuildConfiguration</key>
20+
<string>${WP_BUILD_CONFIGURATION}</string>
1921
<key>BGTaskSchedulerPermittedIdentifiers</key>
2022
<array>
2123
<string>org.wordpress.bgtask.weeklyroundup</string>

WordPress/WordPress.xcodeproj/project.pbxproj

-13
Original file line numberDiff line numberDiff line change
@@ -3112,7 +3112,6 @@
31123112
"Extensions/Colors and Styles/WPStyleGuide+ApplicationStyles.swift",
31133113
"Utility/App Configuration/AppConfiguration.swift",
31143114
"Utility/App Configuration/AppStyleGuide.swift",
3115-
Utility/BuildInformation/BuildConfiguration.swift,
31163115
ViewRelated/Cells/WPReusableTableViewCells.swift,
31173116
ViewRelated/Views/NoResults.storyboard,
31183117
ViewRelated/Views/NoResultsViewController.swift,
@@ -3125,7 +3124,6 @@
31253124
"Extensions/Colors and Styles/WPStyleGuide+ApplicationStyles.swift",
31263125
"Utility/App Configuration/AppConfiguration.swift",
31273126
"Utility/App Configuration/AppStyleGuide.swift",
3128-
Utility/BuildInformation/BuildConfiguration.swift,
31293127
ViewRelated/Cells/WPReusableTableViewCells.swift,
31303128
ViewRelated/Views/NoResults.storyboard,
31313129
ViewRelated/Views/NoResultsViewController.swift,
@@ -3136,7 +3134,6 @@
31363134
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
31373135
membershipExceptions = (
31383136
"Utility/App Configuration/AppConfiguration.swift",
3139-
Utility/BuildInformation/BuildConfiguration.swift,
31403137
);
31413138
target = 7358E6B7210BD318002323EB /* WordPressNotificationServiceExtension */;
31423139
};
@@ -3161,7 +3158,6 @@
31613158
membershipExceptions = (
31623159
"Extensions/Colors and Styles/WPStyleGuide+ApplicationStyles.swift",
31633160
"Utility/App Configuration/AppStyleGuide.swift",
3164-
Utility/BuildInformation/BuildConfiguration.swift,
31653161
ViewRelated/Cells/WPReusableTableViewCells.swift,
31663162
ViewRelated/Views/NoResults.storyboard,
31673163
ViewRelated/Views/NoResultsViewController.swift,
@@ -3173,20 +3169,12 @@
31733169
membershipExceptions = (
31743170
"Extensions/Colors and Styles/WPStyleGuide+ApplicationStyles.swift",
31753171
"Utility/App Configuration/AppStyleGuide.swift",
3176-
Utility/BuildInformation/BuildConfiguration.swift,
31773172
ViewRelated/Cells/WPReusableTableViewCells.swift,
31783173
ViewRelated/Views/NoResults.storyboard,
31793174
ViewRelated/Views/NoResultsViewController.swift,
31803175
);
31813176
target = 8096213028E55C9400940A5D /* JetpackDraftActionExtension */;
31823177
};
3183-
24CE68B82CD3375300C7B37D /* Exceptions for "Classes" folder in "JetpackNotificationServiceExtension" target */ = {
3184-
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
3185-
membershipExceptions = (
3186-
Utility/BuildInformation/BuildConfiguration.swift,
3187-
);
3188-
target = 80F6D01F28EE866A00953C1A /* JetpackNotificationServiceExtension */;
3189-
};
31903178
24CE68BB2CD3375300C7B37D /* Exceptions for "Classes" folder in "JetpackUITests" target */ = {
31913179
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
31923180
membershipExceptions = (
@@ -3208,7 +3196,6 @@
32083196
24CE68B52CD3375300C7B37D /* Exceptions for "Classes" folder in "Jetpack" target */,
32093197
24CE68B62CD3375300C7B37D /* Exceptions for "Classes" folder in "JetpackShareExtension" target */,
32103198
24CE68B72CD3375300C7B37D /* Exceptions for "Classes" folder in "JetpackDraftActionExtension" target */,
3211-
24CE68B82CD3375300C7B37D /* Exceptions for "Classes" folder in "JetpackNotificationServiceExtension" target */,
32123199
24CE68BB2CD3375300C7B37D /* Exceptions for "Classes" folder in "JetpackUITests" target */,
32133200
);
32143201
path = Classes;

WordPress/WordPressTest/DataMigratorTests.swift

+4
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class DataMigratorTests: XCTestCase {
2525
keychainUtils: keychainUtils,
2626
localDefaults: localUserDefaults,
2727
sharedDefaults: sharedUserDefaults,
28+
crashLogger: nil,
2829
appGroupName: appGroupName
2930
)
3031
}
@@ -74,6 +75,7 @@ class DataMigratorTests: XCTestCase {
7475
backupLocation: URL(string: "/dev/null"),
7576
keychainUtils: keychainUtils,
7677
sharedDefaults: nil,
78+
crashLogger: nil,
7779
appGroupName: appGroupName
7880
)
7981

@@ -152,6 +154,7 @@ class DataMigratorTests: XCTestCase {
152154
keychainUtils: keychainUtils,
153155
localDefaults: localUserDefaults,
154156
sharedDefaults: sharedUserDefaults,
157+
crashLogger: nil,
155158
appGroupName: appGroupName
156159
)
157160

@@ -201,6 +204,7 @@ class DataMigratorTests: XCTestCase {
201204
keychainUtils: keychainUtils,
202205
localDefaults: localUserDefaults,
203206
sharedDefaults: sharedUserDefaults,
207+
crashLogger: nil,
204208
appGroupName: appGroupName
205209
)
206210

WordPress/WordPressTest/EUUSCompliance/CompliancePopoverViewModelTests.swift

-6
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,6 @@ final class CompliancePopoverViewModelTests: CoreDataTestCase {
77
override func setUp() {
88
super.setUp()
99
testDefaults?.removeObject(forKey: UserDefaults.didShowCompliancePopupKey)
10-
11-
let windowManager = WindowManager(window: UIWindow())
12-
WordPressAuthenticationManager(
13-
windowManager: windowManager,
14-
remoteFeaturesStore: RemoteFeatureFlagStore()
15-
).initializeWordPressAuthenticator()
1610
}
1711

1812
override func tearDown() {

config/Jetpack.alpha.xcconfig

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22

33
BUILD_SCHEME = Jetpack
44
WP_PUSH_NOTIFICATION_APP_ID = "com.jetpack.alpha"
5+
WP_BUILD_CONFIGURATION = alpha

config/Jetpack.debug.xcconfig

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22

33
BUILD_SCHEME = Jetpack
44
WP_PUSH_NOTIFICATION_APP_ID = "com.jetpack.appstore.dev"
5+
WP_BUILD_CONFIGURATION = debug

config/Jetpack.release.xcconfig

+1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
BUILD_SCHEME = Jetpack
22
WP_PUSH_NOTIFICATION_APP_ID = "com.jetpack.appstore"
3+
WP_BUILD_CONFIGURATION = release

config/WordPress.alpha.xcconfig

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33

44
BUILD_SCHEME = WordPress Alpha
55
WP_PUSH_NOTIFICATION_APP_ID = "org.wordpress.alpha"
6+
WP_BUILD_CONFIGURATION = alpha

config/WordPress.debug.xcconfig

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33

44
BUILD_SCHEME = WordPress
55
WP_PUSH_NOTIFICATION_APP_ID = "org.wordpress.appstore.dev"
6+
WP_BUILD_CONFIGURATION = debug

0 commit comments

Comments
 (0)