This issue occurs when expo.ios.infoPlist.UIBackgroundModes is configured in app.json. In my case, with ["fetch", "remote-notification"]. This causes the error Invalid Info.plist key. App clip "APP CLIP NAME HERE" contains Info.plist keys. App clips cannot contain UIBackgroundModes. Remove UIBackgroundModes from the Info.plist of your app clip. when submitting using eas submit. Looking into Info.plist of the Clip target, UIBackgroundModes is copied from the main app's Info.plist.
Temporary Fix
To get around this issue, I added a check for the key UIBackgroundModes in withAppClipPlist.ts. Effectively just a check for config.ios?.infoPlist && key !== "UIBackgroundModes" && (infoPlist[key] = config.ios.infoPlist[key]);.
Potential Solutions
I haven't been able to find good documentation by Apple on which plist keys will cause issues, so this might become a game of whack-a-mole for hunting down invalid copied keys. Potential solutions could either involve adding keys to a blocklist as issues pop up, or allow configuration within the plugin (perhaps similar to the existing infoPlist except specific to react-native-app-clip?).
Cause
This issue occurs when
expo.ios.infoPlist.UIBackgroundModes
is configured inapp.json
. In my case, with["fetch", "remote-notification"]
. This causes the errorInvalid Info.plist key. App clip "APP CLIP NAME HERE" contains Info.plist keys. App clips cannot contain UIBackgroundModes. Remove UIBackgroundModes from the Info.plist of your app clip.
when submitting usingeas submit
. Looking intoInfo.plist
of the Clip target,UIBackgroundModes
is copied from the main app'sInfo.plist
.Temporary Fix
To get around this issue, I added a check for the key
UIBackgroundModes
inwithAppClipPlist.ts
. Effectively just a check forconfig.ios?.infoPlist && key !== "UIBackgroundModes" && (infoPlist[key] = config.ios.infoPlist[key]);
.Potential Solutions
I haven't been able to find good documentation by Apple on which plist keys will cause issues, so this might become a game of whack-a-mole for hunting down invalid copied keys. Potential solutions could either involve adding keys to a blocklist as issues pop up, or allow configuration within the plugin (perhaps similar to the existing
infoPlist
except specific to react-native-app-clip?).