在写一个作用于 Music.app 的 tweak。
在 MusicNowPlayingItemViewController 类中,我获得了一个 MPMediaItem 类的对象,在试图调用它的一个 getter 方法时,编译无法通过:
%hook MusicNowPlayingItemViewController
-(id)item {
id origResult = %orig;
%c(MPAVItem);
MPAVItem *avItem = origResult;
%c(MPMediaItem);
MPMediaItem *mediaItem = MSHookIvar<MPMediaItem *>(avItem, "_mediaItem");
//到这为止编译时都能通过
BOOL isCloudItem = [mediaItem isCloudItem];
NSLog(@"isCloudItem called: %d", isCloudItem);
return origResult;
}
%end
编译器报错:
Tweak.xm:82:32: error: instance method '-isCloudItem' not found (return type defaults to 'id')
[-Werror,-Wobjc-method-access]
BOOL isCloudItem = [mediaItem isCloudItem];
^~~~~~~~~~~
Tweak.xm:18:8: note: receiver is instance of class declared here
@class MPMediaItem; @class MPAVItem; @class MusicNowPlayingItemViewController; @class MPMedia...
^
Tweak.xm:82:7: error: cannot initialize a variable of type 'BOOL' (aka 'signed char') with an rvalue
of type 'id'
BOOL isCloudItem = [mediaItem isCloudItem];
^ ~~~~~~~~~~~~~~~~~~~~~~~
2 errors generated.
相关头文件的部分(头文件是我自己 decache 手机上的库文件然后 class-dump 的):
//MPMediaItem.h
#import <MediaPlayer/MPMediaEntity.h>
@class MPMediaItemArtwork, NSArray, NSDate, NSString, NSURL;
@interface MPMediaItem : MPMediaEntity
{
}
...
@property(readonly, nonatomic, getter=isCloudItem) BOOL cloudItem;
...
求问我哪里写错了…… 谢谢~