Связь sqlite3 db с приложением для iPhone - PullRequest
2 голосов
/ 27 июня 2010

Я пытаюсь связать файл базы данных SQLite3 с нашим приложением, чтобы было легко открыть резервную копию базы данных из электронной почты. Следующее, однако, не работает, так как Mail по-прежнему не распознает файл (на iPad и iPhone 4):

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.database</string>
            <string>public.data</string>                    
        </array>
        <key>UTTypeDescription</key>
        <string>App Database File</string>
        <key>UTTypeIdentifier</key>
        <string>com.company.App.db</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <string>db</string>
            <key>public.mime-type</key>
            <string>application/x-sqlite3</string>            
        </dict>
    </dict>
</array>

 <key>CFBundleDocumentTypes</key>
 <dict>
  <key>CFBundleTypeName</key>
  <string>App Database</string>
  <key>CFBundleTypeIconFiles</key>
  <array>
   <string>Icon-Small.png</string>
   <string>Icon.png</string>
  </array>
    <key>CFBundleTypeRole</key>
        <string>Editor</string>

  <key>LSItemContentTypes</key>
  <array>
   <string>com.company.App.db</string>
  </array>
  <key>LSHandlerRank</key>
  <string>Alternate</string>
 </dict>
</dict>

Есть идеи, что я делаю не так?

Ответы [ 3 ]

7 голосов
/ 04 июля 2011

Для полноты и, возможно, моей собственной справки ниже, вот некоторые подробности, которые заставили меня работать:

Объявление типов документов, поддерживаемых вашим приложением (например, базы данных sqlite3)

<key>UTExportedTypeDeclarations</key>
    <array>
        <dict>
            <key>UTTypeIdentifier</key>
            <string>com.company.sqlite3.database</string>
            <key>UTTypeReferenceURL</key>
            <string>http://www.company.com/</string>
            <key>UTTypeDescription</key>
            <string>MyCompany SQLite Database</string>
            <key>UTTypeIconFile</key>
            <array>
                <string>Icon-Small.png</string>
                <string>Icon.png</string>
            </array>
            <key>UTTypeConformsTo</key>
            <array>
                <string>public.database</string>
                <string>public.data</string>
            </array>
            <key>UTTypeTagSpecification</key>
            <dict>
                <key>public.filename-extension</key>
                <array>
                    <string>sqlite</string>
                </array>
                <key>public.mime-type</key>
                <array>
                    <string>application/x-sqlite3</string>
                    <string>application/octet-stream</string>
                </array>

            </dict>
        </dict>
    </array>
<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>MyCompany SQLite Database</string>
        <key>CFBundleTypeIconFiles</key>
        <array>
            <string>Icon-Small.png</string>
            <string>Icon.png</string>
        </array>

        <key>CFBundleTypeExtensions</key>
        <array>
            <string>sqlite</string>
        </array>

        <key>CFBundleTypeMIMETypes</key>
        <array>
            <string>application/x-sqlite3</string>
            <string>application/octet-stream</string>
        </array>

        <key>LSHandlerRank</key>
        <string>Alternate</string>

        <key>LSItemContentTypes</key>
        <array>
            <string>com.company.sqlite3.database</string>
        </array>

        <key>NSPersistentStoreTypeKey</key>
        <string>SQLite</string>

    </dict>
</array>

Скопируйте и вставьте приведенный выше XML в ваш файл Info.plist.

Установка «Тип хранилища» на «SQLite» не стала для меня решающим фактором.

В моем предыдущем посте упоминался довольно неправильный способ заставить его работать, который принимает все файлы и неправильно экспортировал тип.

Кроме того, если ваше приложение отправляет эти файлы по электронной почте в виде вложений, убедитесь, что оно соответствует типу MIME, который вы задали для захвата. Приложение / октет-поток не важен, просто старые версии нашего приложения отправляют базы данных по электронной почте с этим типом MIME.

например,

[controller addAttachmentData:[NSData dataWithContentsOfFile:dbPath] mimeType:@"application/x-sqlite3" fileName:filename];

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

0 голосов
/ 14 июня 2011

Согласно документации Apple , CFBundleDocumentTypes является массивом, а не диктатом.

У вас есть:

<key>CFBundleDocumentTypes</key>
<dict>

, поэтому должен быть в элементе , например:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>App Database</string>
        <!-- ... -->
    </dict>
</array>
0 голосов
/ 27 июня 2010

Хорошо, я разобрался с этим. Если вместо этого вы используете панель «Информация о цели» и добавляете туда свой тип документа (а затем выбираете «SQLite» в качестве типа «), он просто работает. Очевидно, что вы экспортировали тип, как указано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...