diff --git a/BrazeKit.podspec b/BrazeKit.podspec index 16a270e7af..1c519f2298 100644 --- a/BrazeKit.podspec +++ b/BrazeKit.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'BrazeKit' - s.version = '7.4.0' + s.version = '7.5.0' s.summary = 'Braze Main SDK library providing support for analytics and push notifications.' s.homepage = 'https://braze.com' @@ -9,8 +9,8 @@ Pod::Spec.new do |s| s.authors = 'Braze, Inc.' s.source = { - :http => 'https://github.com/braze-inc/braze-swift-sdk/releases/download/7.4.0/BrazeKit.zip', - :sha256 => 'e820bcb3f8fc85402f51b705ae1494c1d73d341fc16213ddc19039ff0996dd40' + :http => 'https://github.com/braze-inc/braze-swift-sdk/releases/download/7.5.0/BrazeKit.zip', + :sha256 => 'd7a35e105c76c064091431a175e600ecc145117f51c5cb1707f567698795dfb1' } s.swift_version = '5.0' diff --git a/BrazeKitCompat.podspec b/BrazeKitCompat.podspec index f4be953c8c..447a6d5dcf 100644 --- a/BrazeKitCompat.podspec +++ b/BrazeKitCompat.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'BrazeKitCompat' - s.version = '7.4.0' + s.version = '7.5.0' s.summary = 'Compatibility library for users migrating from AppboyKit.' s.homepage = 'https://braze.com' @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.license = { :type => 'Commercial' } s.authors = 'Braze, Inc.' - s.source = { :git => 'https://github.com/braze-inc/braze-swift-sdk.git', :tag => '7.4.0' } + s.source = { :git => 'https://github.com/braze-inc/braze-swift-sdk.git', :tag => '7.5.0' } s.swift_version = '5.0' s.ios.deployment_target = '11.0' @@ -18,8 +18,8 @@ Pod::Spec.new do |s| s.public_header_files = 'Sources/BrazeKitCompat/include/*.h' s.static_framework = true - s.dependency 'BrazeKit', '7.4.0' - s.dependency 'BrazeLocation', '7.4.0' + s.dependency 'BrazeKit', '7.5.0' + s.dependency 'BrazeLocation', '7.5.0' s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' } end diff --git a/BrazeLocation.podspec b/BrazeLocation.podspec index a32a541691..32af31e1e3 100644 --- a/BrazeLocation.podspec +++ b/BrazeLocation.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'BrazeLocation' - s.version = '7.4.0' + s.version = '7.5.0' s.summary = 'Braze location library providing support for location analytics and geofence monitoring.' s.homepage = 'https://braze.com' @@ -9,8 +9,8 @@ Pod::Spec.new do |s| s.authors = 'Braze, Inc.' s.source = { - :http => 'https://github.com/braze-inc/braze-swift-sdk/releases/download/7.4.0/BrazeLocation.zip', - :sha256 => '233bf832190655a4e7e5ff19f7eddc98e872702ba20f7271eead268eef641425' + :http => 'https://github.com/braze-inc/braze-swift-sdk/releases/download/7.5.0/BrazeLocation.zip', + :sha256 => 'c58ddd61f71ec35eca941aea6a61a4315f68e937c86d8b7342a3bb9041d95c12' } s.swift_version = '5.0' @@ -18,10 +18,11 @@ Pod::Spec.new do |s| s.tvos.deployment_target = '11.0' s.vendored_framework = 'BrazeLocation.xcframework' + s.resource_bundles = { 'BrazeLocation' => ['Sources/BrazeLocationResources/Resources/**/*'] } # Depends on BrazeKit because BrazeKit includes the internal _BrazeLocationClient symbols required # for linking against BrazeLocation. - s.dependency 'BrazeKit', '7.4.0' + s.dependency 'BrazeKit', '7.5.0' s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' } end diff --git a/BrazeNotificationService.podspec b/BrazeNotificationService.podspec index 6e65607dc7..e60f0c130f 100644 --- a/BrazeNotificationService.podspec +++ b/BrazeNotificationService.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'BrazeNotificationService' - s.version = '7.4.0' + s.version = '7.5.0' s.summary = 'Braze notification service extension library providing support for Rich Push notifications.' s.homepage = 'https://braze.com' @@ -9,8 +9,8 @@ Pod::Spec.new do |s| s.authors = 'Braze, Inc.' s.source = { - :http => 'https://github.com/braze-inc/braze-swift-sdk/releases/download/7.4.0/BrazeNotificationService.zip', - :sha256 => '5b9c974c5ed0b48ab1ba59f49dbf98f1c8e3e49959e844a46e0591365cf275d0' + :http => 'https://github.com/braze-inc/braze-swift-sdk/releases/download/7.5.0/BrazeNotificationService.zip', + :sha256 => 'f1869b6d2391eb696f48c69007836472172701e3fb8183e60fdf556a3d1e415b' } s.swift_version = '5.0' diff --git a/BrazePushStory.podspec b/BrazePushStory.podspec index c549921cde..c7c7ff4f4a 100644 --- a/BrazePushStory.podspec +++ b/BrazePushStory.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'BrazePushStory' - s.version = '7.4.0' + s.version = '7.5.0' s.summary = 'Braze notification content extension library providing support for Push Stories.' s.homepage = 'https://braze.com' @@ -9,8 +9,8 @@ Pod::Spec.new do |s| s.authors = 'Braze, Inc.' s.source = { - :http => 'https://github.com/braze-inc/braze-swift-sdk/releases/download/7.4.0/BrazePushStory.zip', - :sha256 => '3b1b1bf392284755f8b9b00857d9d70cf3c39912b72921617f6f8db910b113e7' + :http => 'https://github.com/braze-inc/braze-swift-sdk/releases/download/7.5.0/BrazePushStory.zip', + :sha256 => '8cd9f1dbac161bf8aabb3d20483db6d3593ba646e297575c2307af3863a5c415' } s.swift_version = '5.0' diff --git a/BrazeUI.podspec b/BrazeUI.podspec index 96b2be9a46..a0afdf7d08 100644 --- a/BrazeUI.podspec +++ b/BrazeUI.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'BrazeUI' - s.version = '7.4.0' + s.version = '7.5.0' s.summary = 'Braze-provided user interface library for In-App Messages and Content Cards.' s.homepage = 'https://braze.com' @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.license = { :type => 'Commercial' } s.authors = 'Braze, Inc.' - s.source = { :git => 'https://github.com/braze-inc/braze-swift-sdk.git', :tag => '7.4.0' } + s.source = { :git => 'https://github.com/braze-inc/braze-swift-sdk.git', :tag => '7.5.0' } s.swift_version = '5.0' s.ios.deployment_target = '11.0' @@ -17,7 +17,7 @@ Pod::Spec.new do |s| s.resource_bundles = { 'BrazeUI' => ['Sources/BrazeUI/Resources/**/*'] } s.static_framework = true - s.dependency 'BrazeKit', '7.4.0' + s.dependency 'BrazeKit', '7.5.0' s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' } end diff --git a/BrazeUICompat.podspec b/BrazeUICompat.podspec index d350d30aa3..abfd5229fc 100644 --- a/BrazeUICompat.podspec +++ b/BrazeUICompat.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'BrazeUICompat' - s.version = '7.4.0' + s.version = '7.5.0' s.summary = 'Compatibility UI library for users migrating from AppboyUI.' s.homepage = 'https://braze.com' @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.license = { :type => 'Commercial' } s.authors = 'Braze, Inc.' - s.source = { :git => 'https://github.com/braze-inc/braze-swift-sdk.git', :tag => '7.4.0' } + s.source = { :git => 'https://github.com/braze-inc/braze-swift-sdk.git', :tag => '7.5.0' } s.swift_version = '5.0' s.ios.deployment_target = '11.0' @@ -18,7 +18,7 @@ Pod::Spec.new do |s| s.resource_bundles = { 'BrazeUICompat' => 'Sources/BrazeUICompat/*/Resources/**/*.*' } s.static_framework = true - s.dependency 'BrazeKitCompat', '7.4.0' + s.dependency 'BrazeKitCompat', '7.5.0' s.dependency 'SDWebImage', '>= 5.8.2', '< 6' s.user_target_xcconfig = { 'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES' } diff --git a/CHANGELOG.md b/CHANGELOG.md index 1848ae5bca..6763cf2dbb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,18 @@ +## 7.5.0 + +##### Added +- Adds privacy manifests for `BrazeKit` and `BrazeLocation` to describe Braze's data collection policies. For more details, refer to [Apple's documentation](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests) on privacy manifests. + - More fine-tuned configurations to manage your data collection practices will be made available in a future release. +- Adds the `optInWhenPushAuthorized` configuration property to specify whether a user's notification subscription state should automatically be set to `optedIn` when updating push permissions to authorized. +- The WebKit Inspector developer tool is now enabled by default for all instances of `BrazeInAppMessagesUI.HtmlView`. It can be disabled by setting `BrazeInAppMessagesUI.HtmlView.Attributes.allowInspector` to `false`. + +##### Fixed +- Fixes an issue with the code signatures of XCFrameworks introduced in `7.1.0`. +- Fixes a crash on tvOS devices running versions below 16.0, caused by the absence of the `UIApplication.openNotificationSettingsURLString` symbol in those OS versions. +- Fixes an issue where a content card would not display if the value under "Redirect to Web URL" was an empty string. +- Fixes incorrect behavior in BrazeUI where tapping the body of a `Full` or `Modal` in-app message with buttons and an "Image Only" layout would dismiss that message and process the button's click action. + - Tapping the body will now be a no-op, bringing parity with other platforms. + ## 7.4.0 ##### Added diff --git a/Examples/ObjC/Examples-Manual.xcodeproj/project.pbxproj b/Examples/ObjC/Examples-Manual.xcodeproj/project.pbxproj index 16b1967bba..069f4dcb15 100644 --- a/Examples/ObjC/Examples-Manual.xcodeproj/project.pbxproj +++ b/Examples/ObjC/Examples-Manual.xcodeproj/project.pbxproj @@ -67,6 +67,7 @@ 4F248ABCE70D894092B1DD59 /* BrazeUI.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF2ED58955148E8CDC8E8666 /* BrazeUI.xcframework */; }; 4F82842CEF215146992E2664 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AEF0FF04032299A31D37CDE4 /* Assets.xcassets */; }; 4FBA199342BA29BB0B666F97 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 42F1A1CD4644026244BE2F84 /* AppDelegate.m */; }; + 53064408D600848B60AB3A09 /* BrazeLocation.bundle in Resources */ = {isa = PBXBuildFile; fileRef = EB8AF6AAFE01DAED72696307 /* BrazeLocation.bundle */; }; 533688F071AE2CBA8D7F9D28 /* BrazeKit.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 963312B05750D1D4DA77128F /* BrazeKit.bundle */; }; 5585CC15C01D38BC05EA7EBA /* PushNotificationsContentExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 334A021F30FF4114F75E59A1 /* PushNotificationsContentExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 569177D8B0AC23B87E50AD9B /* BrazeKit.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE1AFA11EB03A5B1BEA614A2 /* BrazeKit.xcframework */; }; @@ -152,6 +153,7 @@ C119F9D4D037385C7A6D539F /* ReadmeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C7CD7AB410DAB0417F872BA8 /* ReadmeViewController.m */; }; C67B830B590421DE8746A78B /* Readme.m in Sources */ = {isa = PBXBuildFile; fileRef = 9455F390E4F3380AF100069F /* Readme.m */; }; C6E36A2E936AFFBC6161431E /* empty-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DEEEEC6C495A8FB90C87DF /* empty-file.swift */; }; + C7015AC6CF3A7937EFA06121 /* BrazeLocation.bundle in Resources */ = {isa = PBXBuildFile; fileRef = EB8AF6AAFE01DAED72696307 /* BrazeLocation.bundle */; }; C8FBBED710EB2CD866CE008C /* BrazeKit.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE1AFA11EB03A5B1BEA614A2 /* BrazeKit.xcframework */; }; C9A4905EA63DA015B0A4B30F /* BrazeUI.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 85365B9C180AB9BA57FBD249 /* BrazeUI.bundle */; }; CD8B51B9515887A350A2A257 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1B71D8E6DE6F7C93CAD551FD /* LaunchScreen.storyboard */; }; @@ -314,6 +316,7 @@ DD4757AA275D30DA01870E11 /* Readme.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Readme.m; sourceTree = ""; }; E68B1192B8A63A256A1C970D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; EA882DE20154839D73224130 /* ContentCards-Custom-UI.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "ContentCards-Custom-UI.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + EB8AF6AAFE01DAED72696307 /* BrazeLocation.bundle */ = {isa = PBXFileReference; lastKnownFileType = wrapper.cfbundle; name = BrazeLocation.bundle; path = "braze-swift-sdk-prebuilt/bundle/BrazeLocation.bundle"; sourceTree = ""; }; EE1AFA11EB03A5B1BEA614A2 /* BrazeKit.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = BrazeKit.xcframework; path = "braze-swift-sdk-prebuilt/static/BrazeKit.xcframework"; sourceTree = ""; }; EF948DEAE9C27D25EC6010DB /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; F54F5A2EF6CB84758453D966 /* CheckoutViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CheckoutViewController.h; sourceTree = ""; }; @@ -603,6 +606,7 @@ isa = PBXGroup; children = ( 963312B05750D1D4DA77128F /* BrazeKit.bundle */, + EB8AF6AAFE01DAED72696307 /* BrazeLocation.bundle */, 85365B9C180AB9BA57FBD249 /* BrazeUI.bundle */, ); name = Resources; @@ -1065,6 +1069,7 @@ files = ( 2433F552DC49F4541FCA4B28 /* Assets.xcassets in Resources */, 2023639CD85FDD69BCE83916 /* BrazeKit.bundle in Resources */, + C7015AC6CF3A7937EFA06121 /* BrazeLocation.bundle in Resources */, 0B1E42B8B832406397F71D7C /* LaunchScreen.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1107,6 +1112,7 @@ files = ( 3E2F2CC382C69F9EBF257574 /* Assets.xcassets in Resources */, D21211EFED4A79A9C52E3767 /* BrazeKit.bundle in Resources */, + 53064408D600848B60AB3A09 /* BrazeLocation.bundle in Resources */, EEA7B49567140123AFF0F8F5 /* LaunchScreen.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/Examples/ObjC/manual-integration-setup.sh b/Examples/ObjC/manual-integration-setup.sh index 399880dee4..06b4331713 100755 --- a/Examples/ObjC/manual-integration-setup.sh +++ b/Examples/ObjC/manual-integration-setup.sh @@ -20,7 +20,7 @@ if [ ! -f "manual-integration-setup.sh" ]; then fi # Constants -url="https://github.com/braze-inc/braze-swift-sdk/releases/download/7.4.0/braze-swift-sdk-prebuilt.zip" +url="https://github.com/braze-inc/braze-swift-sdk/releases/download/7.5.0/braze-swift-sdk-prebuilt.zip" echo "→" "Cleaning up" rm -rf braze-swift-sdk-prebuilt diff --git a/Examples/Swift/Examples-Manual.xcodeproj/project.pbxproj b/Examples/Swift/Examples-Manual.xcodeproj/project.pbxproj index 242fbeab2b..912336ca05 100644 --- a/Examples/Swift/Examples-Manual.xcodeproj/project.pbxproj +++ b/Examples/Swift/Examples-Manual.xcodeproj/project.pbxproj @@ -63,6 +63,7 @@ 4F248ABCE70D894092B1DD59 /* BrazeUI.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF2ED58955148E8CDC8E8666 /* BrazeUI.xcframework */; }; 4F82842CEF215146992E2664 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AEF0FF04032299A31D37CDE4 /* Assets.xcassets */; }; 501FED3C64FF2487E4E9C1C0 /* ReadmeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0617474A1F534AFBE702090C /* ReadmeViewController.swift */; }; + 53064408D600848B60AB3A09 /* BrazeLocation.bundle in Resources */ = {isa = PBXBuildFile; fileRef = EB8AF6AAFE01DAED72696307 /* BrazeLocation.bundle */; }; 533688F071AE2CBA8D7F9D28 /* BrazeKit.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 963312B05750D1D4DA77128F /* BrazeKit.bundle */; }; 5585CC15C01D38BC05EA7EBA /* PushNotificationsContentExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 334A021F30FF4114F75E59A1 /* PushNotificationsContentExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 569177D8B0AC23B87E50AD9B /* BrazeKit.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE1AFA11EB03A5B1BEA614A2 /* BrazeKit.xcframework */; }; @@ -140,6 +141,7 @@ BCDCB5A2B878D59CEC6F7A78 /* BrazeUI.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 85365B9C180AB9BA57FBD249 /* BrazeUI.bundle */; }; BF3E00BF746510504CA6D052 /* BrazeKit.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 963312B05750D1D4DA77128F /* BrazeKit.bundle */; }; C0C349911314FFA8D3C1D142 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE8605DB3AE191A4546EFB8 /* Extensions.swift */; }; + C7015AC6CF3A7937EFA06121 /* BrazeLocation.bundle in Resources */ = {isa = PBXBuildFile; fileRef = EB8AF6AAFE01DAED72696307 /* BrazeLocation.bundle */; }; C8C4A7F93FA2E90EA0D8921C /* Readme.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8336D4BB1A8E983EF334361 /* Readme.swift */; }; C8FBBED710EB2CD866CE008C /* BrazeKit.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE1AFA11EB03A5B1BEA614A2 /* BrazeKit.xcframework */; }; C9A1CCCD4A85DB7FC21A5E40 /* CardsInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E119A40D1B488091F2D29EE8 /* CardsInfoViewController.swift */; }; @@ -298,6 +300,7 @@ E68B1192B8A63A256A1C970D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; E9D247FEB352D899BE13EDD2 /* Readme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Readme.swift; sourceTree = ""; }; EA882DE20154839D73224130 /* ContentCards-Custom-UI.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "ContentCards-Custom-UI.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + EB8AF6AAFE01DAED72696307 /* BrazeLocation.bundle */ = {isa = PBXFileReference; lastKnownFileType = wrapper.cfbundle; name = BrazeLocation.bundle; path = "braze-swift-sdk-prebuilt/bundle/BrazeLocation.bundle"; sourceTree = ""; }; EC51D2209600CED7B9043D01 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; EE1AFA11EB03A5B1BEA614A2 /* BrazeKit.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = BrazeKit.xcframework; path = "braze-swift-sdk-prebuilt/static/BrazeKit.xcframework"; sourceTree = ""; }; EFBFE564453A1C1C9CDC8E16 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; @@ -592,6 +595,7 @@ isa = PBXGroup; children = ( 963312B05750D1D4DA77128F /* BrazeKit.bundle */, + EB8AF6AAFE01DAED72696307 /* BrazeLocation.bundle */, 85365B9C180AB9BA57FBD249 /* BrazeUI.bundle */, ); name = Resources; @@ -1056,6 +1060,7 @@ files = ( 2433F552DC49F4541FCA4B28 /* Assets.xcassets in Resources */, 2023639CD85FDD69BCE83916 /* BrazeKit.bundle in Resources */, + C7015AC6CF3A7937EFA06121 /* BrazeLocation.bundle in Resources */, 0B1E42B8B832406397F71D7C /* LaunchScreen.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1098,6 +1103,7 @@ files = ( 3E2F2CC382C69F9EBF257574 /* Assets.xcassets in Resources */, D21211EFED4A79A9C52E3767 /* BrazeKit.bundle in Resources */, + 53064408D600848B60AB3A09 /* BrazeLocation.bundle in Resources */, EEA7B49567140123AFF0F8F5 /* LaunchScreen.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/Examples/Swift/manual-integration-setup.sh b/Examples/Swift/manual-integration-setup.sh index 399880dee4..06b4331713 100755 --- a/Examples/Swift/manual-integration-setup.sh +++ b/Examples/Swift/manual-integration-setup.sh @@ -20,7 +20,7 @@ if [ ! -f "manual-integration-setup.sh" ]; then fi # Constants -url="https://github.com/braze-inc/braze-swift-sdk/releases/download/7.4.0/braze-swift-sdk-prebuilt.zip" +url="https://github.com/braze-inc/braze-swift-sdk/releases/download/7.5.0/braze-swift-sdk-prebuilt.zip" echo "→" "Cleaning up" rm -rf braze-swift-sdk-prebuilt diff --git a/Package.swift b/Package.swift index 2aa7106e9c..61d8d3484f 100644 --- a/Package.swift +++ b/Package.swift @@ -7,6 +7,7 @@ let package = Package( defaultLocalization: "en", platforms: [ .iOS(.v11), + .macCatalyst(.v13), .tvOS(.v11) ], products: [ @@ -20,7 +21,7 @@ let package = Package( ), .library( name: "BrazeLocation", - targets: ["BrazeLocation"] + targets: ["BrazeLocation", "BrazeLocationResources"] ), .library( name: "BrazeNotificationService", @@ -47,8 +48,8 @@ let package = Package( targets: [ .binaryTarget( name: "BrazeKit", - url: "https://github.com/braze-inc/braze-swift-sdk/releases/download/7.4.0/BrazeKit.zip", - checksum: "e820bcb3f8fc85402f51b705ae1494c1d73d341fc16213ddc19039ff0996dd40" + url: "https://github.com/braze-inc/braze-swift-sdk/releases/download/7.5.0/BrazeKit.zip", + checksum: "d7a35e105c76c064091431a175e600ecc145117f51c5cb1707f567698795dfb1" ), .target( name: "BrazeKitResources", @@ -65,18 +66,24 @@ let package = Package( ), .binaryTarget( name: "BrazeLocation", - url: "https://github.com/braze-inc/braze-swift-sdk/releases/download/7.4.0/BrazeLocation.zip", - checksum: "233bf832190655a4e7e5ff19f7eddc98e872702ba20f7271eead268eef641425" + url: "https://github.com/braze-inc/braze-swift-sdk/releases/download/7.5.0/BrazeLocation.zip", + checksum: "c58ddd61f71ec35eca941aea6a61a4315f68e937c86d8b7342a3bb9041d95c12" + ), + .target( + name: "BrazeLocationResources", + resources: [ + .process("Resources"), + ] ), .binaryTarget( name: "BrazeNotificationService", - url: "https://github.com/braze-inc/braze-swift-sdk/releases/download/7.4.0/BrazeNotificationService.zip", - checksum: "5b9c974c5ed0b48ab1ba59f49dbf98f1c8e3e49959e844a46e0591365cf275d0" + url: "https://github.com/braze-inc/braze-swift-sdk/releases/download/7.5.0/BrazeNotificationService.zip", + checksum: "f1869b6d2391eb696f48c69007836472172701e3fb8183e60fdf556a3d1e415b" ), .binaryTarget( name: "BrazePushStory", - url: "https://github.com/braze-inc/braze-swift-sdk/releases/download/7.4.0/BrazePushStory.zip", - checksum: "3b1b1bf392284755f8b9b00857d9d70cf3c39912b72921617f6f8db910b113e7" + url: "https://github.com/braze-inc/braze-swift-sdk/releases/download/7.5.0/BrazePushStory.zip", + checksum: "8cd9f1dbac161bf8aabb3d20483db6d3593ba646e297575c2307af3863a5c415" ), .target( name: "BrazeKitCompat", diff --git a/README.md b/README.md index fae9aa1e88..742b0f6fed 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@

- Version: 7.4.0 + Version: 7.5.0 + + + + NSPrivacyTracking + + NSPrivacyTrackingDomains + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + C617.1 + + + + NSPrivacyCollectedDataTypes + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeUserID + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeProductPersonalization + NSPrivacyCollectedDataTypePurposeAnalytics + NSPrivacyCollectedDataTypePurposeAppFunctionality + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeDeviceID + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeProductPersonalization + NSPrivacyCollectedDataTypePurposeAnalytics + NSPrivacyCollectedDataTypePurposeAppFunctionality + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeProductInteraction + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeProductPersonalization + NSPrivacyCollectedDataTypePurposeAnalytics + NSPrivacyCollectedDataTypePurposeAppFunctionality + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeCrashData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAnalytics + + + + + diff --git a/Sources/BrazeLocationResources/Resources/PrivacyInfo.xcprivacy b/Sources/BrazeLocationResources/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 0000000000..3af495bdba --- /dev/null +++ b/Sources/BrazeLocationResources/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,43 @@ + + + + + NSPrivacyTracking + + NSPrivacyTrackingDomains + + NSPrivacyAccessedAPITypes + + + + NSPrivacyCollectedDataTypes + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypePreciseLocation + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeProductPersonalization + NSPrivacyCollectedDataTypePurposeAnalytics + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeCoarseLocation + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeProductPersonalization + NSPrivacyCollectedDataTypePurposeAnalytics + + + + + diff --git a/Sources/BrazeLocationResources/noop.swift b/Sources/BrazeLocationResources/noop.swift new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Sources/BrazeUI/InAppMessageUI/Views/InAppMessageUIHtmlView.swift b/Sources/BrazeUI/InAppMessageUI/Views/InAppMessageUIHtmlView.swift index c730ba4a99..e5f23ef1d6 100644 --- a/Sources/BrazeUI/InAppMessageUI/Views/InAppMessageUIHtmlView.swift +++ b/Sources/BrazeUI/InAppMessageUI/Views/InAppMessageUIHtmlView.swift @@ -51,6 +51,9 @@ extension BrazeInAppMessageUI { /// Deeplinks (e.g. `customAppScheme://`) always dismiss the message. public var linkTargetSupport: Bool = true + /// Specifies whether the web view should support the Web Inspector developer tool, if available. + public var allowInspector: Bool = true + /// Closure allowing customization of the configuration used by the web view. public var configure: ((WKWebViewConfiguration) -> Void)? @@ -287,6 +290,13 @@ extension BrazeInAppMessageUI { webView.scrollView.bounces = false webView.backgroundColor = .clear webView.isOpaque = false + + #if compiler(>=5.8) + if #available(iOS 16.4, macOS 13.3, *) { + webView.isInspectable = attributes.allowInspector + } + #endif + // Disable this optimization for mac catalyst (force webview in window bounds) #if !targetEnvironment(macCatalyst) if #available(iOS 11.0, *) { diff --git a/Sources/BrazeUI/InAppMessageUI/Views/InAppMessageUIModalImageView.swift b/Sources/BrazeUI/InAppMessageUI/Views/InAppMessageUIModalImageView.swift index 8827d8a4c0..1a240bda3b 100644 --- a/Sources/BrazeUI/InAppMessageUI/Views/InAppMessageUIModalImageView.swift +++ b/Sources/BrazeUI/InAppMessageUI/Views/InAppMessageUIModalImageView.swift @@ -400,9 +400,14 @@ extension BrazeInAppMessageUI { guard gesture.state == .ended else { return } - logClick() - process(clickAction: message.clickAction) - dismiss() + + // Only handle click action if there are no buttons. + // Button clicks are handled separately by the target `ButtonView`. + if message.buttons.isEmpty { + logClick() + process(clickAction: message.clickAction) + dismiss() + } } open lazy var tapBackgroundGesture = UITapGestureRecognizer(