Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .github/workflows/pull-request-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@ jobs:
run: brew install swiftlint
- name: Run SwiftLint
run: swiftlint
- name: Lint Pods
run: pod lib lint --include-podspecs="Virtusize*.podspec" --allow-warnings

test:
runs-on: macos-26
Expand Down
3 changes: 3 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ Use list notation, and following prefixes:
- Bugfix - when fixing any major bug
- Docs - for any improvement to documentation

### Changes
- Feature: Added Sentry logger

### 2.12.26
- Fix: No size available text instead of max size issue
- Fix: Virtusize widget recommended size incorrect
Expand Down
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ virtusize-test:
-workspace "Virtusize.xcworkspace" \
-scheme "VirtusizeTests" \
-sdk "iphonesimulator" \
-destination "platform=iOS Simulator,name=iPhone 16e,OS=18.6"
-destination "platform=iOS Simulator,name=iPhone 16e,OS=latest"

virtusize-core-test:

Expand All @@ -45,7 +45,7 @@ virtusize-core-test:
-workspace "Virtusize.xcworkspace" \
-scheme "VirtusizeCoreTests" \
-sdk "iphonesimulator" \
-destination "platform=iOS Simulator,name=iPhone 16e,OS=18.6" \
-destination "platform=iOS Simulator,name=iPhone 16e,OS=latest" \
-parallel-testing-enabled NO

test: virtusize-test virtusize-core-test
Expand Down
8 changes: 5 additions & 3 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import PackageDescription
let package = Package(
name: "Virtusize",
defaultLocalization: "en",
platforms: [.iOS(.v13)],
platforms: [.iOS(.v15)],
products: [
.library(
name: "Virtusize",
Expand All @@ -19,11 +19,13 @@ let package = Package(
targets: ["VirtusizeCore"]
)
],

targets: [
.target(
name: "Virtusize",
dependencies: ["VirtusizeCore", "VirtusizeAuth"],
dependencies: [
"VirtusizeCore",
"VirtusizeAuth"
],
path: "Virtusize/Sources",
exclude: ["Info.plist"],
resources: [.process("Resources")]
Expand Down
3 changes: 2 additions & 1 deletion Virtusize.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Pod::Spec.new do |s|
s.source = { :git => 'https://github.com/virtusize/integration_ios.git', :tag => "#{s.version}" }

s.platform = :ios
s.ios.deployment_target = '13.0'
s.ios.deployment_target = '15.0'
s.swift_version = '5'

s.static_framework = true
Expand All @@ -18,6 +18,7 @@ Pod::Spec.new do |s|
s.resource_bundle = { 'Virtusize' => ["Virtusize/Sources/Resources/**/*.lproj", "Virtusize/Sources/Resources/PrivacyInfo.xcprivacy"] }

s.pod_target_xcconfig = { 'BUILD_LIBRARY_FOR_DISTRIBUTION' => 'YES' }
s.dependency 'Sentry', '9.6.0'
s.subspec 'VirtusizeCore' do |ss|
ss.dependency 'VirtusizeCore', "#{s.version}"
end
Expand Down
54 changes: 50 additions & 4 deletions Virtusize.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,14 @@
52D1E09B2D6DCEA90073737B /* I18nTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D1E09A2D6DCEA30073737B /* I18nTests.swift */; };
52D1E09E2D6DD09A0073737B /* MockURLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D1E09D2D6DD0940073737B /* MockURLSession.swift */; };
52D1E0A02D6DD5900073737B /* I18nFixtures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D1E09F2D6DD58A0073737B /* I18nFixtures.swift */; };
52FDA2882D3A5C8F007F5AC8 /* VirtusizeAuth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52FDA2872D3A5C8F007F5AC8 /* VirtusizeAuth.framework */; };
741DD0692DA3D06B007DF2C3 /* VirtusizeFlutter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 741DD0682DA3D06B007DF2C3 /* VirtusizeFlutter.swift */; };
741DD06D2DA42E63007DF2C3 /* VirtusizeFlutterProductEventHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 741DD06C2DA42E63007DF2C3 /* VirtusizeFlutterProductEventHandler.swift */; };
748DF81A2E3FF2A9002CA7FC /* VirtusizeGetSizeParamsShoe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 748DF8192E3FF2A9002CA7FC /* VirtusizeGetSizeParamsShoe.swift */; };
74F8E3BE2E0D5B7A002CAE98 /* virtusize_loading.gif in Resources */ = {isa = PBXBuildFile; fileRef = 74F8E3BD2E0D5B7A002CAE98 /* virtusize_loading.gif */; };
74F8E3D02E0EA477002CAE98 /* UIImageViewExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74F8E3CF2E0EA473002CAE98 /* UIImageViewExtensions.swift */; };
8455FFD42B29A0C500019B1B /* VirtusizeGetSizeItemsParam.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8455FFD32B29A0C500019B1B /* VirtusizeGetSizeItemsParam.swift */; };
84CF03B92BD7A64A00C08920 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 84CF03B82BD7A64A00C08920 /* PrivacyInfo.xcprivacy */; };
9BE02B152F4D013000083151 /* VirtusizeSentryTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BE02B142F4D013000083151 /* VirtusizeSentryTracker.swift */; };
9C0EBA2225BACADD00F1D746 /* VirtusizeProductImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C0EBA2125BACADD00F1D746 /* VirtusizeProductImage.swift */; };
9C106EB024FCE0C70012EE51 /* VirtusizeInPageStandard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C106EAF24FCE0C70012EE51 /* VirtusizeInPageStandard.swift */; };
9C106EB424FE41EC0012EE51 /* VirtusizeProductImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C106EB324FE41EC0012EE51 /* VirtusizeProductImageView.swift */; };
Expand Down Expand Up @@ -77,7 +77,6 @@
9C787FCD25DB7A3D00346F2A /* SizeRecommendationType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C787FCC25DB7A3D00346F2A /* SizeRecommendationType.swift */; };
9C84B3FD26C2566B00DDF434 /* VirtusizeViewEventProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C84B3FC26C2566B00DDF434 /* VirtusizeViewEventProtocol.swift */; };
9C84B40126C276CA00DDF434 /* VirtusizeNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C84B40026C276CA00DDF434 /* VirtusizeNotification.swift */; };
9C92B3A52CB2DF7F001DD4A2 /* VirtusizeCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C92B3A42CB2DF7F001DD4A2 /* VirtusizeCore.framework */; };
9C969FD124EB5F8A00DD642F /* VirtusizeI18nLocalization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C969FD024EB5F8A00DD642F /* VirtusizeI18nLocalization.swift */; };
9C969FD324EBE0C400DD642F /* DeserializerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C969FD224EBE0C300DD642F /* DeserializerTests.swift */; };
9C969FD824EBF71200DD642F /* i18n_en.json in Resources */ = {isa = PBXBuildFile; fileRef = 9C969FD524EBF71200DD642F /* i18n_en.json */; };
Expand Down Expand Up @@ -119,8 +118,13 @@
9CFF40FC25B974D200B21D4E /* VirtusizeViewStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CFF40FB25B974D200B21D4E /* VirtusizeViewStyle.swift */; };
9CFF410D25B98D4E00B21D4E /* VirtusizeInPageStandardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CFF410C25B98D4E00B21D4E /* VirtusizeInPageStandardViewModel.swift */; };
9CFF411325B98FA900B21D4E /* Observable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CFF411225B98FA900B21D4E /* Observable.swift */; };
D760129E2F3F2A1700AF72AA /* Sentry in Frameworks */ = {isa = PBXBuildFile; productRef = D760129D2F3F2A1700AF72AA /* Sentry */; };
D7BC74B42EDDD063004616BF /* product_types.json in Resources */ = {isa = PBXBuildFile; fileRef = D7BC74B32EDDD063004616BF /* product_types.json */; };
D7BC74B52EDDD063004616BF /* product_types.json in Resources */ = {isa = PBXBuildFile; fileRef = D7BC74B32EDDD063004616BF /* product_types.json */; };
D7C67BE72F3DC56E0007167B /* VirtusizeAuth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52FDA2872D3A5C8F007F5AC8 /* VirtusizeAuth.framework */; };
D7C67BE82F3DC56E0007167B /* VirtusizeAuth.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 52FDA2872D3A5C8F007F5AC8 /* VirtusizeAuth.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
D7C67BEA2F3DC5700007167B /* VirtusizeCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C92B3A42CB2DF7F001DD4A2 /* VirtusizeCore.framework */; };
D7C67BEB2F3DC5700007167B /* VirtusizeCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9C92B3A42CB2DF7F001DD4A2 /* VirtusizeCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
DF71642A21A28858002C7202 /* VirtusizeEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF71642921A28858002C7202 /* VirtusizeEvent.swift */; };
DF71642C21A28939002C7202 /* VirtusizeEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF71642B21A28939002C7202 /* VirtusizeEnvironment.swift */; };
DF71642E21A28DE8002C7202 /* VirtusizeProduct.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF71642D21A28DE8002C7202 /* VirtusizeProduct.swift */; };
Expand All @@ -139,6 +143,21 @@
};
/* End PBXContainerItemProxy section */

/* Begin PBXCopyFilesBuildPhase section */
D7C67BE92F3DC56E0007167B /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
D7C67BE82F3DC56E0007167B /* VirtusizeAuth.framework in Embed Frameworks */,
D7C67BEB2F3DC5700007167B /* VirtusizeCore.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */

/* Begin PBXFileReference section */
4D6C5799205FCBE900DA910E /* VirtusizeAPIRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VirtusizeAPIRequest.swift; sourceTree = "<group>"; };
4DED8D1C205755C3001CA7DF /* Virtusize.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Virtusize.framework; sourceTree = BUILT_PRODUCTS_DIR; };
Expand Down Expand Up @@ -167,6 +186,7 @@
74F8E3CF2E0EA473002CAE98 /* UIImageViewExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIImageViewExtensions.swift; sourceTree = "<group>"; };
8455FFD32B29A0C500019B1B /* VirtusizeGetSizeItemsParam.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VirtusizeGetSizeItemsParam.swift; sourceTree = "<group>"; };
84CF03B82BD7A64A00C08920 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
9BE02B142F4D013000083151 /* VirtusizeSentryTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VirtusizeSentryTracker.swift; sourceTree = "<group>"; };
9C0EBA2125BACADD00F1D746 /* VirtusizeProductImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VirtusizeProductImage.swift; sourceTree = "<group>"; };
9C106EAF24FCE0C70012EE51 /* VirtusizeInPageStandard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VirtusizeInPageStandard.swift; sourceTree = "<group>"; };
9C106EB324FE41EC0012EE51 /* VirtusizeProductImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VirtusizeProductImageView.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -269,8 +289,9 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
52FDA2882D3A5C8F007F5AC8 /* VirtusizeAuth.framework in Frameworks */,
9C92B3A52CB2DF7F001DD4A2 /* VirtusizeCore.framework in Frameworks */,
D7C67BE72F3DC56E0007167B /* VirtusizeAuth.framework in Frameworks */,
D7C67BEA2F3DC5700007167B /* VirtusizeCore.framework in Frameworks */,
D760129E2F3F2A1700AF72AA /* Sentry in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand All @@ -287,6 +308,7 @@
4D6C5794205FB9FC00DA910E /* Internal */ = {
isa = PBXGroup;
children = (
9BE02B142F4D013000083151 /* VirtusizeSentryTracker.swift */,
52ACB08F2D7083C60011E51E /* DefaultEventHandler.swift */,
9CEC8D88252AB8EE001CBDFB /* Models */,
9C106EB524FE424E0012EE51 /* Views */,
Expand Down Expand Up @@ -646,6 +668,7 @@
4DED8D19205755C3001CA7DF /* Headers */,
4DED8D1A205755C3001CA7DF /* Resources */,
DF6B5C91219BD262000B3402 /* ShellScript */,
D7C67BE92F3DC56E0007167B /* Embed Frameworks */,
);
buildRules = (
);
Expand Down Expand Up @@ -706,6 +729,9 @@
Base,
);
mainGroup = 4DED8D12205755C3001CA7DF;
packageReferences = (
D760129C2F3F2A1700AF72AA /* XCRemoteSwiftPackageReference "sentry-cocoa" */,
);
productRefGroup = 4DED8D1D205755C3001CA7DF /* Products */;
projectDirPath = "";
projectRoot = "";
Expand Down Expand Up @@ -818,6 +844,7 @@
9C32A14B250279D00062C11D /* VirtusizeInPageView.swift in Sources */,
9C787FC925DB793400346F2A /* VirtusizeEventHandler.swift in Sources */,
9CFF40FC25B974D200B21D4E /* VirtusizeViewStyle.swift in Sources */,
9BE02B152F4D013000083151 /* VirtusizeSentryTracker.swift in Sources */,
52ACB0902D7083D10011E51E /* DefaultEventHandler.swift in Sources */,
9CB98B9D24B2C5B400C51F20 /* VirtusizeLanguage.swift in Sources */,
9C5956CD2484F6280014DF51 /* VirtusizeOrderItem.swift in Sources */,
Expand Down Expand Up @@ -1180,6 +1207,25 @@
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */

/* Begin XCRemoteSwiftPackageReference section */
D760129C2F3F2A1700AF72AA /* XCRemoteSwiftPackageReference "sentry-cocoa" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/getsentry/sentry-cocoa";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 9.4.1;
};
};
/* End XCRemoteSwiftPackageReference section */

/* Begin XCSwiftPackageProductDependency section */
D760129D2F3F2A1700AF72AA /* Sentry */ = {
isa = XCSwiftPackageProductDependency;
package = D760129C2F3F2A1700AF72AA /* XCRemoteSwiftPackageReference "sentry-cocoa" */;
productName = Sentry;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 4DED8D13205755C3001CA7DF /* Project object */;
}
1 change: 1 addition & 0 deletions Virtusize/Sources/Flutter/VirtusizeFlutter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ public class VirtusizeFlutter: Virtusize {
flutterHandler: VirtusizeFlutterProductEventHandler? = nil
) {
self.flutterHandler = flutterHandler
VirtusizeSentryTracker.shared.setSDKPlatform("flutter-ios")
NotificationCenter.default.removeObserver(self)

NotificationCenter.default.addObserver(
Expand Down
4 changes: 4 additions & 0 deletions Virtusize/Sources/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,9 @@
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSPrincipalClass</key>
<string></string>
<key>SentryDSN</key>
<string>https://f2ae6aac72a9ec47631fdbc4cd8589e6@o903.ingest.us.sentry.io/4510877679353856</string>
<key>SentryTracesSampleRate</key>
<real>1</real>
</dict>
</plist>
1 change: 0 additions & 1 deletion Virtusize/Sources/Internal/API/VirtusizeAPIService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ class VirtusizeAPIService: APIService {
guard let request = APIRequest.sendEvent(event, withContext: context) else {
return nil
}

let response = await VirtusizeAPIService.performAsync(request)
guard response.virtusizeError == nil, let data = response.data else {
// failed to perform request
Expand Down
52 changes: 52 additions & 0 deletions Virtusize/Sources/Internal/DefaultEventHandler.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,50 +23,102 @@
// THE SOFTWARE.
//

import VirtusizeCore

internal class DefaultEventHandler: VirtusizeEventHandler, VirtusizeViewEventProtocol {
var virtusizeEventHandler: VirtusizeEventHandler?

private var sentryStoreId: String? {
APICache.shared.currentStoreId.map { String($0) }
}

public func userOpenedWidget() {
VirtusizeSentryTracker.shared.trackWebViewEvent(
eventName: VirtusizeEventName.userOpenedWidget.rawValue,
storeId: sentryStoreId
)
handleUserOpenedWidget()
}

public func userAuthData(bid: String?, auth: String?) {
VirtusizeSentryTracker.shared.trackWebViewEvent(
eventName: VirtusizeEventName.userAuthData.rawValue,
storeId: sentryStoreId
)
handleUserAuthData(bid: bid, auth: auth)
}

public func userSelectedProduct(userProductId: Int?) {
VirtusizeSentryTracker.shared.trackWebViewEvent(
eventName: VirtusizeEventName.userSelectedProduct.rawValue,
storeId: sentryStoreId
)
handleUserSelectedProduct(userProductId: userProductId)
}

public func userAddedProduct() {
VirtusizeSentryTracker.shared.trackWebViewEvent(
eventName: VirtusizeEventName.userAddedProduct.rawValue,
storeId: sentryStoreId
)
handleUserAddedProduct()
}

public func userDeletedProduct(userProductId: Int?) {
VirtusizeSentryTracker.shared.trackWebViewEvent(
eventName: VirtusizeEventName.userDeletedProduct.rawValue,
storeId: sentryStoreId
)
handleUserDeletedProduct(userProductId: userProductId)
}

public func userChangedRecommendationType(changedType: SizeRecommendationType?) {
VirtusizeSentryTracker.shared.trackWebViewEvent(
eventName: VirtusizeEventName.userChangedRecommendationType.rawValue,
storeId: sentryStoreId
)
handleUserChangedRecommendationType(changedType: changedType)
}

public func userUpdatedBodyMeasurements(recommendedSize: String?) {
VirtusizeSentryTracker.shared.trackWebViewEvent(
eventName: VirtusizeEventName.userUpdatedBodyMeasurements.rawValue,
storeId: sentryStoreId
)
handleUserUpdatedBodyMeasurements(recommendedSize: recommendedSize)
}

public func userLoggedIn() {
VirtusizeSentryTracker.shared.trackWebViewEvent(
eventName: VirtusizeEventName.userLoggedIn.rawValue,
storeId: sentryStoreId
)
handleUserLoggedIn()
}

public func clearUserData() {
VirtusizeSentryTracker.shared.trackWebViewEvent(
eventName: "user-clear-data",
storeId: sentryStoreId
)

handleClearUserData()
}

public func userClosedWidget() {
VirtusizeSentryTracker.shared.trackWebViewEvent(
eventName: VirtusizeEventName.userClosedWidget.rawValue,
storeId: sentryStoreId
)

handleUserClosedWidget()
}

public func userClickedLanguageSelector(language: VirtusizeLanguage) {
VirtusizeSentryTracker.shared.trackWebViewEvent(
eventName: VirtusizeEventName.userClickedLanguageSelector.rawValue,
storeId: sentryStoreId
)
handleUserClickedLanguageSelector(language: language)
}
}
Loading