Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Add the following to your Info.plist:

Code Block
languageswift
<key>CFBundleDocumentTypes</key>
<array>
        <dict>
            <key>CFBundleTypeIconFiles</key>
            <array/>
            <key>CFBundleTypeName</key>
            <string>PDF</string>
            <key>CFBundleTypeRole</key>
            <string>Viewer</string>
            <key>LSHandlerRank</key>
            <string>Alternate</string>
            <key>LSItemContentTypes</key>
            <array>
                <string>com.adobe.pdf</string>
            </array>
        </dict>
        <dict>
            <key>CFBundleTypeName</key>
            <string>Images</string>
            <key>CFBundleTypeRole</key>
            <string>Viewer</string>
            <key>LSHandlerRank</key>
            <string>Alternate</string>
            <key>LSItemContentTypes</key>
            <array>
                <string>public.jpeg</string>
                <string>public.png</string>
                <string>public.tiff</string>
                <string>com.compuserve.gif</string>
            </array>
        </dict>
</array>

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

Documentation

2. Enable it inside GiniCapture

In order to allow the GiniCapture library 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.

Code Block
languageswift
        let giniConfiguration = GiniConfiguration.shared
        ...
        ...
        giniConfiguration.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 URL to create a document as shown below.

In some cases, in particular especially when the LSSupportsOpeningDocumentsInPlace flag is enabled in your Info.plist file, reading data directly from the url URL may fail. For that reason, Gini Capture SDK 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 Capture SDK

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: self.giniConfiguration)
                    // Load the GiniCapture with the validated document
                } catch {
                    // Show an error pointing out that the document is invalid
                }
            }
        }

        return true
}

Documentation