这里的根本原因是您要使用的 API 是私有API。如果要包含诸如 之类的文件,则SBLockScreenNotificationScrollView.h
需要获取或生成该头文件,然后手动将其放入项目中。该文件不会随 Theos/Logos 或 iOS SDK 自动交付。
可能最简单的方法是运行class-dump或class-dump-z来对该头文件进行逆向工程。类转储应该在SpringBoard
可执行文件本身上运行。SpringBoard 是一个应用程序(不是一个框架),它存在于 iPhone 上的/System/Library/CoreServices/SpringBoard.app/SpringBoard
. 因此,如果您的设备已越狱,并且您已openssh
安装,您可以通过 ssh 进入设备(或使用scp
)将可执行文件传输到您的 Mac:
scp root@iphone-ip-address:/System/Library/CoreServices/SpringBoard.app/SpringBoard .
然后,在可执行文件上运行类转储:
class-dump-z -H SpringBoard
您将在当前目录中获得大量头文件,包括 SBLockScreenNotificationScrollView.h。
然后您可能会注意到您的标头依赖于另一个标头,而另一个标头又依赖于另一个标头。如果您尝试构建,您会经常遇到令人沮丧的构建错误。我的建议是从包含所需私有方法的标题中删除所有不需要的东西。那些私有头文件,当包含在您的项目中时,不需要是私有类(例如类)的完整规范。SBLockScreenNotificationScrollView
它们只需要包含您尝试调用的接口的最小描述,以满足编译器的要求。
例子
这个修剪后的标题可能对您来说就足够了(注意我已经注释掉的内容):
//#import "UIGestureRecognizerDelegate.h"
//#import <XXUnknownSuperclass.h> // Unknown library
//@class SBLockScreenNotificationCell;
@interface SBLockScreenNotificationScrollView /* : XXUnknownSuperclass <UIGestureRecognizerDelegate> */ {
// SBLockScreenNotificationCell* _associatedCell;
}
//@property(assign, nonatomic) SBLockScreenNotificationCell* associatedCell;
+(float)scrollThresholdForPasscodeScroll;
@end
注意:在那之后,如果您遇到链接器错误,您可能需要做更多的事情。我建议发布另一个关于 theos/logos 链接器错误的问题,显示错误输出,有人可能会帮助你。这样,我们就可以使每个问题都变得狭窄而具体。谢谢!
参考
iPhone私有API编译