【问题标题】:PreferenceBundle Not Loading Specifiers in Jailbreak (Theos) AppPreferenceBundle 未在越狱(Theos)应用程序中加载说明符
【发布时间】:2013-05-15 04:11:38
【问题描述】:

我整个下午都在与这个奇怪的东西作斗争,但没有结果。之前,我只能使用 Theos 的 Tweak 模板创建一个 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 子项目称为“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)我的 plist 中 defaults 的值通常类似于 com.mycompany.myappname ,而不仅仅是s。 (2) 我在我的设备上看到/System/Library/PreferenceBundles/ 下的首选包,而/Library/PreferenceBundles 下没有。不确定其中任何一个是否有所作为。
  • 是的,默认值应该是无关紧要的,因为模板会将这个值放在所有期望它的“占位符”中。 /Library/PreferencesBundles 是为 PreferenceLoader 项目保留的,因此它们指定由模板安装在那里。

标签: ios jailbreak tweak theos cydia-substrate


【解决方案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 本身中,而不是放在我的子类中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-11
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    相关资源
    最近更新 更多