MonoTouch: проблема с файлом Settings.bundle

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

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

Вот XML моего файла Root.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>Root</key>
<dict>
    <key>PreferenceSpecifiers</key>
    <array>
        <dict>
            <key>Title</key>
            <string>Group Name</string>
            <key>Type</key>
            <string>PSGroupSpecifier</string>
        </dict>
        <dict>
            <key>AutocapitalizationType</key>
            <string>None</string>
            <key>AutocorrectionType</key>
            <string>No</string>
            <key>Key</key>
            <string>usernameTextField</string>
            <key>Title</key>
            <string>Username</string>
            <key>Type</key>
            <string>PSTextFieldSpecifier</string>
        </dict>
    </array>
</dict>
</dict>
</plist>

Как я уже сказал, я просматривал это довольно много раз и не вижу никаких проблем с ним. Для действия построения файла установлено значение "Содержимое", а для параметра "Копировать в выходной каталог" - "Всегда копировать". Используемая версия MonoTouch - 6.0.7.

Буду признателен за любую помощь в этом вопросе. Спасибо

2 ответа

Решение
  1. Убедитесь, что каталог Settings.bundle включен на верхнем уровне проекта. Под верхним уровнем я подразумеваю, что в файловой системе каталог Settings.bundle должен находиться в том же каталоге, что и ваш файл ProjectName.csproj. В MonoDevelop он будет отображаться как одна из папок верхнего уровня под узлом проекта.

  2. Установите для действия сборки Root.plist значение BundleResource (не включайте "Копировать в выходной каталог". Подсказка: если вы устанавливаете "Копировать в выходной каталог", не делайте этого - это почти всегда неправильно - мы на самом деле обсуждали вообще удаление опции.)

Теперь, для формата файла 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>PreferenceSpecifiers</key>
    <array>
        <dict>
            <key>Type</key>
            <string>PSGroupSpecifier</string>
            <key>Title</key>
            <string>Group Name</string>
        </dict>
        <dict>
            <key>Type</key>
            <string>PSTextFieldSpecifier</string>
            <key>Title</key>
            <string>Username</string>
            <key>AutocapitalizationType</key>
            <string>None</string>
            <key>AutocorrectionType</key>
            <string>No</string>
            <key>KeyboardType</key>
            <string>Alphabet</string>
            <key>IsSecure</key>
            <false/>
            <key>Key</key>
            <string>usernameTextField</string>
            <key>DefaultValue</key>
            <string></string>
        </dict>
    </array>
    <key>StringsTable</key>
    <string>Root</string>
</dict>
</plist>

Глядя на ваш файл Root.plist, кажется, что ключ PreferenceSpecifiers не находится в узле dict верхнего уровня (он должен быть). Другими словами:

избавьтесь от следующих строк в верхней части файла:

<dict>
<key>Root</key>

... и одну из следующих строк в конце вашего файла:

</dict>

Это должно сделать это...

Теперь... после всего этого, я только что сам понял это, пытаясь добавить настройки в свой личный сторонний проект, и решил, что нам, в Xamarin, нужно сделать это проще. Я уже исправил несколько незначительных проблем в предстоящем MonoDevelop 3.1, но я надеюсь получить время, необходимое для добавления шаблонов для Settings.bundle в мастер MonoDevelop "Добавить новый файл". Я также хотел бы добавить подсказку о ключе / значении plist, как мы делаем для Info.plist и Entitlements.plist, чтобы редактор списков MonoDevelop мог лучше руководить вами при редактировании этих файлов списков.

Для начала, вам не хватает вашего заключительного списка </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>PreferenceSpecifiers</key>
  <array>
      <dict>
          <key>Type</key>
          <string>PSToggleSwitchSpecifier</string>
          <key>Title</key>
          <string>Stay Signed-In</string>
          <key>Key</key>
          <string>staySignedIn</string>
          <key>DefaultValue</key>
          <true/>
      </dict>
    </array>
</dict>
</plist>

Надеюсь, это поможет.

Другие вопросы по тегам