iOS - «Открыть в ...», проблема с доступом к файлу - PullRequest
0 голосов
/ 05 мая 2020

Я разрабатываю приложение iOS (с Xamarin). Я пытаюсь обрабатывать PDF-файлы с помощью своего приложения и получать доступ к их содержимому. Я добавил свое приложение в контекстное меню PDF-файлов («Открыть в ...»), как здесь https://i.stack.imgur.com/yowSw.png

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>PDF</string>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.adobe.pdf</string>
        </array>
    </dict>
</array>

Когда я нажимаю «Открыть в МОЕМ ПРИЛОЖЕНИИ», мое приложение открывается, и я пытаюсь получить доступ к содержимому массива байтов файла.

В SceneDelegate я добавил

    [Export("scene:openURLContexts:")]
    public void OpenUrlContexts(UIScene scene, NSSet<UIOpenUrlContext> urlContexts)
    {
        var path = urlContexts.AnyObject.Path;
        var fileBytes = File.ReadAllBytes(path);
    }

Путь выглядит так: file: /// private / var / mobile / Containers / Shared / AppGroup / XXX / File% 20Provider% 20Storage / sample.pdf

К сожалению, при чтении выдается исключение: System.UnauthorizedAccessException: «Доступ к пути» / private / var / mobile / Containers / Shared / AppGroup / XXX / File Provider Storage / sample.pdf "запрещен. '

Как мне получить доступ к байтовому содержимому файла, открытого таким образом?

1 Ответ

0 голосов
/ 05 мая 2020

Добавьте следующий код в Info.plist

<key>UTExportedTypeDeclarations</key>
    <array>
        <dict>
            <key>UTTypeConformsTo</key>
            <array>
                <string>public.data</string>
                <string>public.composite-content</string>
            </array>
            <key>UTTypeIdentifier</key>
            <string>com.adobe.pdf</string>
            <key>UTTypeDescription</key>
            <string>PDF</string>
            <key>UTTypeTagSpecification</key>
            <dict>
                <key>public.mime-type</key>
                <string>application/pdf</string>
                <key>public.filename-extension</key>
                <array>
                    <string>pdf</string>
                </array>
            </dict>
        </dict>

        <dict>
            <key>UTTypeConformsTo</key>
            <array>
                <string>public.data</string>
            </array>
            <key>UTTypeIdentifier</key>
            <string>com.microsoft.excel.xls</string>
            <key>UTTypeDescription</key>
            <string>Excel Document</string>
            <key>UTTypeTagSpecification</key>
            <dict>
                <key>public.mime-type</key>
                <string>application/vnd.ms-excel</string>
                <key>public.filename-extension</key>
                <array>
                    <string>xls</string>
                </array>
            </dict>
        </dict>
    </array>

Если он по-прежнему не работает, вы можете поделиться своим образцом, чтобы я мог проверить его на своей стороне.

...