Skip to content

Commit e67af5e

Browse files
authored
Merge pull request #2061 from DataDog/release/2.18.0
Release 2.18.0
2 parents e9d153d + 00aee79 commit e67af5e

File tree

173 files changed

+1485
-395
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

173 files changed

+1485
-395
lines changed

.gitlab-ci.yml

+12
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ stages:
99
- dogfood
1010
- release-build
1111
- release-publish
12+
- post
1213

1314
variables:
1415
MAIN_BRANCH: "master"
@@ -401,3 +402,14 @@ Publish CP podspecs (legacy):
401402
- make env-check
402403
- make clean
403404
- make release-publish-legacy-podspecs
405+
406+
# ┌────────────────┐
407+
# │ Notifications: │
408+
# └────────────────┘
409+
410+
# This job runs at the end of every successful pipeline.
411+
# It syncs the GitLab pipeline status with GitHub status checks.
412+
Sync GH Checks:
413+
stage: post
414+
script:
415+
- echo "All good"

BenchmarkTests/BenchmarkTests.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
<EnvironmentVariable
5555
key = "BENCHMARK_RUN"
5656
value = "instrumented"
57-
isEnabled = "YES">
57+
isEnabled = "NO">
5858
</EnvironmentVariable>
5959
<EnvironmentVariable
6060
key = "BENCHMARK_SCENARIO"

BenchmarkTests/Runner/AppDelegate.swift

+3-4
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,11 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
1313
var window: UIWindow?
1414

1515
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
16-
guard
17-
let scenario = SyntheticScenario(),
18-
let run = SyntheticRun()
19-
else {
16+
guard let scenario = SyntheticScenario() else {
2017
return false
2118
}
2219

20+
let run = SyntheticRun()
2321
let applicationInfo = try! AppInfo() // crash if info are missing or malformed
2422

2523
switch run {
@@ -43,6 +41,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
4341
)
4442

4543
DatadogInternal.profiler = Profiler()
44+
case .none:
4645
break
4746
}
4847

BenchmarkTests/Runner/Scenarios/SyntheticScenario.swift

+6-9
Original file line numberDiff line numberDiff line change
@@ -64,20 +64,17 @@ internal enum SyntheticRun: String {
6464
case baseline
6565
case instrumented
6666
case profiling
67+
case none
6768

6869
/// Creates the scenario by reading the `BENCHMARK_RUN` value from the
6970
/// environment variables.
7071
///
7172
/// - Parameter processInfo: The `ProcessInfo` with environment variables
7273
/// configured
73-
init?(processInfo: ProcessInfo = .processInfo) {
74-
guard
75-
let rawValue = processInfo.environment["BENCHMARK_RUN"],
76-
let run = Self(rawValue: rawValue)
77-
else {
78-
return nil
79-
}
80-
81-
self = run
74+
init(processInfo: ProcessInfo = .processInfo) {
75+
self = processInfo
76+
.environment["BENCHMARK_RUN"]
77+
.flatMap(Self.init(rawValue:))
78+
?? .none
8279
}
8380
}

CHANGELOG.md

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
1+
# Unreleased
2+
3+
# 2.18.0 / 25-09-2024
4+
- [IMPROVEMENT] Add overwrite required (breaking) param to addViewLoadingTime & usage telemetry. See [#2040][]
5+
- [FEATURE] Prevent "show password" features from revealing sensitive texts in Session Replay. See [#2050][]
6+
- [FEATURE] Add Fine-Grained Masking configuration options to Session Replay. See [#2043][]
7+
18
# 2.17.0 / 11-09-2024
29

3-
- [FEATURE] Add support for view loading API (addViewLoadingTime). See [#2026][]
10+
- [FEATURE] Add support for view loading experimental API (addViewLoadingTime). See [#2026][]
411
- [IMPROVEMENT] Drop support for deprecated cocoapod specs. See [#1998][]
512
- [FIX] Propagate global Tracer tags to OpenTelemetry span attributes. See [#2000][]
613
- [FEATURE] Add Logs event mapper to ObjC API. See [#2008][]
@@ -764,6 +771,9 @@ Release `2.0` introduces breaking changes. Follow the [Migration Guide](MIGRATIO
764771
[#1998]: https://github.com/DataDog/dd-sdk-ios/pull/1998
765772
[#1966]: https://github.com/DataDog/dd-sdk-ios/pull/1966
766773
[#2026]: https://github.com/DataDog/dd-sdk-ios/pull/2026
774+
[#2043]: https://github.com/DataDog/dd-sdk-ios/pull/2043
775+
[#2040]: https://github.com/DataDog/dd-sdk-ios/pull/2040
776+
[#2050]: https://github.com/DataDog/dd-sdk-ios/pull/2050
767777
[@00fa9a]: https://github.com/00FA9A
768778
[@britton-earnin]: https://github.com/Britton-Earnin
769779
[@hengyu]: https://github.com/Hengyu

Datadog/Datadog.xcodeproj/project.pbxproj

+4-4
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@
250250
61054FC02A6EE1BA00AAA894 /* UITextViewRecorderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61054F782A6EE1BA00AAA894 /* UITextViewRecorderTests.swift */; };
251251
61054FC12A6EE1BA00AAA894 /* ViewTreeRecorderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61054F792A6EE1BA00AAA894 /* ViewTreeRecorderTests.swift */; };
252252
61054FC22A6EE1BA00AAA894 /* ViewTreeSnapshotTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61054F7A2A6EE1BA00AAA894 /* ViewTreeSnapshotTests.swift */; };
253-
61054FC32A6EE1BA00AAA894 /* PrivacyLevelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61054F7B2A6EE1BA00AAA894 /* PrivacyLevelTests.swift */; };
253+
61054FC32A6EE1BA00AAA894 /* TextAndInputPrivacyLevelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61054F7B2A6EE1BA00AAA894 /* TextAndInputPrivacyLevelTests.swift */; };
254254
61054FC42A6EE1BA00AAA894 /* RecorderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61054F7C2A6EE1BA00AAA894 /* RecorderTests.swift */; };
255255
61054FC52A6EE1BA00AAA894 /* UIKitMocks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61054F7E2A6EE1BA00AAA894 /* UIKitMocks.swift */; };
256256
61054FC62A6EE1BA00AAA894 /* CoreGraphicsMocks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61054F7F2A6EE1BA00AAA894 /* CoreGraphicsMocks.swift */; };
@@ -2284,7 +2284,7 @@
22842284
61054F782A6EE1BA00AAA894 /* UITextViewRecorderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITextViewRecorderTests.swift; sourceTree = "<group>"; };
22852285
61054F792A6EE1BA00AAA894 /* ViewTreeRecorderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewTreeRecorderTests.swift; sourceTree = "<group>"; };
22862286
61054F7A2A6EE1BA00AAA894 /* ViewTreeSnapshotTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewTreeSnapshotTests.swift; sourceTree = "<group>"; };
2287-
61054F7B2A6EE1BA00AAA894 /* PrivacyLevelTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrivacyLevelTests.swift; sourceTree = "<group>"; };
2287+
61054F7B2A6EE1BA00AAA894 /* TextAndInputPrivacyLevelTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextAndInputPrivacyLevelTests.swift; sourceTree = "<group>"; };
22882288
61054F7C2A6EE1BA00AAA894 /* RecorderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecorderTests.swift; sourceTree = "<group>"; };
22892289
61054F7E2A6EE1BA00AAA894 /* UIKitMocks.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIKitMocks.swift; sourceTree = "<group>"; };
22902290
61054F7F2A6EE1BA00AAA894 /* CoreGraphicsMocks.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreGraphicsMocks.swift; sourceTree = "<group>"; };
@@ -3890,7 +3890,7 @@
38903890
61054F5B2A6EE1BA00AAA894 /* Utilties */,
38913891
61054F602A6EE1BA00AAA894 /* TouchSnapshotProducer */,
38923892
61054F642A6EE1BA00AAA894 /* ViewTreeSnapshotProducer */,
3893-
61054F7B2A6EE1BA00AAA894 /* PrivacyLevelTests.swift */,
3893+
61054F7B2A6EE1BA00AAA894 /* TextAndInputPrivacyLevelTests.swift */,
38943894
61054F7C2A6EE1BA00AAA894 /* RecorderTests.swift */,
38953895
);
38963896
path = Recorder;
@@ -8416,7 +8416,7 @@
84168416
96E414162C2AF5C1005A6119 /* UIProgressViewRecorderTests.swift in Sources */,
84178417
61054FB32A6EE1BA00AAA894 /* UITextFieldRecorderTests.swift in Sources */,
84188418
61054FCD2A6EE1BA00AAA894 /* SnapshotProducerMocks.swift in Sources */,
8419-
61054FC32A6EE1BA00AAA894 /* PrivacyLevelTests.swift in Sources */,
8419+
61054FC32A6EE1BA00AAA894 /* TextAndInputPrivacyLevelTests.swift in Sources */,
84208420
61054FA82A6EE1BA00AAA894 /* RecordingCoordinatorTests.swift in Sources */,
84218421
61054FAD2A6EE1BA00AAA894 /* WindowTouchSnapshotProducerTests.swift in Sources */,
84228422
61054FD52A6EE1BA00AAA894 /* XCTAssertRectsEqual.swift in Sources */,

Datadog/Example/Debugging/DebugRUMViewController.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ class DebugRUMViewController: UIViewController {
219219
)
220220
case "usage":
221221
telemetry.send(
222-
telemetry: .usage(.setTrackingConsent(.granted))
222+
telemetry: .usage(.init(event: .setTrackingConsent(.granted), sampleRate: 100))
223223
)
224224
default:
225225
break

DatadogAlamofireExtension.podspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = "DatadogAlamofireExtension"
3-
s.version = "2.17.0"
3+
s.version = "2.18.0"
44
s.summary = "An Official Extensions of Datadog Swift SDK for Alamofire."
55
s.description = <<-DESC
66
The DatadogAlamofireExtension pod is deprecated and will no longer be maintained.

DatadogCore.podspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = "DatadogCore"
3-
s.version = "2.17.0"
3+
s.version = "2.18.0"
44
s.summary = "Official Datadog Swift SDK for iOS."
55

66
s.homepage = "https://www.datadoghq.com"

DatadogCore/Sources/Versioning.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
// GENERATED FILE: Do not edit directly
22

3-
internal let __sdkVersion = "2.17.0"
3+
internal let __sdkVersion = "2.18.0"

DatadogCore/Tests/DatadogObjc/DDSessionReplayTests.swift

+124-2
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,88 @@ class DDSessionReplayTests: XCTestCase {
2323
// Then
2424
XCTAssertEqual(config._swift.replaySampleRate, sampleRate)
2525
XCTAssertEqual(config._swift.defaultPrivacyLevel, .mask)
26+
XCTAssertEqual(config._swift.textAndInputPrivacyLevel, .maskAll)
27+
XCTAssertEqual(config._swift.imagePrivacyLevel, .maskAll)
28+
XCTAssertEqual(config._swift.touchPrivacyLevel, .hide)
29+
XCTAssertNil(config._swift.customEndpoint)
30+
}
31+
32+
func testConfigurationWithNewApi() {
33+
// Given
34+
let textAndInputPrivacy: DDTextAndInputPrivacyLevel = [.maskAll, .maskAllInputs, .maskSensitiveInputs].randomElement()!
35+
let touchPrivacy: DDTouchPrivacyLevel = [.show, .hide].randomElement()!
36+
let imagePrivacy: DDImagePrivacyLevel = [.maskAll, .maskNonBundledOnly, .maskNone].randomElement()!
37+
let sampleRate: Float = .mockRandom(min: 0, max: 100)
38+
39+
// When
40+
let config = DDSessionReplayConfiguration(
41+
replaySampleRate: sampleRate,
42+
textAndInputPrivacyLevel: textAndInputPrivacy,
43+
imagePrivacyLevel: imagePrivacy,
44+
touchPrivacyLevel: touchPrivacy
45+
)
46+
47+
// Then
48+
XCTAssertEqual(config._swift.replaySampleRate, sampleRate)
49+
XCTAssertEqual(config._swift.textAndInputPrivacyLevel, textAndInputPrivacy._swift)
50+
XCTAssertEqual(config._swift.imagePrivacyLevel, imagePrivacy._swift)
51+
XCTAssertEqual(config._swift.touchPrivacyLevel, touchPrivacy._swift)
2652
XCTAssertNil(config._swift.customEndpoint)
2753
}
2854

2955
func testConfigurationOverrides() {
3056
// Given
3157
let sampleRate: Float = .mockRandom(min: 0, max: 100)
3258
let privacy: DDSessionReplayConfigurationPrivacyLevel = [.allow, .mask, .maskUserInput].randomElement()!
59+
let textAndInputPrivacy: DDTextAndInputPrivacyLevel = [.maskAll, .maskAllInputs, .maskSensitiveInputs].randomElement()!
60+
let imagePrivacy: DDImagePrivacyLevel = [.maskAll, .maskNonBundledOnly, .maskNone].randomElement()!
61+
let touchPrivacy: DDTouchPrivacyLevel = [.show, .hide].randomElement()!
3362
let url: URL = .mockRandom()
3463

3564
// When
3665
let config = DDSessionReplayConfiguration(replaySampleRate: 100)
3766
config.replaySampleRate = sampleRate
3867
config.defaultPrivacyLevel = privacy
68+
config.textAndInputPrivacyLevel = textAndInputPrivacy
69+
config.imagePrivacyLevel = imagePrivacy
70+
config.touchPrivacyLevel = touchPrivacy
3971
config.customEndpoint = url
4072

4173
// Then
4274
XCTAssertEqual(config._swift.replaySampleRate, sampleRate)
4375
XCTAssertEqual(config._swift.defaultPrivacyLevel, privacy._swift)
76+
XCTAssertEqual(config._swift.textAndInputPrivacyLevel, textAndInputPrivacy._swift)
77+
XCTAssertEqual(config._swift.imagePrivacyLevel, imagePrivacy._swift)
78+
XCTAssertEqual(config._swift.touchPrivacyLevel, touchPrivacy._swift)
79+
XCTAssertEqual(config._swift.customEndpoint, url)
80+
}
81+
82+
func testConfigurationOverridesWithNewApi() {
83+
// Given
84+
let sampleRate: Float = .mockRandom(min: 0, max: 100)
85+
let textAndInputPrivacy: DDTextAndInputPrivacyLevel = [.maskAll, .maskAllInputs, .maskSensitiveInputs].randomElement()!
86+
let imagePrivacy: DDImagePrivacyLevel = [.maskAll, .maskNonBundledOnly, .maskNone].randomElement()!
87+
let touchPrivacy: DDTouchPrivacyLevel = [.show, .hide].randomElement()!
88+
let url: URL = .mockRandom()
89+
90+
// When
91+
let config = DDSessionReplayConfiguration(
92+
replaySampleRate: 100,
93+
textAndInputPrivacyLevel: .maskAll,
94+
imagePrivacyLevel: .maskAll,
95+
touchPrivacyLevel: .hide
96+
)
97+
config.replaySampleRate = sampleRate
98+
config.textAndInputPrivacyLevel = textAndInputPrivacy
99+
config.imagePrivacyLevel = imagePrivacy
100+
config.touchPrivacyLevel = touchPrivacy
101+
config.customEndpoint = url
102+
103+
// Then
104+
XCTAssertEqual(config._swift.replaySampleRate, sampleRate)
105+
XCTAssertEqual(config._swift.textAndInputPrivacyLevel, textAndInputPrivacy._swift)
106+
XCTAssertEqual(config._swift.imagePrivacyLevel, imagePrivacy._swift)
107+
XCTAssertEqual(config._swift.touchPrivacyLevel, touchPrivacy._swift)
44108
XCTAssertEqual(config._swift.customEndpoint, url)
45109
}
46110

@@ -54,6 +118,34 @@ class DDSessionReplayTests: XCTestCase {
54118
XCTAssertEqual(DDSessionReplayConfigurationPrivacyLevel(.maskUserInput), .maskUserInput)
55119
}
56120

121+
func testTextAndInputPrivacyLevelsInterop() {
122+
XCTAssertEqual(DDTextAndInputPrivacyLevel.maskAll._swift, .maskAll)
123+
XCTAssertEqual(DDTextAndInputPrivacyLevel.maskAllInputs._swift, .maskAllInputs)
124+
XCTAssertEqual(DDTextAndInputPrivacyLevel.maskSensitiveInputs._swift, .maskSensitiveInputs)
125+
126+
XCTAssertEqual(DDTextAndInputPrivacyLevel(.maskAll), .maskAll)
127+
XCTAssertEqual(DDTextAndInputPrivacyLevel(.maskAllInputs), .maskAllInputs)
128+
XCTAssertEqual(DDTextAndInputPrivacyLevel(.maskSensitiveInputs), .maskSensitiveInputs)
129+
}
130+
131+
func testImagePrivacyLevelsInterop() {
132+
XCTAssertEqual(DDImagePrivacyLevel.maskAll._swift, .maskAll)
133+
XCTAssertEqual(DDImagePrivacyLevel.maskNonBundledOnly._swift, .maskNonBundledOnly)
134+
XCTAssertEqual(DDImagePrivacyLevel.maskNone._swift, .maskNone)
135+
136+
XCTAssertEqual(DDImagePrivacyLevel(.maskAll), .maskAll)
137+
XCTAssertEqual(DDImagePrivacyLevel(.maskNonBundledOnly), .maskNonBundledOnly)
138+
XCTAssertEqual(DDImagePrivacyLevel(.maskNone), .maskNone)
139+
}
140+
141+
func testTouchPrivacyLevelsInterop() {
142+
XCTAssertEqual(DDTouchPrivacyLevel.show._swift, .show)
143+
XCTAssertEqual(DDTouchPrivacyLevel.hide._swift, .hide)
144+
145+
XCTAssertEqual(DDTouchPrivacyLevel(.show), .show)
146+
XCTAssertEqual(DDTouchPrivacyLevel(.hide), .hide)
147+
}
148+
57149
func testWhenEnabled() throws {
58150
// Given
59151
let core = FeatureRegistrationCoreMock()
@@ -69,9 +161,39 @@ class DDSessionReplayTests: XCTestCase {
69161
let sr = try XCTUnwrap(core.get(feature: SessionReplayFeature.self))
70162
let requestBuilder = try XCTUnwrap(sr.requestBuilder as? DatadogSessionReplay.SegmentRequestBuilder)
71163
XCTAssertEqual(sr.recordingCoordinator.sampler.samplingRate, 42)
72-
XCTAssertEqual(sr.recordingCoordinator.privacy, .mask)
164+
XCTAssertEqual(sr.recordingCoordinator.textAndInputPrivacy, .maskAll)
165+
XCTAssertEqual(sr.recordingCoordinator.imagePrivacy, .maskAll)
166+
XCTAssertEqual(sr.recordingCoordinator.touchPrivacy, .hide)
73167
XCTAssertNil(requestBuilder.customUploadURL)
74168
}
75-
}
76169

170+
func testWhenEnabledWithNewApi() throws {
171+
// Given
172+
let core = FeatureRegistrationCoreMock()
173+
CoreRegistry.register(default: core)
174+
let textAndInputPrivacy: DDTextAndInputPrivacyLevel = [.maskAll, .maskAllInputs, .maskSensitiveInputs].randomElement()!
175+
let imagePrivacy: DDImagePrivacyLevel = [.maskAll, .maskNonBundledOnly, .maskNone].randomElement()!
176+
let touchPrivacy: DDTouchPrivacyLevel = [.show, .hide].randomElement()!
177+
defer { CoreRegistry.unregisterDefault() }
178+
179+
let config = DDSessionReplayConfiguration(
180+
replaySampleRate: 42,
181+
textAndInputPrivacyLevel: textAndInputPrivacy,
182+
imagePrivacyLevel: imagePrivacy,
183+
touchPrivacyLevel: touchPrivacy
184+
)
185+
186+
// When
187+
DDSessionReplay.enable(with: config)
188+
189+
// Then
190+
let sr = try XCTUnwrap(core.get(feature: SessionReplayFeature.self))
191+
let requestBuilder = try XCTUnwrap(sr.requestBuilder as? DatadogSessionReplay.SegmentRequestBuilder)
192+
XCTAssertEqual(sr.recordingCoordinator.sampler.samplingRate, 42)
193+
XCTAssertEqual(sr.recordingCoordinator.textAndInputPrivacy, textAndInputPrivacy._swift)
194+
XCTAssertEqual(sr.recordingCoordinator.imagePrivacy, imagePrivacy._swift)
195+
XCTAssertEqual(sr.recordingCoordinator.touchPrivacy, touchPrivacy._swift)
196+
XCTAssertNil(requestBuilder.customUploadURL)
197+
}
198+
}
77199
#endif

DatadogCore/Tests/DatadogObjc/ObjcAPITests/DDSessionReplay+apiTests.m

+10
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,14 @@ - (void)testConfiguration {
2121
[DDSessionReplay enableWith:configuration];
2222
}
2323

24+
- (void)testConfigurationWithNewApi {
25+
DDSessionReplayConfiguration *configuration = [[DDSessionReplayConfiguration alloc] initWithReplaySampleRate:100
26+
textAndInputPrivacyLevel:DDTextAndInputPrivacyLevelMaskAll
27+
imagePrivacyLevel:DDImagePrivacyLevelMaskNone
28+
touchPrivacyLevel:DDTouchPrivacyLevelShow];
29+
configuration.customEndpoint = [NSURL new];
30+
31+
[DDSessionReplay enableWith:configuration];
32+
}
33+
2434
@end

DatadogCrashReporting.podspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = "DatadogCrashReporting"
3-
s.version = "2.17.0"
3+
s.version = "2.18.0"
44
s.summary = "Official Datadog Crash Reporting SDK for iOS."
55

66
s.homepage = "https://www.datadoghq.com"

DatadogInternal.podspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = "DatadogInternal"
3-
s.version = "2.17.0"
3+
s.version = "2.18.0"
44
s.summary = "Datadog Internal Package. This module is not for public use."
55

66
s.homepage = "https://www.datadoghq.com"

0 commit comments

Comments
 (0)