Skip to content
Merged
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
12 changes: 8 additions & 4 deletions .github/workflows/build-kits.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,14 @@ jobs:
sed -i '' 's/s\.version[[:space:]]*=.*/s.version = "9.0.0"/' mParticle-Apple-SDK-Swift/mParticle-Apple-SDK-Swift.podspec

echo "Linting: ${{ matrix.kit.podspec }}"
pod lib lint "${{ matrix.kit.podspec }}" \
--allow-warnings \
--skip-import-validation \
--include-podspecs="{mParticle-Apple-SDK.podspec,mParticle-Apple-SDK-Swift/mParticle-Apple-SDK-Swift.podspec,mParticle-Apple-Media-SDK.podspec}"
for attempt in 1 2 3; do
pod lib lint "${{ matrix.kit.podspec }}" \
--allow-warnings \
--skip-import-validation \
--include-podspecs="{mParticle-Apple-SDK.podspec,mParticle-Apple-SDK-Swift/mParticle-Apple-SDK-Swift.podspec,mParticle-Apple-Media-SDK.podspec}" \
&& break
[ $attempt -lt 3 ] && echo "Attempt $attempt failed, retrying in 60s..." && sleep 60 || exit 1
done

build-kits:
name: Build ${{ matrix.kit.name }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

NSString *const afAppleAppId = @"appleAppId";
NSString *const afDevKey = @"devKey";
NSString *const afSharingFilterForPartners = @"sharingFilterForPartners";
NSString *const afManualStart = @"manualStart";
NSString *const afAppsFlyerIdIntegrationKey = @"appsflyer_id_integration_setting";
NSString *const kMPKAFCustomerUserId = @"af_customer_user_id";

Expand Down Expand Up @@ -112,12 +112,7 @@ - (MPKitExecStatus *)didFinishLaunchingWithConfiguration:(NSDictionary *)configu
appsFlyerTracker.deepLinkDelegate = self;

_configuration = configuration;

NSArray<NSString *> *sharingFilter = [self sharingFilterForPartnersFromConfiguration:configuration];
if (sharingFilter.count > 0) {
[appsFlyerTracker setSharingFilterForPartners:sharingFilter];
}


[self updateConsent];
[appsFlyerTracker waitForATTUserAuthorizationWithTimeoutInterval:60];
[self start];
Expand Down Expand Up @@ -151,7 +146,10 @@ - (void)start {
}

- (nonnull MPKitExecStatus *)didBecomeActive {
[appsFlyerTracker start];
BOOL manualStart = [_configuration[afManualStart] boolValue];
if (!manualStart) {
[appsFlyerTracker start];
}
MPKitExecStatus *execStatus = [[MPKitExecStatus alloc] initWithSDKCode:@(MPKitInstanceAppsFlyer) returnCode:MPKitReturnCodeSuccess];
return execStatus;
}
Expand Down Expand Up @@ -543,35 +541,6 @@ - (NSNumber * _Nullable)resolvedConsentForMappingKey:(NSString *)mappingKey
return [value isGranted];
}

- (NSArray<NSString *> *)sharingFilterForPartnersFromConfiguration:(NSDictionary *)configuration {
id value = configuration[afSharingFilterForPartners];
if (!value) {
return nil;
}

NSArray *partnerIds = nil;
if ([value isKindOfClass:[NSArray class]]) {
partnerIds = value;
} else if ([value isKindOfClass:[NSString class]]) {
NSData *jsonData = [value dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
partnerIds = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
if (error || ![partnerIds isKindOfClass:[NSArray class]]) {
return nil;
}
} else {
return nil;
}

NSMutableArray<NSString *> *result = [NSMutableArray arrayWithCapacity:partnerIds.count];
for (id item in partnerIds) {
if ([item isKindOfClass:[NSString class]] && ((NSString *)item).length > 0) {
[result addObject:item];
}
}
return result.count > 0 ? [result copy] : nil;
}

- (NSArray<NSDictionary *>*)mappingForKey:(NSString*)key {
NSString *mappingJson = _configuration[key];
if (![mappingJson isKindOfClass:[NSString class]]) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,6 @@ extern NSString * _Nonnull const MPKitAppsFlyerErrorDomain;

- (nullable NSArray<NSDictionary *>*)mappingForKey:(NSString* _Nonnull)key;

- (nullable NSArray<NSString *> *)sharingFilterForPartnersFromConfiguration:(NSDictionary * _Nonnull)configuration;

- (nonnull NSDictionary*)convertToKeyValuePairs: (NSArray<NSDictionary *> * _Nonnull)mappings;

- (nonnull MPKitExecStatus *)routeCommerceEvent:(nonnull MPCommerceEvent *)commerceEvent;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ class AppsFlyerLibMock: AppsFlyerLib {
var logEventCalled = false
var logEventEventName: String?
var logEventValues: [AnyHashable: Any]?
var startCallCount = 0

override func start() {
startCallCount += 1
}

override func logEvent(_ eventName: String, withValues values: [AnyHashable: Any]?) {
logEventCalled = true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,30 +67,33 @@ final class MPKitAppsFlyerTests: XCTestCase {
XCTAssertNil(result)
}

// MARK: - sharingFilterForPartnersFromConfiguration
// MARK: - didBecomeActive / manualStart

func test_sharingFilterForPartners_validJSON_returnsList() {
kit.configuration["sharingFilterForPartners"] = #"["partner_1", "partner_2"]"#
let result = kit.sharingFilterForPartners(fromConfiguration: kit.configuration)
XCTAssertEqual(result, ["partner_1", "partner_2"])
}
func test_didBecomeActive_manualStartTrue_doesNotCallAppsFlyerStart() {
kit.configuration = ["manualStart": true]
kit.providerKitInstance = mock

_ = kit.didBecomeActive()

func test_sharingFilterForPartners_emptyOrMissing_returnsNil() {
XCTAssertNil(kit.sharingFilterForPartners(fromConfiguration: [:]))
kit.configuration["sharingFilterForPartners"] = ""
XCTAssertNil(kit.sharingFilterForPartners(fromConfiguration: kit.configuration))
XCTAssertEqual(mock.startCallCount, 0)
}

func test_sharingFilterForPartners_invalidJSON_returnsNil() {
kit.configuration["sharingFilterForPartners"] = "not a json array"
let result = kit.sharingFilterForPartners(fromConfiguration: kit.configuration)
XCTAssertNil(result)
func test_didBecomeActive_manualStartFalse_callsAppsFlyerStart() {
kit.configuration = ["manualStart": false]
kit.providerKitInstance = mock

_ = kit.didBecomeActive()

XCTAssertEqual(mock.startCallCount, 1)
}

func test_sharingFilterForPartners_invalidEscapedJSON_returnsNil() {
kit.configuration["sharingFilterForPartners"] = #"[\"test_1\", \"test_2\"]"#
let result = kit.sharingFilterForPartners(fromConfiguration: kit.configuration)
XCTAssertNil(result)
func test_didBecomeActive_manualStartOmitted_callsAppsFlyerStart() {
kit.configuration = [:]
kit.providerKitInstance = mock

_ = kit.didBecomeActive()

XCTAssertEqual(mock.startCallCount, 1)
}

// MARK: - resolvedConsentForMappingKey
Expand Down
Loading