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 ответа
Убедитесь, что каталог Settings.bundle включен на верхнем уровне проекта. Под верхним уровнем я подразумеваю, что в файловой системе каталог Settings.bundle должен находиться в том же каталоге, что и ваш файл ProjectName.csproj. В MonoDevelop он будет отображаться как одна из папок верхнего уровня под узлом проекта.
Установите для действия сборки 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>
Надеюсь, это поможет.