связать типы файлов с приложением iOS в Swift

Я новичок в iOS-разработке. Я разработал специальное вложение для отправки по почте. Когда я получаю вложение по почте, я хочу открыть вложение в своем приложении. Вот моя информация.plist

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.data</string>
        </array>
        <key>UTTypeDescription</key>
        <string>pvt file</string>
        <key>UTTypeIdentifier</key>
        <string>com.pryvateBeta.crypt.pvt</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <string>pvt</string>
        </dict>
    </dict>
</array>
<key>CFBundleDocumentsType</key>
<array>
    <dict>
        <key>CFBundleTypeIconFiles</key>
        <array/>
        <key>CFBundleTypeName</key>
        <string>pvt file</string>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>LSHandlerRank</key>
        <string>Owner</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.pryvateBeta.crypt.pvt</string>
        </array>
    </dict>
</array>

А вот мой Appdelegate

func application(application: UIApplication, openURL Url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {
    let encrypteddata = NSData(contentsOfURL: Url)
    

    return true
}

Я уже задавал этот вопрос в этой ССЫЛКЕ. Это был возможный дубликат этого ВОПРОС . Но я не получил решения и не смог найти, в чем проблема.

Чего не хватает в моем коде? Любая помощь приветствуется


person Mohammed Janish    schedule 19.08.2015    source источник
comment
Используйте вкладку «Информация» целевого редактора приложения, чтобы настроить типы документов и экспортируемые UTI. Он правильно настроит Info.plist.   -  person matt    schedule 19.08.2015
comment
Чего-то не хватает в плисте? Чтобы я мог добавить это так, как вы упомянули @matt   -  person Mohammed Janish    schedule 19.08.2015


Ответы (1)


попробуй это. Я копирую и вставляю ваш код в свой plist, и он не работает. затем я создал еще один plist, и его код выглядит следующим образом. и его работа

       <key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.pryvateBeta.crypt.pvt</string>
        </array>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>CFBundleTypeName</key>
        <string>pvt file</string>
        <key>LSHandlerRank</key>
        <string>Owner</string>
    </dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.data</string>
        </array>
        <key>UTTypeIdentifier</key>
        <string>com.pryvateBeta.crypt.pvt</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.mime-type</key>
            <string>application/pry</string>
            <key>public.filename-extension</key>
            <string>pvt</string>
        </dict>
    </dict>
</array>
person Shebin Koshy    schedule 19.08.2015
comment
К сожалению, пока никаких изменений @Shebin - person Mohammed Janish; 19.08.2015
comment
Что на самом деле содержит ‹LSItemContentTypes›? Должен ли это быть Bundle ID + расширение файла? - person Mohammed Janish; 19.08.2015
comment
Это действительно работает.. Я хотел бы знать еще одну вещь. Как я могу обработать этот файл? - person Mohammed Janish; 19.08.2015
comment
Я хочу открыть это в одном из моих veiwcontrollers. - person Mohammed Janish; 19.08.2015
comment
Как вы упомянули в своем вопросе. этот делегат будет вызывать. URL-адрес параметра содержит файл ur (путь) - person Shebin Koshy; 19.08.2015
comment
Это зашифрованный документ. - person Mohammed Janish; 19.08.2015
comment
@MohammedJanish, вы знаете, как представить детали из файла, который уже находится в локальном каталоге документов вашего телефона? - person Shebin Koshy; 19.08.2015
comment
@MohammedJanish, если да, то просто преобразуйте URL-адрес в обычный путь с помощью Url.path! - person Shebin Koshy; 19.08.2015
comment
Конечно, но как я могу передать полученный URL-адрес из AppDelegate моему контроллеру представления? @Шебин - person Mohammed Janish; 19.08.2015
comment
@MohammedJanish, этот viewController - твоя первая страница? Вы используете панель навигации или панель вкладок? - person Shebin Koshy; 19.08.2015
comment
Не первый. Я использую навигационный контроллер - person Mohammed Janish; 19.08.2015
comment
@MohammedJanish хорошо .. хорошо .. вам нужно создать переменную деталь: DateToBePassedToThisViewController? // приложение делегат - person Shebin Koshy; 19.08.2015
comment
Detail?.functionCallFromAppDelegate(Url.path!)//вставьте этот делегат (метод) в ваш вопрос - person Shebin Koshy; 19.08.2015
comment
на странице, которую вы используете для отображения расширения DateToBePassedToThisViewController { func functionCallFromAppDelegate (filePath: NSString) { NSLog (path %@, filePath) // здесь вы делаете свои вещи } } - person Shebin Koshy; 19.08.2015
comment
У меня есть другой способ. Я только что объявил глобальную переменную для хранения пути, и она работает нормально. Я боролся с этой проблемой, и теперь все в порядке. Ваша помощь действительно ценится. - person Mohammed Janish; 19.08.2015