> ## Documentation Index
> Fetch the complete documentation index at: https://moengage-doc-2298-s2s-type-case-sensitive.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# How to Avoid Common Push Notification Issues on iOS Devices Using iOS Objective C version 8.x.x?

> Fix push impression tracking and image rendering on iOS with Objective-C SDK 8.x.x. Verify appgroupid configuration in your MoEngage integration.

## Problem

Common issues with Push notifications, including Push Campaign impressions not being tracked and images not rendering even though Push notifications are successfully delivered to device with Objective C version 8.x.x.

<Info>
  For Push Campaign impressions to be tracked, verify that the **Show iOS impressions** toggle on the MoEngage dashboard is turned on.

  <img src="https://mintcdn.com/moengage-doc-2298-s2s-type-case-sensitive/ukEGYT14LnDvcf4Q/images/moengage_458274.png?fit=max&auto=format&n=ukEGYT14LnDvcf4Q&q=85&s=286a18f1782b2a01789b6891e48ba76f" alt="iOS imp.png" width="2744" height="1582" data-path="images/moengage_458274.png" />
</Info>

## Solution

Perform the following steps:

1. **Check for app\_group\_id in your project’s main target for each configuration**: You can add the same app\_group\_id or different ones across configurations.
   <Info>
     Issues may arise if your configurations use different Bundle Identifiers but share the same app\_group\_id. Specifically, the Notification Service Extension may fail if two apps with different Bundle Identifiers but the same app\_group\_id are installed on the same device. To avoid this, you can use the same app\_group\_id across multiple configurations, but be aware that you won't be able to test all apps simultaneously on a single device.
   </Info>
   <img src="https://mintcdn.com/moengage-doc-2298-s2s-type-case-sensitive/EArhaYxBfXaX8RgK/images/moengage_d35dec.png?fit=max&auto=format&n=EArhaYxBfXaX8RgK&q=85&s=ecbbb2ffeced539be2b261127af62609" alt="app group.png" width="1920" height="709" data-path="images/moengage_d35dec.png" />
2. **Check for app\_group\_id during SDK initialization**:
   * If the SDK is initialized using info.plist, the APP\_GROUP\_ID key must be there inside the MoEngage key in your info.plist file.
   * If the SDK is initialized using sdkConfig, the APP\_GROUP\_ID must be in the sdkConfig variable inside the AppDelegate file.\
     **app\_group\_id in info.plist:**
     <img src="https://mintcdn.com/moengage-doc-2298-s2s-type-case-sensitive/sXShQsUMW-YS9j0C/images/moengage_b4b13a.png?fit=max&auto=format&n=sXShQsUMW-YS9j0C&q=85&s=9ca1d652146131cfcb050937305a06c8" alt="app id.png" width="1920" height="888" data-path="images/moengage_b4b13a.png" />
     **app\_group\_id in sdkConfig variable:**
   <CodeGroup>
     ```objective-c Objective-C wrap theme={null}
     MOSDKConfig\* sdkConfig = [[MOSDKConfig alloc] initWithAppID: @"XXXXXXXXXXXXXXXX"];
     sdkConfig.moeDataCenter = MODataCenterData\_center\_0X;
     sdkConfig.appGroupID = @"group.com.XXXXXXXXXXXXXXXX";
     ```
   </CodeGroup>
3. **Check for a Notification Service Extension Target**:
   * **Enable Push Notifications**: In the extension target's Signing & Capabilities section, make sure to enable Push Notifications and add the AppGroupId.
     <img src="https://mintcdn.com/moengage-doc-2298-s2s-type-case-sensitive/hIyw6bEl_J5jZOA0/images/moengage_82ff4d.png?fit=max&auto=format&n=hIyw6bEl_J5jZOA0&q=85&s=94b342fe4e98b639c0ff0184c67f5127" alt="enable.png" width="1920" height="706" data-path="images/moengage_82ff4d.png" />
   * **Align the Minimum Deployment iOS Version**: Ensure that the minimum deployment iOS version of the Notification Service Extension matches the iOS version of the main app. <img alt="support.png" src="https://mintcdn.com/moengage-doc-2298-s2s-type-case-sensitive/-V2hWaHAxQ4vzumn/images/moengage_431d64.png?fit=max&auto=format&n=-V2hWaHAxQ4vzumn&q=85&s=b851ab18cc7d7482bfe0439b6208b3b6" width="1920" height="563" data-path="images/moengage_431d64.png" />
4. Integrate the MORichNotification framework into the Notification Service Extension target.
   ```objective-c Objective-C theme={null}
   target 'MoEngageDemo' do
     use_frameworks!
     pod 'MoEngage-iOS-SDK'
   end
   target 'MoEngageNotificationService' do
     use_frameworks! #use use_frameworks only if included in main target as in above scenario
     pod 'MoEngageRichNotification'
   end
   ```
5. NotificationService.m file looks like this:
   ```objective-c Objective-C theme={null}
   #import "NotificationService.h"
   #import 
   @interface NotificationService ()
    
   @property (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver);
   @property (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent;
    
   @end
    
   @implementation NotificationService
    
   - (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
       @try {
         	[MORichNotification setAppGroupID: @"group.com.XXXXXXXXXXXXXXXX"];
           self.contentHandler = contentHandler;
           self.bestAttemptContent = [request.content mutableCopy];
           [MORichNotification handleWithRichNotificationRequest:request withContentHandler:contentHandler];
       } @catch (NSException *exception) {
           NSLog(@"MoEngage : exception : %@",exception);
       }
   }
    
   /// Save the image to disk
   - (void)serviceExtensionTimeWillExpire {
       // Called just before the extension will be terminated by the system.
       // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
       self.contentHandler(self.bestAttemptContent);
   }
   @end
   ```
6. **Check Build Phases for the Main App Target**: In the Build Phases section of the main app target, locate the Embed App Extensions / Embed Foundation Extensions section. Ensure that the **Copy only when installing** option is unchecked.
   <img src="https://mintcdn.com/moengage-doc-2298-s2s-type-case-sensitive/cSyrKemEunPv6QMK/images/moengage_9bb544.png?fit=max&auto=format&n=cSyrKemEunPv6QMK&q=85&s=30cd733aee2e80f97effe74acca4be24" alt="copy.png" width="1920" height="652" data-path="images/moengage_9bb544.png" />
7. **Ensure Consistent appGroupId Across Configurations**: Verify that the appGroupId is consistent across all schemes and configurations (e.g. Debug/Release/QA/UAT) in the project.
8. **Align Build Configuration**: When running or archiving the project, ensure that the Build Configuration for the Main Target and Notification Service Extension Target points to the same scheme/configuration.
   <img src="https://mintcdn.com/moengage-doc-2298-s2s-type-case-sensitive/yddM2Gw9NzXwsWtt/images/moengage_569a68.png?fit=max&auto=format&n=yddM2Gw9NzXwsWtt&q=85&s=5eb52161a7264a42253a7a7d7b01e476" alt="run.png" width="1750" height="556" data-path="images/moengage_569a68.png" />
   <img src="https://mintcdn.com/moengage-doc-2298-s2s-type-case-sensitive/vuFOjGflXUEGyHp-/images/moengage_29f224.png?fit=max&auto=format&n=vuFOjGflXUEGyHp-&q=85&s=aed6aa2af94204cb9cac2eb7d0949793" alt="build.png" width="1832" height="446" data-path="images/moengage_29f224.png" />
