PreferenceBundle не загружает спецификаторы в приложении Jailbreak (Theos)

Я боролся с этим причудливым весь день безрезультатно. Раньше я мог просто создать Tweak, используя шаблон Theos Tweak, и добавить к нему PreferenceBundle, создав подпроект с использованием шаблона в его каталоге. Я запускал твик, открывал его страницу в Settings.app, и он озвучивал список спецификаторов (который включает в себя «Awesome Switch 1», если вы его не изменяете).

Другими словами, я бы получил этот экран, просто создав проект, практически не внося изменений:

введите здесь описание изображения

Теперь, сегодня я создал новый проект таким же образом (сначала создал Tweak, затем проект PreferenceLoader) и безуспешно пытался достичь этого результата.

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

Plist в настоящее время выглядит так. Мне нужно, чтобы инструмент plist не возвращал синтаксическую ошибку при запуске -lint:

<?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>items</key>
    <array>
        <dict>
            <key>cell</key>
            <string>PSGroupCell</string>
            <key>label</key>
            <string>Five First Page</string>
        </dict>
        <dict>
            <key>cell</key>
            <string>PSSwitchCell</string>
            <key>default</key>
            <true/>
            <key>defaults</key>
            <string>s</string>
            <key>key</key>
            <string>AwesomeSwitch1</string>
            <key>label</key>
            <string>Awesome Switch 1</string>
        </dict>
    </array>
    <key>title</key>
    <string>SomeFive</string>
</dict>
</plist>

(Five.plist. Подпроект PreferenceLoader называется «Пять»).

А настройки .mm выглядят так:

@interface PSListController
-(id)loadSpecifiersFromPlistName:(id)name target:(id)tar;
@end

@interface FiveListController: PSListController
{
    id _specifiers;
}
-(id)specifiers;
@end

@implementation FiveListController
- (id)specifiers {
    if(_specifiers == nil) {
        _specifiers = [[self loadSpecifiersFromPlistName:@"Five" target:self] retain];
    }
    return _specifiers;
}
@end

// vim:ft=objc

Теперь я знаю, что файл существует и читается правильно, потому что я проверил, существует ли он вручную в /Library/PreferenceBundles, и потому что вы можете изменить ключ заголовка в приведенном выше plist, и он будет отражаться в заголовке панели навигации страницы Preference. Я не уверен, что заставляет его читать заголовок, но не остальные спецификаторы.

Я совершенно ошеломлен этим. Я никогда не видел такого странного поведения с проектами PreferenceLoader, и похоже, что это началось совершенно случайно, так как я не менял никаких настроек Theos или чего-то еще.

Любая помощь в этом будет оценена.


person Andy Ibanez    schedule 15.05.2013    source источник
comment
Я не знаю, в чем проблема, но есть две вещи, которые отличаются от того, что сделали мои приложения: (1) значение defaults в моем plist обычно что-то вроде com.mycompany.myappname, а не просто s. (2) Я вижу предустановленные пакеты на своем устройстве под /System/Library/PreferenceBundles/ и не вижу под /Library/PreferenceBundles. Не уверен, что любой из них имеет значение.   -  person Nate    schedule 15.05.2013
comment
Да, значение по умолчанию не должно иметь значения, учитывая, что шаблон поместит это значение во все ожидаемые заполнители. /Library/PreferencesBundles зарезервирован для проектов PreferenceLoader, поэтому они указаны для установки там по шаблону.   -  person Andy Ibanez    schedule 15.05.2013


Ответы (1)


Я понял.

Проблема была с файлом настроек .mm. Сравните тот, который я задал в своем вопросе, с этим:

@interface PSListController
{
    id _specifiers;
}
-(id)specifiers;
-(id)loadSpecifiersFromPlistName:(id)name target:(id)target;
@end

@interface NotifierSettingsListController: PSListController {
}
@end

@implementation NotifierSettingsListController
- (id)specifiers {
    if(_specifiers == nil) {
        _specifiers = [[self loadSpecifiersFromPlistName:@"NotifierSettings" target:self] retain];
    }
    return _specifiers;
}
@end

// vim:ft=objc

Поскольку у меня нет заголовков, я должен объявить те, которые буду использовать. Но я сделал это неправильно там. Я должен поместить _specifiers и все методы моего подкласса PSListController в сам PSListController, а не в свой подкласс.

person Andy Ibanez    schedule 15.05.2013