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

Я хочу открыть PDF-файл в моем приложении со страницы PDF, но у меня нет возможности открыть PDF-файл в моем приложении.

это мой файл info.plist

 <key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
    <key>CFBundleTypeName</key>
    <string>PDF</string>
    <key>CFBundleTypeRole</key>
            <string>Viewer</string>     
    <key>CFBundleTypeIconFiles</key>
    <string>Icon.png</string>
    <key>LSItemContentTypes</key>
    <string>com.neosofttech.pdf</string>
    <key>LSHandlerRank</key>
    <string>Owner</string>
</dict>
</array>
<key>UTExportedTypeDeclarations</key>
   <array>
   <dict>
    <key>UTTypeConformsTo</key>
        <array>

<string>public.pdf</string>       
         </array>
    <key>UTTypeDescription</key>
    <string>PDFReader File</string>
    <key>UTTypeIdentifier</key>
    <string>com.neosofttech.pdf</string>
    <key>UTTypeTagSpecification</key>
    <dict>
        <key>public.filename-extension</key>
        <string>pdf</string>

    </dict>
</dict>

Пожалуйста, скажите мне, где я не прав в этом, как я могу открыть файл PDF в моем приложении.

3 ответа

Решение

Я предполагаю, что вы пытаетесь открыть вложение из Почты, основываясь на вашем списке. Поскольку у вас нет типа PDF, вы не можете объявить его как экспортированный тип. Вам нужно только объявить его как поддерживаемый тип документа.

Например:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>PDF</string>
        <key>LSHandlerRank</key>
        <string>Alternate</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.adobe.pdf</string>
        </array>
    </dict>
</array>

Вы можете найти список всех типов контента, предоставленных системой, здесь или в UTCoreTypes.h,

Когда кто-то открывает PDF-файл и выбирает ваше приложение, этот файл будет скопирован в Inbox подкаталог вашего Documents папка в вашей песочнице приложения. Ваше приложение будет открыто и внутри вашего приложения делегата application:didFinishLaunchingWithOptions: ваш launchOptions словарь будет содержать UIApplicationLaunchOptionsURLKey ключ, указывающий URL-адрес файла в вашей песочнице, с которым вы можете работать.

Вы не можете делать то, что пытаетесь сделать, если не выполните следующее:

  • Зарегистрировать пользовательский URL в системе
  • Вызовите этот пользовательский URL из гиперссылки внутри PDF
  • Создать PDF с интерактивными ссылками

Так что это означает, что вы регистрируете собственный обработчик URL в вашем info.plist. Например, допустим, вы создаете собственный обработчик URL-адреса в форме coolapp://. Теперь, внутри вашего документа, из которого вы генерируете PDF, при создании гиперссылки он должен использовать ваш пользовательский URL, например, coolapp://filedetails? Pdfurl=mywebsite.com/path/to/pdffile.pdf&pageno=5. Затем вам нужно проанализировать это в -application: handleOpenURL:. Загрузите файл, указанный в поле pdfurl, а затем перейдите на страницу, указанную в pageno.

Имейте в виду, что это предполагает, что вы сами создаете PDF-файл. Если вы не контролируете процесс создания содержимого PDF, вы не можете делать то, что хотите. Невозможно открыть ваше приложение из произвольного PDF-файла. Это должно быть сделано с использованием пользовательского URL.

Дайте мне знать, если вам нужны разъяснения.

Старый пост - но я попал сюда и искал способ передать PDF в свое приложение.

Плист, изображенный Эшли Кларк, помогает мне зарегистрировать мое приложение как приложение, которое может принимать файл PDF в качестве параметра. +1 за него на этом:-)

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>PDF</string>
        <key>LSHandlerRank</key>
        <string>Alternate</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.adobe.pdf</string>
        </array>
    </dict>
</array>

Однако, чтобы полностью реализовать это, я использовал следующий метод в своем файле AppDelegate.m:

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {

    NSLog(@"sourceApplication: %@", sourceApplication);
    NSLog(@"url: %@", url);

Вышесказанное запускается, когда приложение открывается, когда я запускал Safari и у меня был PDF, которым я хотел поделиться оттуда.

Выше я могу определить, какое приложение передало моему приложению PDF-файл и URL-адрес его местоположения.

При запуске выдает следующее:

sourceApplication: com.apple.mobilesafari

url: file:///Users/me/Library/Developer/CoreSimulator/Devices/C395439F-7A0D-434F-8D78-D4615DB643E1/data/Containers/Data/Application/E3B181BC-6075-4F2C-923D-2ECC642DA555/Documents/Inbox/pdf-5.pdf

Затем я могу использовать URL-адрес, чтобы открыть PDF-файл и делать с ним все, что захочу, в своем приложении.

Вставьте код ниже в info.plist

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>"*"</string>
        </array>
        <key>CFBundleTypeName</key>
        <string>Unknown</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.data</string>
        </array>
    </dict>
</array>
Другие вопросы по тегам