This guide walks you through the common reasons a CleverTap notification content extension fails to show its custom UI, and how to fix each one. Work through the sections in order - most issues are caught in the first two.
The way the CTNotificationContent framework is linked differs between Swift
Package Manager and CocoaPods. Pick the section that matches your setup.
SPM does not automatically attach the content extension to your app target, so the library may never get linked into the app.
If you get an error like this at launch, follow the steps below:
dyld: Library not loaded: @rpath/YourLibrary.framework/YourLibrary
Referenced from: .../YourApp.app/YourApp
Reason: image not found
- Open Xcode and select your app target.
- Go to General → Frameworks, Libraries, and Embedded Content.
- Confirm
CTNotificationContentis listed there. - If it is missing, ensure it is added to both the app target and the content extension target, then rebuild.
If it is already listed but the problem continues, clear out any stale build or dependency state:
- Clean Derived Data in Xcode.
- Reset the Swift Package Manager cache.
- Rebuild and check whether the issue persists.
- Clean Derived Data in Xcode.
- Delete the
Pods/folder andPodfile.lock. - Run
pod install. - Rebuild and check whether the issue persists.
Use Xcode's debugger to verify the extension process is created, and that your code actually runs, when a notification expands.
- Trigger a push notification and expand it. This starts the extension process.
- In Xcode, check whether the content extension process appears.
- Go to Debug → Attach to Process and attach to that content extension.
- Add a breakpoint in your subclass, trigger and expand another notification, and confirm the breakpoint is hit - this proves the call reaches your class.
If the content extension still does not show up as a process:
- Check that the relevant certificates are valid.
- Try removing and re-adding the content extension, then repeat the steps above.
For a content extension to display its custom UI, the notification payload must
include a "category": "YOUR_CATEGORY_ID" string. That identifier has to match
exactly in three places:
- The
categoryvalue in the push payload. UNNotificationExtensionCategoryin the content extension'sInfo.plist.- The category you registered in your app delegate.
If any of these differ, the system falls back to the default notification UI.
Finally, inspect the push payload itself:
- Check that the template
idis present. - Check that all required keys for your template are present in the payload.


