ReplayKit is one of the great new features introduced in iOS 9.0, and it's trivial to add to your projects. What's more, it's not just for games – you can record any kind of app just fine. I should add, though, that the recording quality is fairly low, so it's not worth trying to record fine details.

ReplayKit also does few cool things for you:

  • It automatically asks the user for permission to start recording the first time you try.
  • While recording, no system user interface is shown, which means you can't see messages coming in from other apps.
  • When the user stops recording, they'll get the chance to preview their recording, make changes, save it to their devices and share it – your app doesn't get access to the recording. But you can find out is user saved or shared the recording.

You will find full implementation example bellow.

First fo all you need to enable the ReplayKit API in the IOS Native plugin settings, as showed on the screenshot bellow:

Start Recording 

Now you can you the ReplayKit API. It's fairly simple, just call StartRecording method when you want to start your record. You can find out record start result by subscribing to the ActionRecordStarted event. See the code snippet bellow:

ISN_ReplayKit.ActionRecordStarted += HandleActionRecordStarted;
bool microphoneEnabled = true;

void HandleActionRecordStarted (ISN_Result res) {
	if(res.IsSucceeded) {
		Debug.Log("Record was sucssesfully started");
	} else {
		Debug.Log("Record start failed: " + res.Error.Description);

Note: Record starting may be failed due to number of reasons. If you want to find out why record wasn't started, you can refer to the  res.Error.Code. Possible error codes can be found bellow:

Unknown 				= -5800
User Declined			= -5801
Disabled 				= -5802
Failed To Start 		= -5803
Failed 					= -5804
Insufficient Storage 	= -5805
Interrupted 			= -5806

Learn more at

Availability checking 

In case you want to check if the screen recording available, you can use the IsAvailable property. Screen recording can be unavailable due to unsupported hardware, the user’s device displaying information over Airplay or through a TVOut session, or another app using the recorder.

Debug.Log("ReplayKit Is Avaliable: " + ISN_ReplayKit.Instance.IsAvailable);

You can also find out if availability was changed by subscribing to the ActionRecorderDidChangeAvailability event, as showed on the code snippet bellow

ISN_ReplayKit.ActionRecorderDidChangeAvailability += HandleActionRecorderDidChangeAvailability;

void HandleActionRecorderDidChangeAvailability (bool IsRecordingAvaliable) 	{
	Debug.Log("Is Recording Avaliable: " + IsRecordingAvaliable);

Microphone checking

If you requested recording with the mic, after recording is started you can check if user allowed access to the mic by checking  IsMicEnabled property. 

Debug.Log("ReplayKit Is MicEnabled: " + ISN_ReplayKit.Instance.IsMicEnabled);

Stop Recording

Similar to the record start, all you need to do is to call the StopRecording methods and subscribe to the ActionRecordStoped event.  

See the code snippet bellow:

ISN_ReplayKit.ActionRecordStoped += HandleActionRecordStoped;

void HandleActionRecordStoped (ISN_Result res) {
	if(res.IsSucceeded) {
		Debug.Log("Record was sucssesfully stopped");
	} else {
		Debug.Log("Record stop failed: " + res.Error.Description);

After record is successfully stopped,  you can start video share dialog, so users will get the chance to preview their recording, make changes, save it to their devices and share it – your app doesn't get access to the recording. But you can find out is user saved or shared the recording. See the code snippet bellow:

ISN_ReplayKit.ActionShareDialogFinished += HandleActionShareDialogFinished;

void HandleActionShareDialogFinished (ReplayKitVideoShareResult res) {
	if(res.Sources.Length > 0) {
		foreach(string source in res.Sources) {
			Debug.Log ("Success: User has shared the video to:" + source);
	} else {
		Debug.Log ("Fail: User declined video sharing!");

For example if user has save the video on device, with the example bellow, you will see the logs similar to:

User has shared the video to:

and if user has save the video on device, and the shared it with facebook the log will looks like:

User has shared the video to:

DiscardRecording  can only be called after the ActionRecordStoped event block has been called. Use the ActionRecordDiscard  handler block to do any required cleanup. Code snippet can be found bellow.

ISN_ReplayKit.ActionRecordDiscard += HandleActionRecordDiscard;

void HandleActionRecordDiscard () {
	Debug.Log("Record Discarded");

Record Error Handling

By subscribing to the ActionRecordInterrupted event, you can find out if video record was interrupted by some reason.

ISN_ReplayKit.ActionRecordInterrupted += HandleActionRecordInterrupted;

void HandleActionRecordInterrupted (ISN_Error error) {
	Debug.Log("Video was interrupted with error: " + error.Description);

You can also find out video recording state with the IsRecording property

if(ISN_ReplayKit.Instance.IsRecording) {
	Debug.Log("Something is currently on record");

Additional Settings

You can also choose iPad video editor mode between windowed and fullscreen by changing the setting bellow.

Known Issues

Plugins will automatically include the ReplayKit.framework into the Xcode project, and mark in as optional. In case you have issues with Replay Kit on IOS 8 or lower, make sure that ReplayKit.framework  marked as optional, see the screenshot bellow.