Пользовательский UTI для iOS7

Я бьюсь головой об стену по этому поводу, но, похоже, не могу заставить свою пользовательскую UTI работать.

Я работаю над внедрением AirDrop в свое приложение, чтобы я мог обмениваться файлами между устройствами. Я могу успешно передать файлы на другие устройства, но другие устройства, на которых установлено мое приложение, просто не откроют файлы в моем приложении.

Вот дамп из моего app.plist:

    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>en</string>
    <key>CFBundleDisplayName</key>
    <string>MYAPP</string>
    <key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeIconFiles</key>
            <array>
                <string>57x57</string>
            </array>
            <key>CFBundleTypeName</key>
            <string>MYAPPNAME Shared Assignment</string>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>LSHandlerRank</key>
            <string>Owner</string>
            <key>LSItemContentTypes</key>
            <array>
                <string>com.MYAPPNAME.SIAASSIGNMENT</string>
            </array>
        </dict>
    </array>
    <key>CFBundleExecutable</key>
    <string>${EXECUTABLE_NAME}</string>
    <key>CFBundleIcons</key>
    <dict>
        <key>CFBundlePrimaryIcon</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>57x57 2.png</string>
                <string>114x114 2.png</string>
                <string>72x72 2.png</string>
                <string>144x144 2.png</string>
            </array>
        </dict>
    </dict>
    <key>CFBundleIdentifier</key>
    <string>com.MYAPPNAME.${PRODUCT_NAME:rfc1034identifier}</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>${PRODUCT_NAME}</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>4.0</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleVersion</key>
    <string>4.0</string>
    <key>LSRequiresIPhoneOS</key>
    <true/>
    <key>NSMainNibFile</key>
    <string>Main_Window</string>
    <key>NSMainNibFile~ipad</key>
    <string>Main_Window_iPad</string>
    <key>UIBackgroundModes</key>
    <array>
        <string>fetch</string>
        <string>remote-notification</string>
    </array>
    <key>UIRequiredDeviceCapabilities</key>
    <array>
        <string>armv7</string>
    </array>
    <key>UIStatusBarTintParameters</key>
    <dict>
        <key>UINavigationBar</key>
        <dict>
            <key>Style</key>
            <string>UIBarStyleDefault</string>
            <key>Translucent</key>
            <false/>
        </dict>
    </dict>
    <key>UISupportedInterfaceOrientations</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
    </array>
    <key>UISupportedInterfaceOrientations~ipad</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
    </array>
    <key>UTExportedTypeDeclarations</key>
    <array>
        <dict>
            <key>UTTypeConformsTo</key>
            <array>
                <string>public.text</string>
            </array>
            <key>UTTypeDescription</key>
            <string>MYAPPNAME Shared Assignment</string>
            <key>UTTypeIdentifier</key>
            <string>com.MYAPPNAME.SIAASSIGNMENT</string>
            <key>UTTypeSize320IconFile</key>
            <string>72x72</string>
            <key>UTTypeSize64IconFile</key>
            <string>57x57</string>
            <key>UTTypeTagSpecification</key>
            <dict>
                <key>com.MYAPPNAME.SIAASSIGNMENT</key>
                <array>
                    <string>SIAASSIGNMENT</string>
                                <key>public.mime-type</key>
                                <string>application/xml</string>
                </array>
            </dict>
        </dict>
    </array>
</dict>
</plist>

Я пробовал много разных вещей, чтобы заставить эту работу работать, я просто не могу заставить iOS7 распознать, что это мой тип файла. Я знаю, что вы не должны использовать пространства имен «public.xxx» для своих UTI, поскольку они предварительно назначены Apple. Любая помощь будет принята с благодарностью!


person John Rossitter    schedule 24.10.2013    source источник
comment
Вы пытались установить его тип на что-то непубличное *?   -  person RyanR    schedule 24.10.2013
comment
Вы имеете в виду не использовать public.text, а что-то другое?   -  person John Rossitter    schedule 24.10.2013
comment
Да, просто в качестве эксперимента, чтобы увидеть, имеет ли это какое-то отношение к проблеме.   -  person RyanR    schedule 24.10.2013
comment
Да, я только что попробовал это сейчас, не повезло :(   -  person John Rossitter    schedule 24.10.2013
comment
Вот несколько изображений пользовательского интерфейса в XCode5: ссылка   -  person John Rossitter    schedule 24.10.2013
comment
Я только что понял, что у вас есть раздел экспорта типов, но нет импорта типов. Вам нужно будет заявить, что вы импортируете этот тип как ну, чтобы принимающее приложение могло получить данные.   -  person RyanR    schedule 24.10.2013
comment
Это звук удара моей руки по лбу! Я попробую это, спасибо!   -  person John Rossitter    schedule 24.10.2013
comment
@RyanR Если вы объявляете UTI экспортируемым, должны ли вы также объявлять его импортированным? документ UTI упоминает: Если существуют импортированные и экспортированные декларации для UTI, экспортированная декларация имеет приоритет над импортированной.   -  person DenVog    schedule 06.05.2015
comment
@DenVog, как говорится в документе, на который вы ссылаетесь, импорт и экспорт имеют разные намерения, поэтому я думаю, что они оба необходимы. Если это так, порядок приоритета будет применяться к таким вещам, как значок, расширение имени файла и т. д.   -  person RyanR    schedule 07.05.2015


Ответы (1)


Убедитесь, что вы объявили типы как импортированные, чтобы iOS знала, что отображать ваше приложение как вариант, чтобы открыть их.

Кроме того, убедитесь, что вы реализуете -application:openUrl:sourceApplication:annotation: для получения файлов через AirDrop или контроллер взаимодействия с документами.

person RyanR    schedule 24.10.2013
comment
Вот что помогло мне, но мне также пришлось изменить узел UTTypeTagSpecification с com.MYAPPNAME.SIAASSIGNMENT на public.filename-extension, как указано в предоставленной вами ссылке. - person John Rossitter; 24.10.2013