PreferenceBundle在越狱(Theos)App中没有加载说明符

时间:2013-05-15 04:11:39

标签: ios jailbreak tweak theos cydia-substrate

我整个下午一直在和这个离奇的人打架,没有任何结果。之前,我能够使用Theos的Tweak模板创建一个Tweak,并通过使用其目录中的模板创建子项目来向其添加PreferenceBundle。我会运行调整,在Settings.app中打开它的页面,它会响亮说明符列表(当你不修改它时包含“Awesome Switch 1”)。

换句话说,我只需创建项目几乎不需要修改即可获得此屏幕:

enter image description here

现在,今天我以同样的方式创建了一个新项目(先创建Tweak,PreferenceLoader项目第二)并尝试获得此结果但无济于事。

我一直在与这个战斗超过6个小时。我在两个越狱设备中尝试过它。我已经卸载并重新安装了Theos。我重置了我的电脑,我重新启动了两台设备,无论我做什么,该屏幕都不包含它的首选项。它包含背景,但根本没有说明符。

plist目前看起来像这样。运行-lint时,我不需要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>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子项目名为“Five”)。

首选项.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设置或任何东西。

对此有任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我明白了。

问题出在首选.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本身,而不是我的子类。