Camera And Gallery

Saving Texture2D to the camera roll.

Note: Texture Should be marked as readable.


or you can save the app screenshot using


You may use OnImageSaved action to find out is the image was successfully saved

IOSCamera.OnImageSaved += OnImageSaved;
private void OnImageSaved (ISN_Result result) {
        IOSCamera.OnImageSaved -= OnImageSaved;
        if(result.IsSucceeded) {
            IOSMessage.Create("Success", "Image Successfully saved to Camera Roll");
        } else {
            IOSMessage.Create("Success", "Image Save Failed");

Getting Texture2D from Camera or Gallery.

Subscribe to the image load event:

IOSCamera.OnImagePicked += OnImage;

Then retrieve the image with one of the following options:


Example data retrieving after OnImagePicked action fired

IOSCamera.OnImagePicked += OnImage;
private void OnImage (IOSImagePickResult result) {
        if(result.IsSucceeded) {
            darawTexgture = result.Image;
        IOSCamera.OnImagePicked -= OnImage;


Note: You can choose between PNG and JPEG compression. PNG will allow you to load textures with Alpha, but JPEG will consume less memory.

Note: Managing multiple full-sized images can be tricky with limited memory. If you find your application running out of memory after displaying just a few images, you can dramatically reduce the amount of dynamic heap used by expanding the JPEG into a memory, by setting low max image size, or image JPEG compression type:

Window → IOS Native → Edit Settings

Note: On iPad The image picker may appear in portrait mode even if application in landscape. As per the UIImagePickerController Class Reference.  Important: The UIImagePickerController class supports portrait mode only. This class is intended to be used as-is and does not support subclassing.

Getting Video from the Gallery.

The plugin allow you to get user choose video file path. The method bellow will bring up the native video pick dialog:


In order to get video path you may subscribe to the OnVideoPathPicked event, as showed on the code snippet bellow:

IOSCamera.OnVideoPathPicked += HandleOnVideoPathPicked;

void HandleOnVideoPathPicked (string path) {
	Debug.Log("Video Path: " + path)

Pick Multiple Images From Camera Roll

This feature is not available with standard IOS API. So we used custom 3-rd party solution  for it. Which means is you need to pick more than one image at a time, you need to do extra instal actions. First of all, enable multi-picker API as showed in the screenshot bellow:

Note: Camera And Gallery API should be enabled as well.

Now you need to Add ELCImagePickerController to your project.

1) Download  ELCImagePicker from the GitHub.

2) Place files under your Plugins/IOS folder

Now you can get multiple textures from Camera Roll, as shown on the code snippet bellow.

ISN_FilePicker.MediaPickFinished += async delegate(ISN_FilePickerResult res) {
	Debug.Log("Picked " + res.PickedImages.Count + " images");

Privacy Settings in iOS 10

It has long been the case with iOS that if you want to access a user’s private data you need to first ask the user for permission. In iOS 10 Apple is extending the scope of these privacy controls by including access to the user’s photo library, camera, media player, etc. List of affected frameworks can be found bellow:

Contacts, Calendar, Reminders, Photos, Bluetooth Sharing, Microphone, Camera, Location, Health, HomeKit, Media Library, Motion, CallKit, Speech Recognition, SiriKit, TV Provider.

With means, if you want to use Camera or Gallary API, you need to provide purpose string to a user. You can specify those string using IOS Native Settings menu, as showed bellow:

Or you can also do this using the following variables:


The system shows the purpose string when asking the user to allow access (so you may want to localize it):

The direction from Apple is clear. If you access private data declare your intentions up front or expect your App to crash.