【发布时间】: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