Skip to content

Commit 30e9842

Browse files
authored
feat: Remove Core Location from MPKitProtocol; add MPLocation types (#701)
* Replace Core Location types in MPKitProtocol with MPLocation Remove CoreLocation from MPKitProtocol.h by introducing MPLocation, MPLocationAccuracy, and MPLocationDistance. Kits that forward location import CoreLocation locally and map MPLocation to provider APIs. Update CleverTap and Localytics kit implementations accordingly. Made-with: Cursor * fix imports
1 parent dab02a4 commit 30e9842

11 files changed

Lines changed: 136 additions & 20 deletions

File tree

Kits/clevertap/clevertap-7/Package.swift

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,8 @@ let package = Package(
99
.library(name: "mParticle-CleverTap", targets: ["mParticle-CleverTap"])
1010
],
1111
dependencies: [
12-
.package(
13-
url: "https://github.com/mParticle/mparticle-apple-sdk",
14-
branch: "workstation/9.0-Release"
15-
),
12+
// Standalone kit CI/releases: use .package(url: "https://github.com/mParticle/mparticle-apple-sdk", branch: "…").
13+
.package(name: "mparticle-apple-sdk", path: "../../../"),
1614
.package(url: "https://github.com/CleverTap/clevertap-ios-sdk", .upToNextMajor(from: "7.0.0"))
1715
],
1816
targets: [
@@ -25,7 +23,13 @@ let package = Package(
2523
resources: [.process("PrivacyInfo.xcprivacy")],
2624
publicHeadersPath: "include",
2725
cSettings: [
28-
.unsafeFlags(["-Wno-non-modular-include-in-framework-module"])
26+
.unsafeFlags([
27+
"-Wno-non-modular-include-in-framework-module",
28+
"-Wno-error=non-modular-include-in-framework-module"
29+
])
30+
],
31+
linkerSettings: [
32+
.linkedFramework("CoreLocation")
2933
]
3034
),
3135
.testTarget(name: "mParticle-CleverTapTests", dependencies: ["mParticle-CleverTap"])

Kits/clevertap/clevertap-7/Sources/mParticle-CleverTap/MPKitCleverTap.m

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
#import "MPKitCleverTap.h"
2+
@import CoreLocation;
3+
#import "MPLocation.h"
24

35
#if defined(__has_include) && __has_include(<CleverTapSDK/CleverTap.h>)
46
#import <CleverTapSDK/CleverTap.h>
@@ -131,8 +133,9 @@ - (nonnull MPKitExecStatus *)openURL:(nonnull NSURL *)url
131133

132134
#pragma mark Location tracking
133135

134-
- (nonnull MPKitExecStatus *)setLocation:(nonnull CLLocation *)location {
135-
[CleverTap setLocation:location.coordinate];
136+
- (nonnull MPKitExecStatus *)setLocation:(nonnull MPLocation *)location {
137+
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(location.latitude, location.longitude);
138+
[CleverTap setLocation:coordinate];
136139
return [self execStatus:MPKitReturnCodeSuccess];
137140
}
138141

Kits/localytics/localytics-6/Package.swift

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ let package = Package(
1111
)
1212
],
1313
dependencies: [
14-
.package(url: "https://github.com/mParticle/mparticle-apple-sdk",
15-
branch: "workstation/9.0-Release"),
14+
// Standalone kit CI/releases: use .package(url: "https://github.com/mParticle/mparticle-apple-sdk", branch: "…").
15+
.package(name: "mparticle-apple-sdk", path: "../../../"),
1616
.package(url: "https://github.com/localytics/Localytics-swiftpm",
1717
.upToNextMajor(from: "6.0.0"))
1818
],
@@ -24,7 +24,16 @@ let package = Package(
2424
.product(name: "Localytics", package: "Localytics-swiftpm")
2525
],
2626
resources: [.process("PrivacyInfo.xcprivacy")],
27-
publicHeadersPath: "include"
27+
publicHeadersPath: "include",
28+
cSettings: [
29+
.unsafeFlags([
30+
"-Wno-non-modular-include-in-framework-module",
31+
"-Wno-error=non-modular-include-in-framework-module"
32+
])
33+
],
34+
linkerSettings: [
35+
.linkedFramework("CoreLocation")
36+
]
2837
),
2938
.testTarget(
3039
name: "mParticle-LocalyticsTests",

Kits/localytics/localytics-6/Sources/mParticle-Localytics/MPKitLocalytics.m

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
#import "MPKitLocalytics.h"
2+
@import CoreLocation;
3+
#import "MPLocation.h"
24

35
#if defined(__has_include) && __has_include(<Localytics/Localytics.h>)
46
#import <Localytics/Localytics.h>
@@ -213,8 +215,9 @@ - (nonnull MPKitExecStatus *)userNotificationCenter:(nonnull UNUserNotificationC
213215
return execStatus;
214216
}
215217

216-
- (MPKitExecStatus *)setLocation:(CLLocation *)location {
217-
[Localytics setLocation:location.coordinate];
218+
- (MPKitExecStatus *)setLocation:(MPLocation *)location {
219+
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(location.latitude, location.longitude);
220+
[Localytics setLocation:coordinate];
218221

219222
MPKitExecStatus *execStatus = [[MPKitExecStatus alloc] initWithSDKCode:@(MPKitInstanceLocalytics) returnCode:MPKitReturnCodeSuccess];
220223
return execStatus;

Kits/localytics/localytics-7/Package.swift

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ let package = Package(
1111
)
1212
],
1313
dependencies: [
14-
.package(url: "https://github.com/mParticle/mparticle-apple-sdk",
15-
branch: "workstation/9.0-Release"),
14+
// Standalone kit CI/releases: use .package(url: "https://github.com/mParticle/mparticle-apple-sdk", branch: "…").
15+
.package(name: "mparticle-apple-sdk", path: "../../../"),
1616
.package(url: "https://github.com/localytics/Localytics-swiftpm",
1717
.upToNextMajor(from: "7.0.0"))
1818
],
@@ -24,7 +24,16 @@ let package = Package(
2424
.product(name: "Localytics", package: "Localytics-swiftpm")
2525
],
2626
resources: [.process("PrivacyInfo.xcprivacy")],
27-
publicHeadersPath: "include"
27+
publicHeadersPath: "include",
28+
cSettings: [
29+
.unsafeFlags([
30+
"-Wno-non-modular-include-in-framework-module",
31+
"-Wno-error=non-modular-include-in-framework-module"
32+
])
33+
],
34+
linkerSettings: [
35+
.linkedFramework("CoreLocation")
36+
]
2837
),
2938
.testTarget(
3039
name: "mParticle-LocalyticsTests",

Kits/localytics/localytics-7/Sources/mParticle-Localytics/MPKitLocalytics.m

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
#import "MPKitLocalytics.h"
2+
@import CoreLocation;
3+
#import "MPLocation.h"
24

35
#if defined(__has_include) && __has_include(<Localytics/Localytics.h>)
46
#import <Localytics/Localytics.h>
@@ -213,8 +215,9 @@ - (nonnull MPKitExecStatus *)userNotificationCenter:(nonnull UNUserNotificationC
213215
return execStatus;
214216
}
215217

216-
- (MPKitExecStatus *)setLocation:(CLLocation *)location {
217-
[Localytics setLocation:location.coordinate];
218+
- (MPKitExecStatus *)setLocation:(MPLocation *)location {
219+
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(location.latitude, location.longitude);
220+
[Localytics setLocation:coordinate];
218221

219222
MPKitExecStatus *execStatus = [[MPKitExecStatus alloc] initWithSDKCode:@(MPKitInstanceLocalytics) returnCode:MPKitReturnCodeSuccess];
220223
return execStatus;

mParticle-Apple-SDK.xcodeproj/project.pbxproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@
109109
53A79D0C29CE23F700E7489F /* MPExtensionProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79C2829CDFB4800E7489F /* MPExtensionProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
110110
53A79D0D29CE23F700E7489F /* MPIdentityApiRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79C3929CDFB4800E7489F /* MPIdentityApiRequest.h */; settings = {ATTRIBUTES = (Public, ); }; };
111111
53A79D0F29CE23F700E7489F /* MPForwardRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79C2529CDFB4800E7489F /* MPForwardRecord.h */; settings = {ATTRIBUTES = (Public, ); }; };
112+
7AF100032F50000300E74801 /* MPLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AF100012F50000100E74801 /* MPLocation.h */; settings = {ATTRIBUTES = (Public, ); }; };
112113
53A79D1029CE23F700E7489F /* FilteredMParticleUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79C2929CDFB4800E7489F /* FilteredMParticleUser.h */; settings = {ATTRIBUTES = (Public, ); }; };
113114
53A79D1129CE23F700E7489F /* MPCommerceEvent+Dictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79C3F29CDFB4800E7489F /* MPCommerceEvent+Dictionary.h */; settings = {ATTRIBUTES = (Public, ); }; };
114115
53A79D1329CE23F700E7489F /* MPPromotion.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79C2B29CDFB4800E7489F /* MPPromotion.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -202,6 +203,7 @@
202203
53A79D9129CE23F700E7489F /* MPConsentKitFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79AF829CDFB1F00E7489F /* MPConsentKitFilter.m */; };
203204
53A79D9229CE23F700E7489F /* MPKitRegister.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B4C29CDFB1F00E7489F /* MPKitRegister.m */; };
204205
53A79D9329CE23F700E7489F /* MPForwardRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79ACA29CDFB1E00E7489F /* MPForwardRecord.m */; };
206+
7AF100042F50000400E74801 /* MPLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AF100022F50000200E74801 /* MPLocation.m */; };
205207
53A79D9429CE23F700E7489F /* MPConnector.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79AAE29CDFB1E00E7489F /* MPConnector.m */; };
206208
53A79D9529CE23F700E7489F /* MPBreadcrumb.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79AC129CDFB1E00E7489F /* MPBreadcrumb.m */; };
207209
53A79D9629CE23F700E7489F /* MPEnums.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79AD029CDFB1F00E7489F /* MPEnums.m */; };
@@ -409,6 +411,8 @@
409411
53A79AC829CDFB1E00E7489F /* MPBreadcrumb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPBreadcrumb.h; sourceTree = "<group>"; };
410412
53A79AC929CDFB1E00E7489F /* MPUpload.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPUpload.m; sourceTree = "<group>"; };
411413
53A79ACA29CDFB1E00E7489F /* MPForwardRecord.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPForwardRecord.m; sourceTree = "<group>"; };
414+
7AF100012F50000100E74801 /* MPLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPLocation.h; sourceTree = "<group>"; };
415+
7AF100022F50000200E74801 /* MPLocation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPLocation.m; sourceTree = "<group>"; };
412416
53A79ACB29CDFB1E00E7489F /* MPMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPMessage.h; sourceTree = "<group>"; };
413417
53A79ACC29CDFB1E00E7489F /* MPSession.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPSession.m; sourceTree = "<group>"; };
414418
53A79ACD29CDFB1E00E7489F /* MPIntegrationAttributes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPIntegrationAttributes.m; sourceTree = "<group>"; };
@@ -855,6 +859,7 @@
855859
53A79AC829CDFB1E00E7489F /* MPBreadcrumb.h */,
856860
53A79AC929CDFB1E00E7489F /* MPUpload.m */,
857861
53A79ACA29CDFB1E00E7489F /* MPForwardRecord.m */,
862+
7AF100022F50000200E74801 /* MPLocation.m */,
858863
53A79ACB29CDFB1E00E7489F /* MPMessage.h */,
859864
53A79ACC29CDFB1E00E7489F /* MPSession.m */,
860865
53A79ACD29CDFB1E00E7489F /* MPIntegrationAttributes.m */,
@@ -1012,6 +1017,7 @@
10121017
53A79C2429CDFB4800E7489F /* MPBaseEvent.h */,
10131018
D3724C182AE02AF60074CD67 /* mParticle_Apple_SDK.h */,
10141019
53A79C2529CDFB4800E7489F /* MPForwardRecord.h */,
1020+
7AF100012F50000100E74801 /* MPLocation.h */,
10151021
53A79C2629CDFB4800E7489F /* MPKitProtocol.h */,
10161022
53A79C2729CDFB4800E7489F /* mParticle.h */,
10171023
53A79C2829CDFB4800E7489F /* MPExtensionProtocol.h */,
@@ -1229,6 +1235,7 @@
12291235
53A79D0C29CE23F700E7489F /* MPExtensionProtocol.h in Headers */,
12301236
53A79D0D29CE23F700E7489F /* MPIdentityApiRequest.h in Headers */,
12311237
53A79D0F29CE23F700E7489F /* MPForwardRecord.h in Headers */,
1238+
7AF100032F50000300E74801 /* MPLocation.h in Headers */,
12321239
53A79D1029CE23F700E7489F /* FilteredMParticleUser.h in Headers */,
12331240
53A79D1129CE23F700E7489F /* MPCommerceEvent+Dictionary.h in Headers */,
12341241
53A79D1329CE23F700E7489F /* MPPromotion.h in Headers */,
@@ -1635,6 +1642,7 @@
16351642
729721792EAC2B750045E55C /* AppEnvironmentProvider.m in Sources */,
16361643
53A79D9229CE23F700E7489F /* MPKitRegister.m in Sources */,
16371644
53A79D9329CE23F700E7489F /* MPForwardRecord.m in Sources */,
1645+
7AF100042F50000400E74801 /* MPLocation.m in Sources */,
16381646
53A79D9429CE23F700E7489F /* MPConnector.m in Sources */,
16391647
53A79D9529CE23F700E7489F /* MPBreadcrumb.m in Sources */,
16401648
53A79D9629CE23F700E7489F /* MPEnums.m in Sources */,
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#import "MPLocation.h"
2+
3+
@implementation MPLocation
4+
5+
- (nonnull instancetype)initWithLatitude:(double)latitude
6+
longitude:(double)longitude
7+
altitude:(double)altitude
8+
horizontalAccuracy:(double)horizontalAccuracy
9+
verticalAccuracy:(double)verticalAccuracy
10+
course:(double)course
11+
speed:(double)speed
12+
timestamp:(nonnull NSDate *)timestamp {
13+
self = [super init];
14+
if (self) {
15+
_latitude = latitude;
16+
_longitude = longitude;
17+
_altitude = altitude;
18+
_horizontalAccuracy = horizontalAccuracy;
19+
_verticalAccuracy = verticalAccuracy;
20+
_course = course;
21+
_speed = speed;
22+
_timestamp = [timestamp copy];
23+
}
24+
return self;
25+
}
26+
27+
@end

mParticle-Apple-SDK/Include/MPKitProtocol.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
#import <Foundation/Foundation.h>
55
#import "MPEnums.h"
66
#import "MPForwardRecord.h"
7+
#import "MPLocation.h"
78
#import <UIKit/UIKit.h>
8-
#import <CoreLocation/CoreLocation.h>
99

1010
@class RoktEmbeddedView;
1111
@class RoktConfig;
@@ -74,9 +74,9 @@
7474
#pragma mark Location tracking
7575
// We shouldn't remove this methods it is part of kit interface so MParticle will never send any event and data
7676
// And these methods will be required when we reimplement location support as separate module
77-
- (nonnull MPKitExecStatus *)beginLocationTracking:(CLLocationAccuracy)accuracy minDistance:(CLLocationDistance)distanceFilter;
77+
- (nonnull MPKitExecStatus *)beginLocationTracking:(MPLocationAccuracy)accuracy minDistance:(MPLocationDistance)distanceFilter;
7878
- (nonnull MPKitExecStatus *)endLocationTracking;
79-
- (nonnull MPKitExecStatus *)setLocation:(nonnull CLLocation *)location;
79+
- (nonnull MPKitExecStatus *)setLocation:(nonnull MPLocation *)location;
8080

8181
#pragma mark Session management
8282
- (nonnull MPKitExecStatus *)beginSession;
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#ifndef mParticle_Apple_SDK_MPLocation_h
2+
#define mParticle_Apple_SDK_MPLocation_h
3+
4+
#import <Foundation/Foundation.h>
5+
6+
NS_ASSUME_NONNULL_BEGIN
7+
8+
/**
9+
* Accuracy for location tracking, in meters. Uses the same numeric values as `CLLocationAccuracy`
10+
* from Core Location (for example `kCLLocationAccuracyBest` when Core Location is available).
11+
*/
12+
typedef double MPLocationAccuracy;
13+
14+
/**
15+
* Distance in meters. Same semantics as `CLLocationDistance` from Core Location.
16+
*/
17+
typedef double MPLocationDistance;
18+
19+
/**
20+
* Location snapshot passed to kits via `MPKitProtocol`. Does not depend on Core Location.
21+
* Kits that need `CLLocation` or `CLLocationCoordinate2D` should import CoreLocation and convert.
22+
*/
23+
@interface MPLocation : NSObject
24+
25+
@property (nonatomic, readonly) double latitude;
26+
@property (nonatomic, readonly) double longitude;
27+
@property (nonatomic, readonly) double altitude;
28+
@property (nonatomic, readonly) double horizontalAccuracy;
29+
@property (nonatomic, readonly) double verticalAccuracy;
30+
@property (nonatomic, readonly) double course;
31+
@property (nonatomic, readonly) double speed;
32+
@property (nonatomic, readonly, copy) NSDate *timestamp;
33+
34+
- (instancetype)init NS_UNAVAILABLE;
35+
36+
- (nonnull instancetype)initWithLatitude:(double)latitude
37+
longitude:(double)longitude
38+
altitude:(double)altitude
39+
horizontalAccuracy:(double)horizontalAccuracy
40+
verticalAccuracy:(double)verticalAccuracy
41+
course:(double)course
42+
speed:(double)speed
43+
timestamp:(nonnull NSDate *)timestamp NS_DESIGNATED_INITIALIZER;
44+
45+
@end
46+
47+
NS_ASSUME_NONNULL_END
48+
49+
#endif

0 commit comments

Comments
 (0)