Skip to content

Commit 61ce4a0

Browse files
fix: Correct mixed language issue for spm (#24)
* feat: Split into ObjectiveC and Swift Targets
1 parent 29fe2db commit 61ce4a0

10 files changed

Lines changed: 455 additions & 91 deletions

File tree

Package.swift

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ let package = Package(
99
products: [
1010
.library(
1111
name: "mParticle-Rokt",
12-
targets: ["mParticle-Rokt"]),
12+
targets: ["mParticle-Rokt-Swift"]),
1313
],
1414
dependencies: [
1515
.package(name: "mParticle-Apple-SDK",
@@ -29,5 +29,14 @@ let package = Package(
2929
path: "mParticle-Rokt",
3030
publicHeadersPath: "."
3131
),
32+
.target(
33+
name: "mParticle-Rokt-Swift",
34+
dependencies: [
35+
"mParticle-Rokt",
36+
.product(name: "mParticle-Apple-SDK", package: "mParticle-Apple-SDK"),
37+
.product(name: "Rokt-Widget", package: "Rokt-Widget"),
38+
],
39+
path: "mParticle-Rokt-Swift"
40+
),
3241
]
3342
)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import SwiftUI
1515
import Rokt_Widget
1616
import mParticle_Apple_SDK
17+
import mParticle_Rokt
1718

1819
@available(iOS 15, *)
1920
public struct MPRoktLayout: View {

mParticle-Rokt.podspec

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,23 @@ Pod::Spec.new do |s|
1515
s.swift_version = '5.3'
1616

1717
s.ios.deployment_target = "12.0"
18-
s.ios.source_files = 'mParticle-Rokt/*.{h,m,swift}'
19-
s.ios.public_header_files = 'mParticle-Rokt/*.h'
20-
s.ios.dependency 'mParticle-Apple-SDK', '~> 8.0'
21-
s.ios.dependency 'Rokt-Widget', '~> 4.10'
18+
19+
# Objective-C subspec
20+
s.subspec 'ObjC' do |objc|
21+
objc.source_files = 'mParticle-Rokt/*.{h,m}'
22+
objc.public_header_files = 'mParticle-Rokt/*.h'
23+
objc.dependency 'mParticle-Apple-SDK', '~> 8.0'
24+
objc.dependency 'Rokt-Widget', '~> 4.10'
25+
end
26+
27+
# Swift subspec
28+
s.subspec 'Swift' do |swift|
29+
swift.source_files = 'mParticle-Rokt-Swift/*.swift'
30+
swift.dependency 'mParticle-Rokt/ObjC'
31+
swift.dependency 'mParticle-Apple-SDK', '~> 8.0'
32+
swift.dependency 'Rokt-Widget', '~> 4.10'
33+
end
34+
35+
# Default includes both
36+
s.default_subspecs = 'ObjC', 'Swift'
2237
end

mParticle-Rokt.xcodeproj/project.pbxproj

Lines changed: 256 additions & 9 deletions
Large diffs are not rendered by default.
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<Scheme
3+
LastUpgradeVersion = "1640"
4+
version = "1.7">
5+
<BuildAction
6+
parallelizeBuildables = "YES"
7+
buildImplicitDependencies = "YES"
8+
buildArchitectures = "Automatic">
9+
<BuildActionEntries>
10+
<BuildActionEntry
11+
buildForTesting = "YES"
12+
buildForRunning = "YES"
13+
buildForProfiling = "YES"
14+
buildForArchiving = "YES"
15+
buildForAnalyzing = "YES">
16+
<BuildableReference
17+
BuildableIdentifier = "primary"
18+
BlueprintIdentifier = "7E9623582E3BB272005905F4"
19+
BuildableName = "mParticle_Rokt_Swift.framework"
20+
BlueprintName = "mParticle-Rokt-Swift"
21+
ReferencedContainer = "container:mParticle-Rokt.xcodeproj">
22+
</BuildableReference>
23+
</BuildActionEntry>
24+
</BuildActionEntries>
25+
</BuildAction>
26+
<TestAction
27+
buildConfiguration = "Debug"
28+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
29+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
30+
shouldUseLaunchSchemeArgsEnv = "YES"
31+
shouldAutocreateTestPlan = "YES">
32+
</TestAction>
33+
<LaunchAction
34+
buildConfiguration = "Debug"
35+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
36+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
37+
launchStyle = "0"
38+
useCustomWorkingDirectory = "NO"
39+
ignoresPersistentStateOnLaunch = "NO"
40+
debugDocumentVersioning = "YES"
41+
debugServiceExtension = "internal"
42+
allowLocationSimulation = "YES">
43+
</LaunchAction>
44+
<ProfileAction
45+
buildConfiguration = "Release"
46+
shouldUseLaunchSchemeArgsEnv = "YES"
47+
savedToolIdentifier = ""
48+
useCustomWorkingDirectory = "NO"
49+
debugDocumentVersioning = "YES">
50+
<MacroExpansion>
51+
<BuildableReference
52+
BuildableIdentifier = "primary"
53+
BlueprintIdentifier = "7E9623582E3BB272005905F4"
54+
BuildableName = "mParticle_Rokt_Swift.framework"
55+
BlueprintName = "mParticle-Rokt-Swift"
56+
ReferencedContainer = "container:mParticle-Rokt.xcodeproj">
57+
</BuildableReference>
58+
</MacroExpansion>
59+
</ProfileAction>
60+
<AnalyzeAction
61+
buildConfiguration = "Debug">
62+
</AnalyzeAction>
63+
<ArchiveAction
64+
buildConfiguration = "Release"
65+
revealArchiveInOrganizer = "YES">
66+
</ArchiveAction>
67+
</Scheme>

mParticle-Rokt/MPKitRokt.m

Lines changed: 101 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#import "MPKitRokt.h"
22
#import <Rokt_Widget/Rokt_Widget-Swift.h>
3-
#import <mParticle_Rokt/mParticle_Rokt-Swift.h>
43

54
NSString * const kMPRemoteConfigKitHashesKey = @"hs";
65
NSString * const kMPRemoteConfigUserAttributeFilter = @"ua";
@@ -457,7 +456,7 @@ - (MPKitExecStatus *)purchaseFinalized:(NSString *)placementId catalogItemId:(NS
457456

458457
- (MPKitExecStatus *)events:(NSString *)identifier onEvent:(void (^)(MPRoktEvent * _Nonnull))onEvent {
459458
[Rokt eventsWithViewName:identifier onEvent:^(RoktEvent * _Nonnull event) {
460-
MPRoktEvent *mpEvent = [MPRoktEventMapper mapEvent:event];
459+
MPRoktEvent *mpEvent = [MPKitRokt mapEvent:event];
461460
if (mpEvent) {
462461
onEvent(mpEvent);
463462
}
@@ -742,4 +741,104 @@ - (MPKitExecStatus *)setOptOut:(BOOL)optOut {
742741
return [self execStatus:MPKitReturnCodeSuccess];
743742
}
744743

744+
+ (MPRoktEvent * _Nullable)mapEvent:(RoktEvent *)event {
745+
if (!event) {
746+
return nil;
747+
}
748+
749+
// Check for RoktEvent.InitComplete
750+
if ([event isKindOfClass:[InitComplete class]]) {
751+
InitComplete *initComplete = (InitComplete *)event;
752+
return [[MPRoktInitComplete alloc] initWithSuccess:initComplete.success];
753+
}
754+
755+
// Check for RoktEvent.ShowLoadingIndicator
756+
if ([event isKindOfClass:[ShowLoadingIndicator class]]) {
757+
return [[MPRoktShowLoadingIndicator alloc] init];
758+
}
759+
760+
// Check for RoktEvent.HideLoadingIndicator
761+
if ([event isKindOfClass:[HideLoadingIndicator class]]) {
762+
return [[MPRoktHideLoadingIndicator alloc] init];
763+
764+
}
765+
766+
// Check for RoktEvent.PlacementInteractive
767+
if ([event isKindOfClass:[PlacementInteractive class]]) {
768+
PlacementInteractive *placementInteractive = (PlacementInteractive *)event;
769+
return [[MPRoktPlacementInteractive alloc] initWithPlacementId:placementInteractive.placementId];
770+
}
771+
772+
// Check for RoktEvent.PlacementReady
773+
if ([event isKindOfClass:[PlacementReady class]]) {
774+
PlacementReady *placementReady = (PlacementReady *)event;
775+
return [[MPRoktPlacementReady alloc] initWithPlacementId:placementReady.placementId];
776+
}
777+
778+
// Check for RoktEvent.OfferEngagement
779+
if ([event isKindOfClass:[OfferEngagement class]]) {
780+
OfferEngagement *offerEngagement = (OfferEngagement *)event;
781+
return [[MPRoktOfferEngagement alloc] initWithPlacementId:offerEngagement.placementId];
782+
}
783+
784+
// Check for RoktEvent.OpenUrl
785+
if ([event isKindOfClass:[OpenUrl class]]) {
786+
OpenUrl *openUrl = (OpenUrl *)event;
787+
return [[MPRoktOpenUrl alloc] initWithPlacementId:openUrl.placementId url:openUrl.url];
788+
}
789+
790+
// Check for RoktEvent.PositiveEngagement
791+
if ([event isKindOfClass:[PositiveEngagement class]]) {
792+
PositiveEngagement *positiveEngagement = (PositiveEngagement *)event;
793+
return [[MPRoktPositiveEngagement alloc] initWithPlacementId:positiveEngagement.placementId];
794+
}
795+
796+
// Check for RoktEvent.PlacementClosed
797+
if ([event isKindOfClass:[PlacementClosed class]]) {
798+
PlacementClosed *placementClosed = (PlacementClosed *)event;
799+
return [[MPRoktPlacementClosed alloc] initWithPlacementId:placementClosed.placementId];
800+
}
801+
802+
// Check for RoktEvent.PlacementCompleted
803+
if ([event isKindOfClass:[PlacementCompleted class]]) {
804+
PlacementCompleted *placementCompleted = (PlacementCompleted *)event;
805+
return [[MPRoktPlacementCompleted alloc] initWithPlacementId:placementCompleted.placementId];
806+
}
807+
808+
// Check for RoktEvent.PlacementFailure
809+
if ([event isKindOfClass:[PlacementFailure class]]) {
810+
PlacementFailure *placementFailure = (PlacementFailure *)event;
811+
return [[MPRoktPlacementFailure alloc] initWithPlacementId:placementFailure.placementId];
812+
}
813+
814+
// Check for RoktEvent.FirstPositiveEngagement
815+
if ([event isKindOfClass:[FirstPositiveEngagement class]]) {
816+
FirstPositiveEngagement *firstPositiveEngagement = (FirstPositiveEngagement *)event;
817+
return [[MPRoktFirstPositiveEngagement alloc] initWithPlacementId:firstPositiveEngagement.placementId];
818+
}
819+
820+
// Check for RoktEvent.CartItemInstantPurchase
821+
if ([event isKindOfClass:[CartItemInstantPurchase class]]) {
822+
CartItemInstantPurchase *cartItemInstantPurchase = (CartItemInstantPurchase *)event;
823+
824+
// Handle nil coalescing for name field
825+
NSString *name = cartItemInstantPurchase.name ?: @"";
826+
827+
return [[MPRoktCartItemInstantPurchase alloc] initWithPlacementId:cartItemInstantPurchase.placementId
828+
name:name
829+
cartItemId:cartItemInstantPurchase.cartItemId
830+
catalogItemId:cartItemInstantPurchase.catalogItemId
831+
currency:cartItemInstantPurchase.currency
832+
description:cartItemInstantPurchase.description
833+
linkedProductId:cartItemInstantPurchase.linkedProductId
834+
providerData:cartItemInstantPurchase.providerData
835+
quantity:cartItemInstantPurchase.quantity
836+
totalPrice:cartItemInstantPurchase.totalPrice
837+
unitPrice:cartItemInstantPurchase.unitPrice];
838+
}
839+
840+
// Default case - return nil if no matching event type found
841+
return nil;
842+
}
843+
745844
@end

mParticle-Rokt/MPRoktEventMapper.swift

Lines changed: 0 additions & 73 deletions
This file was deleted.

mParticle_RoktTests/mParticle_RoktTests-Bridging-Header.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,3 @@
55
#import <Rokt_Widget/Rokt_Widget-Swift.h>
66
#import <mParticle_Rokt/mParticle_Rokt.h>
77
#import "MPKitRokt.h"
8-
#import <mParticle_Rokt/mParticle_Rokt-Swift.h>

mParticle_RoktTests/mParticle_RoktTests.m

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
#import <Rokt_Widget/Rokt_Widget-Swift.h>
44
#import <mParticle_Rokt/mParticle_Rokt.h>
55
#import "MPKitRokt.h"
6-
#import <mParticle_Rokt/mParticle_Rokt-Swift.h>
76

87
@interface MPKitRokt ()
98

mParticle_RoktTests/mParticle_Rokt_SwiftTests.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import Testing
1010
import SwiftUI
1111
@testable import mParticle_Rokt
1212
import Rokt_Widget
13+
import mParticle_Rokt_Swift
1314

1415
struct mParticle_Rokt_SwiftTests {
1516

0 commit comments

Comments
 (0)