# Integrating Reveal with App Extensions

Assuming that you've already integrated Reveal framework with your iOS app using one of the available options, integrating it with an extension contained in that app follows similar steps.

### Using CocoaPods

If you have followed the steps for integrating Reveal into your Xcode Project using CocoaPods, then repeat the same steps for your app extension target. As a result, your Podfile might look like this:

    target 'YourMainAppTargetName' do
        pod 'Reveal-SDK', :configurations => ['Debug']
    end

    target 'YourAppExtensionTargetName' do
        pod 'Reveal-SDK', :configurations => ['Debug']
    end

### Loading the framework via an Xcode Breakpoint

If you have followed the steps for loading Reveal via an Xcode Breakpoint, you don't have to change anything to start inspecting your app extension. The breakpoint debugger command that you have already configured for your app will continue to work in the app extension. Please keep in mind that in order to use this integration method on device, you'll have to repeat the Debugging on device steps with your app extension target.

### Linking the framework into your app extension

If you have followed the steps required to link Reveal into your app, just repeat steps from 4 to 9, but this time with your app extension target, instead of the iOS app target. Since you've already copied Reveal Server framework to the root directory of your project, there's no need to do that again.

## Important Information

- As with regular apps, never ship an app extension linked against the Reveal library. Reveal exposes your app extension to deep inspection and will likely cause your app to be rejected by the Apple review team. Reveal is intended for internal development and debugging purposes only.
- The Reveal service will stop automatically when the app extension is dismissed, or while the extension host app is not the frontmost app. It will automatically start when the extension is presented again or the host app is re-opened.
- Custom Keyboard extensions require open access in order to inspect them in Reveal. Please refer to the corresponding App Extension Programming Guide for more details on how to configure your Custom Keyboard extension for open access. You'll also need to enable the "Full Access" option in your keyboard's preferences in the iOS Settings app.

## Known Issues

- Inspecting certain types of app extensions on device may lead to memory warnings and potential termination of your app extension. iOS imposes strict limits on the system resources that app extensions can use, especially memory. However, snapshotting a view hierarchy using Reveal temporarily allocates a significant amount of memory, which may sometimes hit the threshold set for the inspected extension process. This is mostly critical for Today Widgets and Custom Keyboards, which have lower limits than other extension types. If you find your extensions becoming unstable or restarting automatically when being inspected or modified using Reveal on a physical device, try inspecting them in the iOS Simulator instead. The Simulator does not limit extensions' usage of system resources, so temporary spikes of memory allocation does not affect them.
- Inspecting Today Widget and Custom Keyboard extensions running on device may show "Bitmap is too large to be displayed" warnings in the Canvas. Due to the aforementioned memory limits for app extensions, Reveal Server will not attempt to snapshot views larger than half of screen height when running in a Today Widget or Custom Keyboard on device. If your app extension presents a large UI, try inspecting it in the Simulator instead.
- Today Widget extensions running on a locked device may be snapshot with empty bitmaps. If you encounter this issue, please try inspecting your Today Widget extension while your device is unlocked.

## Getting Help

If you have any problems or questions about using Reveal with your app, head over to our support site.

Visit Support Site