diff --git a/CHANGELOG.md b/CHANGELOG.md index 695599f6..fcf3b4e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +## [4.1.4](https://github.com/newrelic/video-agent-iOS/compare/v4.1.3...v4.1.4) (2026-06-05) + +### Bug Fixes + +* expose sendSeekStart/sendSeekEnd on NRVAVideo; auto-detect seek in AVPlayerTracker ([34493b4](https://github.com/newrelic/video-agent-iOS/commit/34493b4999968ff4e726c3f3ba3d266ff6d3f4e2)) +* NRTrackerPair must not leak NSNull sentinel to callers ([82ef94f](https://github.com/newrelic/video-agent-iOS/commit/82ef94fcbd4f432dedf2dabbc523a19fe8134d34)) +* partial container sanitization, nil guard, and dead code removal ([6aac79f](https://github.com/newrelic/video-agent-iOS/commit/6aac79f7ef52d648a4f3c0636ed97d5b01edc314)) +* read totalPreRollAdTime from CONTENT_START attributes ([d565378](https://github.com/newrelic/video-agent-iOS/commit/d565378286af59e2d7109566bc0081ea31872246)) +* sanitize attribute values at setAttribute storage boundary ([7d07298](https://github.com/newrelic/video-agent-iOS/commit/7d072980d1e6b4a85339c864ea8245194a38f688)) + ## [4.1.3](https://github.com/newrelic/video-agent-iOS/compare/v4.1.2...v4.1.3) (2026-05-20) ### Bug Fixes diff --git a/NRAVPlayerTracker.podspec b/NRAVPlayerTracker.podspec index 2a251568..f145b58b 100644 --- a/NRAVPlayerTracker.podspec +++ b/NRAVPlayerTracker.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = 'NRAVPlayerTracker' - s.version = '4.1.3' + s.version = '4.1.4' s.summary = 'New Relic Video Agent, AVPlayer Tracker.' # This description is used to generate tags and improve search results. diff --git a/NRAVPlayerTracker/NRAVPlayerTracker/Tracker/NRTrackerAVPlayer.m b/NRAVPlayerTracker/NRAVPlayerTracker/Tracker/NRTrackerAVPlayer.m index a59f844f..34490ed7 100644 --- a/NRAVPlayerTracker/NRAVPlayerTracker/Tracker/NRTrackerAVPlayer.m +++ b/NRAVPlayerTracker/NRAVPlayerTracker/Tracker/NRTrackerAVPlayer.m @@ -406,7 +406,7 @@ - (NSString *)getTrackerSrc { - (NSString *)getTrackerVersion { - return @"4.1.3"; + return @"4.1.4"; } - (NSString *)getPlayerVersion { diff --git a/NRIMATracker.podspec b/NRIMATracker.podspec index 6c82b256..50b0ad5c 100644 --- a/NRIMATracker.podspec +++ b/NRIMATracker.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = 'NRIMATracker' - s.version = '4.1.3' + s.version = '4.1.4' s.summary = 'New Relic Video Agent, Google IMA Ads Tracker.' # This description is used to generate tags and improve search results. diff --git a/NRIMATracker/NRIMATracker/Tracker/NRTrackerIMA.m b/NRIMATracker/NRIMATracker/Tracker/NRTrackerIMA.m index d52ad6a9..c69fd666 100644 --- a/NRIMATracker/NRIMATracker/Tracker/NRTrackerIMA.m +++ b/NRIMATracker/NRIMATracker/Tracker/NRTrackerIMA.m @@ -104,7 +104,7 @@ - (NSString *)getTrackerSrc { } - (NSString *)getTrackerVersion { - return @"4.1.3"; + return @"4.1.4"; } - (NSNumber *)getPlayhead { diff --git a/NewRelicVideoAgent.podspec b/NewRelicVideoAgent.podspec index 2c8bbd5b..4eedbcd8 100644 --- a/NewRelicVideoAgent.podspec +++ b/NewRelicVideoAgent.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = 'NewRelicVideoAgent' - s.version = '4.1.3' + s.version = '4.1.4' s.summary = 'New Relic Video Agent for iOS' # This description is used to generate tags and improve search results. diff --git a/NewRelicVideoCore/NewRelicVideoCore/Auth/NRVATokenManager.m b/NewRelicVideoCore/NewRelicVideoCore/Auth/NRVATokenManager.m index a9fe95fc..ffe017ee 100644 --- a/NewRelicVideoCore/NewRelicVideoCore/Auth/NRVATokenManager.m +++ b/NewRelicVideoCore/NewRelicVideoCore/Auth/NRVATokenManager.m @@ -277,7 +277,7 @@ - (NSArray *)buildTokenRequestPayload { NSString *osVersion = [[UIDevice currentDevice] systemVersion]; NSString *architecture = [self getArchitecture]; NSString *agentName = @"NewRelic-VideoAgent-iOS"; - NSString *agentVersion = @"4.1.3"; + NSString *agentVersion = @"4.1.4"; NSString *deviceId = [NRVAUtils generateSessionId]; // Use session ID as device identifier NSString *manufacturer = @"Apple"; diff --git a/NewRelicVideoCore/NewRelicVideoCore/Device/NRVADeviceInformation.m b/NewRelicVideoCore/NewRelicVideoCore/Device/NRVADeviceInformation.m index 787c063b..d34bf964 100644 --- a/NewRelicVideoCore/NewRelicVideoCore/Device/NRVADeviceInformation.m +++ b/NewRelicVideoCore/NewRelicVideoCore/Device/NRVADeviceInformation.m @@ -65,7 +65,7 @@ - (void)initializeDeviceInformation { self.osBuild = [self getOSBuildVersion]; self.model = [[UIDevice currentDevice] model]; self.agentName = @"NewRelic-VideoAgent-iOS"; - self.agentVersion = @"4.1.3"; // Should be pulled from build configuration + self.agentVersion = @"4.1.4"; // Should be pulled from build configuration self.manufacturer = @"Apple"; self.deviceId = [self generatePersistentDeviceId]; self.architecture = [self getSystemArchitecture]; @@ -93,7 +93,7 @@ - (void)setDefaultValues { self.osBuild = @"Unknown"; self.model = @"Unknown"; self.agentName = @"NewRelic-VideoAgent-iOS"; - self.agentVersion = @"4.1.3"; + self.agentVersion = @"4.1.4"; self.manufacturer = @"Apple"; self.deviceId = [[NSUUID UUID] UUIDString]; self.architecture = @"unknown"; @@ -101,7 +101,7 @@ - (void)setDefaultValues { self.size = @""; // Empty string for now self.applicationFramework = @"Native iOS"; self.applicationFrameworkVersion = @"Unknown"; - self.userAgent = @"NewRelic-VideoAgent-iOS/4.1.3"; + self.userAgent = @"NewRelic-VideoAgent-iOS/4.1.4"; self.isTV = NO; self.isLowMemoryDevice = NO; } diff --git a/NewRelicVideoCore/NewRelicVideoCore/Harvest/NRVAOptimizedHttpClient.m b/NewRelicVideoCore/NewRelicVideoCore/Harvest/NRVAOptimizedHttpClient.m index 4119e157..b50b79e2 100644 --- a/NewRelicVideoCore/NewRelicVideoCore/Harvest/NRVAOptimizedHttpClient.m +++ b/NewRelicVideoCore/NewRelicVideoCore/Harvest/NRVAOptimizedHttpClient.m @@ -218,7 +218,7 @@ - (NSArray *)buildCompletePayload:(NSArray *)appToken events:(NSArra NSString *osVersion = [[UIDevice currentDevice] systemVersion]; NSString *architecture = [self getArchitecture]; NSString *agentName = @"NewRelic-VideoAgent-iOS"; - NSString *agentVersion = @"4.1.3"; + NSString *agentVersion = @"4.1.4"; NSString *deviceId = [NRVAUtils generateSessionId]; NSString *manufacturer = @"Apple"; diff --git a/NewRelicVideoCore/NewRelicVideoCore/NRVAVideoConfiguration.m b/NewRelicVideoCore/NewRelicVideoCore/NRVAVideoConfiguration.m index 51c85321..7b5d960f 100644 --- a/NewRelicVideoCore/NewRelicVideoCore/NRVAVideoConfiguration.m +++ b/NewRelicVideoCore/NewRelicVideoCore/NRVAVideoConfiguration.m @@ -203,8 +203,8 @@ - (instancetype)init { _debugLoggingEnabled = NO; _collectorAddress = nil; // Will use default based on region - _qoeAggregateEnabled = NO; - _qoeAggregateIntervalMultiplier = 1; + _qoeAggregateEnabled = YES; + _qoeAggregateIntervalMultiplier = 2; _obfuscationRules = nil; } return self; diff --git a/NewRelicVideoCore/NewRelicVideoCore/NRVideoDefs.h b/NewRelicVideoCore/NewRelicVideoCore/NRVideoDefs.h index 995876df..640128be 100644 --- a/NewRelicVideoCore/NewRelicVideoCore/NRVideoDefs.h +++ b/NewRelicVideoCore/NewRelicVideoCore/NRVideoDefs.h @@ -8,7 +8,7 @@ #ifndef NRVideoDefs_h #define NRVideoDefs_h -#define NRVIDEO_CORE_VERSION @"4.1.3" +#define NRVIDEO_CORE_VERSION @"4.1.4" #define NR_VIDEO_EVENT @"VideoAction" #define NR_VIDEO_AD_EVENT @"VideoAdAction" diff --git a/README.md b/README.md index 3a3be19f..63930184 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ Download the latest pre-built XCFrameworks from the [Releases](https://github.co Add the dependencies to your `Podfile`: ```ruby -pod 'NewRelicVideoCore' +pod 'NewRelicVideoAgent' pod 'NRAVPlayerTracker' pod 'NRIMATracker' # Optional — only if using Google IMA ads ``` @@ -319,7 +319,8 @@ if shouldEnable { | `withApplicationToken(_:)` | `String` | — | **Required.** Your New Relic application token. | | `withHarvestCycle(_:)` | `Int` | 300 (Mobile) / 180 (TV) | Interval in seconds between data harvests. | | `withDebugLogging(_:)` | `Bool` | `false` | Enable debug logging for development. | -| `withQoeAggregate(_:)` | `Bool` | `false` | Enable Quality of Experience event aggregation. | +| `withQoeAggregateEnabled(_:)` | `Bool` | `true` | QoE aggregation is enabled out of the box. Disable with `withQoeAggregateEnabled(NO)`. | +| `withQoeAggregateIntervalMultiplier(_:)` | `Int` | `2` | Multiplier applied to the harvest interval for QoE aggregation. Configure with `withQoeAggregateIntervalMultiplier:`. | ### NRVAVideoPlayerConfiguration