Support for iOS App Extension targets in plugin.xml (Notification Service Extension, Share Extension, etc.)
- Dominant language
- JavaScript
- Stars
- 2.2k
- Forks
- 1k
- Avg merge
- 12h 11m
- Merged PRs (30d)
- 18
Description
Summary
There is currently no way to declare an iOS App Extension target (e.g., Notification Service Extension, Share Extension, Widget Extension) in plugin.xml. Every plugin that needs an extension target must
manually manipulate the Xcode project file (project.pbxproj) using the xcode npm module in a hook script. This is fragile, error-prone, and creates significant maintenance burden for plugin authors. Or even worse, write manual instructions for clients on how to create a separate target using Xcode.
Motivation
Push notification SDKs (Infobip, OneSignal, Airship, etc.) require a Notification Service Extension to support:
- Rich push notifications (images, video, GIFs on the lock screen)
- Accurate delivery reporting (the extension runs even when the main app is killed)
- Content modification before display
Apple requires this to be a separate target in the Xcode project with its own bundle ID, entitlements, Info.plist, and source files. Currently, every plugin author must reimplement the same complex Xcode
project manipulation independently.
It would be great if all this could be handled by using config.xml file. Expo tools for React Native already has this support so idea can be taken from them.
BR, Ivan.
Contributor guide
Research direction
Start by examining plugin.xml and config.xml handling, then trace how the Xcode project.pbxproj is generated or modified. Compare the approach with Expo tools and existing xcode npm hook scripts. Done means a plugin can declare an app extension through configuration and receive a separate target with its bundle ID, entitlements, Info.plist, and source files without manual project manipulation.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- ios, javascript
- Domain
- build-system, mobile
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100