Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Page Properties
hiddentrue

Status

Status
colourYellow
titlefor review

Approver

Nadzeya Karaban

...

Table of Contents
minLevel1
maxLevel2
outlinefalse
typelist
printablefalse

...

Opening images and PDF files from other apps

In order to enable your app to open any kind of files that are identified by the OS as PDFs or images. To do so, just images or PDFs, follow these steps:

1. Register PDF and image file types

Add the following to your Info.plist:

...

You can also add these by going to your target’s Info tab and entering the values into the Document Types section.

In order to initiate Open with from your app’s Documents folder, add UISupportsDocumentBrowser to your Info.plist.

Documentation

2. Enable it inside

...

Gini Bank SDK

In order to allow the GiniCapture library Gini Bank SDK to handle files imported from other apps and to show the Open With tutorial in the Help menu, it is necessary to indicate it in the GiniConfiguration GiniBankConfiguration.

Code Block
languageswift
        let giniConfigurationginiBankConfiguration = GiniConfigurationGiniBankConfiguration.shared
        ...
        ...
        giniConfigurationginiBankConfiguration.openWithEnabled = true

3. Handle incoming PDFs and images

When your app is requested to handle a PDF or an image your AppDelegate’s application(_:open:options:) (Swift) method is called. You can then use the supplied URL to create a document as shown below.

In some cases, especially when the LSSupportsOpeningDocumentsInPlace flag is enabled in your Info.plist file, reading data directly from the URL may fail. For that reason, Gini Capture SDK GiniCapture uses the asynchronous UIDocument API internally which handles any of the potential security requirements.

In order to determine that the file opened is valid (correct size, correct type, and number of pages below the threshold on PDFs), it is necessary to validate it before using it.

Gini

...

Bank

Code Block
languageswift
func application(_ app: UIApplication,
                 open url: URL,
                 options: [UIApplicationOpenURLOptionsKey: Any] = [:]) -> Bool {            

        // 1. Build the document
        let documentBuilder = GiniCaptureDocumentBuilder(documentSource: .appName(name: sourceApplication))
        documentBuilder.importMethod = .openWith

        documentBuilder.build(with: url) { [weak self] (document) in

            guard let self = self else { return }

            // 2. Validate the document
            if let document = document {
                do {
                    try GiniCapture.validate(document,
                                             withConfig: selfginiBankConfiguration.giniConfigurationcaptureConfiguration())
                    // Load the GiniCapture with the validated document
                } catch {
                    // Show an error pointing out that the document is invalid
                }
            }
        }

        return true
}

Documentation

...

Opening images from Photos app

In order to enable your app to open images from Photos, implement a shared extension. Share extensions, in particular, allow you to share content with your application.

1. Add a share extension to your project

Go to File -> New -> Target and select Share Extension. Make sure you link it to the main app. The system will ask you if you want to activate the Share scheme, just select Activate.

2. Set the extension activation rule

Change the NSExtensionActivationRule in the Info.plist in your extension target. Check the example here.

3. Handle the URL

Find the example implementation here.

4. Pass the data from the extension to the main app

Here we connect the share extension directly to the main app using AppGroups and UserDefaults. Add AppGroups to the capabilities of both the extension and main app using the same app group. Check the example here.

5. Open the main app and retrieve the shared data

  • Register your app extension scheme in the URL types for the main app.

  • Open the main app from the extension.

  • Handle the incoming URL from the app extension in AppDelegate and retrieve data from the shared UserDefaults. The system delivers the URL to your app by calling your app delegate’s application(_:open:options:) method. You can check our example implementation here.