Skip to content

Commit ce7f759

Browse files
Release 2.1.0
1 parent 21d5a4e commit ce7f759

File tree

337 files changed

+552
-350
lines changed

Some content is hidden

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

337 files changed

+552
-350
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,15 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [2.1.0] - 2025-06-26
9+
10+
### Added
11+
- Introduced crash reporting integrated with session recordings.
12+
- Improved support widget navigaion.
13+
14+
### Fixed
15+
- Fixed an issue with timer tracking to ensure correct session properties are recorded.
16+
817
## [2.0.2] - 2025-06-12
918

1019
### Fixed

DevRevSDK.doccarchive.zip

-1.4 KB
Binary file not shown.

DevRevSDK.podspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
Pod::Spec.new do |spec|
22
spec.name = "DevRevSDK"
3-
spec.version = "2.0.2"
3+
spec.version = "2.1.0"
44
spec.summary = "DevRev SDK, used for integrating DevRev services into your iOS app."
55
spec.homepage = "https://devrev.ai"
66
spec.license = "Apache 2.0"
77
spec.author = { "DevRev" => "[email protected]" }
88
spec.platform = :ios, "15.0"
99
spec.source = {
10-
http: "https://github.com/devrev/devrev-sdk-ios/releases/download/v2.0.2/DevRevSDK.xcframework.zip",
10+
http: "https://github.com/devrev/devrev-sdk-ios/releases/download/v2.1.0/DevRevSDK.xcframework.zip",
1111
type: :zip,
1212
headers: [
1313
"Accept: application/octet-stream",

DevRevSDK.xcframework.zip

2.58 MB
Binary file not shown.

Package.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ let package = Package(
1818
targets: [
1919
.binaryTarget(
2020
name: "DevRevSDK",
21-
url: "https://github.com/devrev/devrev-sdk-ios/releases/download/v2.0.2/DevRevSDK.xcframework.zip",
22-
checksum: "5bddbb2ec75a9b7243e38b962c99d571d0c59cc98adcf1b82fa33854aeedf50e"
21+
url: "https://github.com/devrev/devrev-sdk-ios/releases/download/v2.1.0/DevRevSDK.xcframework.zip",
22+
checksum: "cc6f553629b64728bd493ccd12ef21b26863d7e864e50ebe054af58a271fabee"
2323
)
2424
]
2525
)

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ DevRev.startTimer(_:properties:)
381381

382382
To stop a timer, use the following method:
383383
```swift
384-
DevRev.stopTimer(_:properties:)
384+
DevRev.endTimer(_:properties:)
385385
```
386386

387387
##### Example
@@ -499,7 +499,7 @@ A sample app with use cases for both UIKit and SwiftUI has been provided as part
499499

500500
Before you start using the sample app you will need to configure it to be used with your Apple Developer team and your DevRev credentials. For your convenience the code has been marked with compiler error directives (`#error`) at the places that need attention.
501501

502-
1. Add your credentials to `ContentView.swift` (SwiftUI) or `AppDelegate.swift` (UIKit).
502+
1. Add your credentials to the relevant `AppDelegate.swift` of the SwiftUI or UIKit sample.
503503
- After you have added the credentials, delete or comment out the compiler error lines in the respective files.
504504
1. Configure the code signing for the sample target:
505505
- Open the project settings (1),

Samples/SampleSwiftUI/AppDelegate.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class AppDelegate: NSObject, UIApplicationDelegate {
1717

1818
func application(
1919
_ application: UIApplication,
20-
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil
20+
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
2121
) -> Bool {
2222
guard
2323
let appID = testOrganizer.isInTestMode ? testOrganizer.appID : appID

Samples/SampleSwiftUI/Features/IdentificationView.swift

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ struct IdentificationView: View {
99
@SwiftUI.State private var unverifiedUserID = ""
1010
@SwiftUI.State private var verifiedUserID = ""
1111
@SwiftUI.State private var verifiedSessionToken = ""
12+
@SwiftUI.State private var email = ""
1213

1314
var body: some View {
1415
List {
@@ -47,6 +48,16 @@ struct IdentificationView: View {
4748
await updateStatuses()
4849
}
4950
}
51+
Section(header: Text("Update User")) {
52+
TextField("New Email", text: $email)
53+
.autocorrectionDisabled()
54+
.autocapitalization(.none)
55+
.keyboardType(.emailAddress)
56+
57+
AsyncButton(text: "Update the User") {
58+
await updateUser()
59+
}
60+
}
5061
Section(header: Text("Logout")) {
5162
AsyncButton(
5263
text: "Logout",
@@ -67,6 +78,21 @@ struct IdentificationView: View {
6778
}
6879
}
6980

81+
private func updateUser() async {
82+
let userID = !verifiedUserID.isEmpty ? verifiedUserID : unverifiedUserID
83+
84+
let userTraits = Identity.UserTraits(
85+
displayName: nil,
86+
email: email.isEmpty ? nil : email,
87+
fullName: nil,
88+
userDescription: nil,
89+
phoneNumbers: nil,
90+
customFields: nil
91+
)
92+
93+
await DevRev.updateUser(Identity(userID: userID, userTraits: userTraits))
94+
}
95+
7096
private func updateStatuses() async {
7197
isUserIdentified = await DevRev.isUserIdentified
7298
}

Samples/SampleSwiftUI/Features/SessionAnalyticsView.swift

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,22 @@ struct SessionAnalyticsView: View {
4848
await updateStatuses()
4949
}
5050
}
51+
Section(header: Text("Timer")) {
52+
AsyncButton(text: "Start Timer") {
53+
let property: [String: String] = ["test-key1": "test-value1"]
54+
DevRev.startTimer("test-event", properties: property)
55+
await updateStatuses()
56+
}
57+
AsyncButton(text: "Stop Timer") {
58+
let property: [String: String] = ["test-key2": "test-value2"]
59+
DevRev.endTimer("test-event", properties: property)
60+
await updateStatuses()
61+
}
62+
}
63+
Section(header: Text("Manual Masking / Unmasking")) {
64+
MaskedLabelView(text: "Manually Masked UI Item")
65+
UnmaskedTextFieldView(placeholder: "Manually Unmasked UI Item")
66+
}
5167
Section(header: Text("On-demand Sessions")) {
5268
AsyncButton(text: "Process All On-demand Sessions") {
5369
DevRev.processAllOnDemandSessions()
@@ -70,3 +86,32 @@ struct SessionAnalyticsView: View {
7086
isMonitoringEnabled = DevRev.isMonitoringEnabled
7187
}
7288
}
89+
90+
struct MaskedLabelView: UIViewRepresentable {
91+
let text: String
92+
93+
func makeUIView(context: Context) -> UILabel {
94+
let label = UILabel()
95+
label.text = text
96+
return label
97+
}
98+
99+
func updateUIView(_ uiView: UILabel, context: Context) {
100+
uiView.text = text
101+
DevRev.markSensitiveViews([uiView])
102+
}
103+
}
104+
105+
struct UnmaskedTextFieldView: UIViewRepresentable {
106+
let placeholder: String
107+
108+
func makeUIView(context: Context) -> UITextField {
109+
let textField = UITextField()
110+
textField.placeholder = placeholder
111+
return textField
112+
}
113+
114+
func updateUIView(_ uiView: UITextField, context: Context) {
115+
DevRev.unmarkSensitiveViews([uiView])
116+
}
117+
}

Samples/SampleSwiftUI/Features/SupportView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ struct SupportView: View {
77

88
@SwiftUI.State var isSupportVisible = false
99
@SwiftUI.State var isUserIdentified = false
10-
10+
1111
var body: some View {
1212
List {
1313
Section(header: Text("Status")) {
@@ -42,7 +42,7 @@ struct SupportView: View {
4242
await updateStatuses()
4343
}
4444
}
45-
45+
4646
private func updateStatuses() async {
4747
isUserIdentified = await DevRev.isUserIdentified
4848
}

0 commit comments

Comments
 (0)