iOS SpringBoard 属性 在 id 的对象上找不到 badgeNumberOrString
iOS SpringBoard property badgeNumberOrString not found on object of id
所以我正在尝试通过捆绑 ID 为特定应用设置应用徽章。在此之前,我已经连接到 SpringBoard 并将 all 应用程序设置为特定字符串,但我似乎找不到为单个应用程序图标设置徽章字符串的方法。我目前抛出的错误是:
Tweak.xm:28:123: error: property 'badgeNumberOrString' not found on object of
type 'id'
...applicationWithBundleIdentifier:@"com.apple.AppStore"].badgeNumberOrStri..
^
1 error generated.
make[3]: *** [/home/theodd/Desktop/appbadge/.theos/obj/debug/armv7/Tweak.xm.94fb86bd.o] Error 1
make[2]: *** [/home/theodd/Desktop/appbadge/.theos/obj/debug/armv7/AppBadge.dylib] Error 2
make[1]: *** [internal-library-all_] Error 2
make: *** [AppBadge.all.tweak.variables] Error 2
我在 Tweak.xm 中的当前代码是:
#import <SpringBoard/SpringBoard.h>
#define PLIST_PATH @"/var/mobile/Library/Preferences/com.theodd.appbadge.plist"
inline bool GetPrefBool(NSString *key){
return [[[NSDictionary dictionaryWithContentsOfFile:PLIST_PATH] valueForKey:key] boolValue];
}
inline NSString* GetPrefString(NSString *key){
return [[NSDictionary dictionaryWithContentsOfFile:PLIST_PATH] objectForKey:key];
}
inline NSString* appID(NSString *key) {
return [[[NSBundle mainBundle] infoDictionary] objectForKey:key];
}
@interface SBApplicationIcon : NSObject
- (void)setBadge:(id)arg1;
@end
@interface SBApplicationController : NSObject
+ (id)sharedInstance;
- (id)applicationWithBundleIdentifier:(id)arg1;
@end
BOOL isEnabled = GetPrefBool(@"enableSwitch");
NSString* bString = GetPrefString(@"badgeName");
NSString* appStoreString = [SBApplicationController.sharedInstance applicationWithBundleIdentifier:@"com.apple.AppStore"].badgeNumberOrString;
%hook SBApplication
- (id)badgeNumberOrString {
id r = %orig;
if(isEnabled) return bString;
return r;
}
%end
编辑:我注意到我应该将 SBApplicationIcon.sharedInstance 与 applicationWithBundleIdentifier 等分开,然后像这样将它们拼凑在一起:
that = SBApplicationController.sharedInstance,
then this = [that applicationWithBundleIdentifier:@""],
this.badgeNumberOrString = @""
但我不确定应该将它们保存到什么对象类型。我对 logos/objective-c 环境还是很陌生。我有 C++ 和 Java/javaScript 的经验,所以我了解编程的基本思想。
免责声明:我对 SpringBoard 不熟悉。
您已将 badgeNumberOrString 定义为方法,而不是 属性。
如果您将它添加到 SBApplicationController 中,例如:
@interface SBApplicationController : NSObject
+ (id)sharedInstance;
- (id)applicationWithBundleIdentifier:(id)arg1;
@property NSString *badgeNumberOrString;
@end
它将进行相应设置,您可以继续覆盖 getter。
如果您想按方法使用,则需要像在其他方法中一样使用方括号:
NSString* appStoreString = [[SBApplicationController.sharedInstance applicationWithBundleIdentifier:@"com.apple.AppStore"] badgeNumberOrString];
但是这一行仍然无法工作,因为您正在尝试访问 属性 - 这是不可用的 - 并设置它的值:
this.badgeNumberOrString = @""
所以我正在尝试通过捆绑 ID 为特定应用设置应用徽章。在此之前,我已经连接到 SpringBoard 并将 all 应用程序设置为特定字符串,但我似乎找不到为单个应用程序图标设置徽章字符串的方法。我目前抛出的错误是:
Tweak.xm:28:123: error: property 'badgeNumberOrString' not found on object of
type 'id'
...applicationWithBundleIdentifier:@"com.apple.AppStore"].badgeNumberOrStri..
^
1 error generated.
make[3]: *** [/home/theodd/Desktop/appbadge/.theos/obj/debug/armv7/Tweak.xm.94fb86bd.o] Error 1
make[2]: *** [/home/theodd/Desktop/appbadge/.theos/obj/debug/armv7/AppBadge.dylib] Error 2
make[1]: *** [internal-library-all_] Error 2
make: *** [AppBadge.all.tweak.variables] Error 2
我在 Tweak.xm 中的当前代码是:
#import <SpringBoard/SpringBoard.h>
#define PLIST_PATH @"/var/mobile/Library/Preferences/com.theodd.appbadge.plist"
inline bool GetPrefBool(NSString *key){
return [[[NSDictionary dictionaryWithContentsOfFile:PLIST_PATH] valueForKey:key] boolValue];
}
inline NSString* GetPrefString(NSString *key){
return [[NSDictionary dictionaryWithContentsOfFile:PLIST_PATH] objectForKey:key];
}
inline NSString* appID(NSString *key) {
return [[[NSBundle mainBundle] infoDictionary] objectForKey:key];
}
@interface SBApplicationIcon : NSObject
- (void)setBadge:(id)arg1;
@end
@interface SBApplicationController : NSObject
+ (id)sharedInstance;
- (id)applicationWithBundleIdentifier:(id)arg1;
@end
BOOL isEnabled = GetPrefBool(@"enableSwitch");
NSString* bString = GetPrefString(@"badgeName");
NSString* appStoreString = [SBApplicationController.sharedInstance applicationWithBundleIdentifier:@"com.apple.AppStore"].badgeNumberOrString;
%hook SBApplication
- (id)badgeNumberOrString {
id r = %orig;
if(isEnabled) return bString;
return r;
}
%end
编辑:我注意到我应该将 SBApplicationIcon.sharedInstance 与 applicationWithBundleIdentifier 等分开,然后像这样将它们拼凑在一起:
that = SBApplicationController.sharedInstance,
then this = [that applicationWithBundleIdentifier:@""],
this.badgeNumberOrString = @""
但我不确定应该将它们保存到什么对象类型。我对 logos/objective-c 环境还是很陌生。我有 C++ 和 Java/javaScript 的经验,所以我了解编程的基本思想。
免责声明:我对 SpringBoard 不熟悉。
您已将 badgeNumberOrString 定义为方法,而不是 属性。
如果您将它添加到 SBApplicationController 中,例如:
@interface SBApplicationController : NSObject
+ (id)sharedInstance;
- (id)applicationWithBundleIdentifier:(id)arg1;
@property NSString *badgeNumberOrString;
@end
它将进行相应设置,您可以继续覆盖 getter。
如果您想按方法使用,则需要像在其他方法中一样使用方括号:
NSString* appStoreString = [[SBApplicationController.sharedInstance applicationWithBundleIdentifier:@"com.apple.AppStore"] badgeNumberOrString];
但是这一行仍然无法工作,因为您正在尝试访问 属性 - 这是不可用的 - 并设置它的值:
this.badgeNumberOrString = @""