[JavaScript] 纯文本查看 复制代码functionprintMethods(className){varcount=newnewType("I");varmethods=class_copyMethodList(objc_getClass(className),count);varmethodsArray=[];for(vari=0;i<*count;i++){varmethod=methods[i];({selector:method_getName(method),implentation:method_getImplementation(method)});}free(methods);free(count);returnmethodsArray;},效果如下图:代码:[JavaScript] 纯文本查看 复制代码functiontryPrintIvars(a){varx={};for(iin*a){try{x[i]=(*a)[i];}catch(e){}}returnx;}准备工作都做好了,将两个函数都先输入进去因为最后的目标是应用图标,所以,现在我们从主界面开始着手打印它的UI布局代码:[Objective-C] 纯文本查看 复制代码[[UIApplicationsharedApplication].] 然后出来了一大片,红呦呦的代码,看着都眼睛疼,4点钟时看得眼睛都瞎了啊。此时应想,主界面可以滚动,是一个scrollView,是scrollView就得有contentSize,然后一看手机的页面,总共有5页,由于5s机型的宽度是320,所以这时候可以大胆猜测它的contentSize的最大宽度是1600,mond+F***准确命中,同时,还注意到,它的contentOffset是960又此时我的页面正是第4页,基本锁定目标,查找frame的坐标是960,0的view,此时可以得到大量信息了,SBRootIconListView,这个就是用来装一页所有图标的View,SBIconListModel这个里边,我猜是装了该view里边的模型信息,注意,11icons,正好是我们页面所有的图标数,此时再看后边SBIconView的size62,62 这和图标尺寸的差距只有2个点,基本锁定,它就是我们要找的目标此时,让我们找到是什么在处理SBIconView的事件,我们所知道的,view一般是用来展示的,事件的发生一般都会交给代{过}{滤}理来负责。让我们使用nextResponder,或者寻找他们的代{过}{滤}理,来定位到一个controller文件,很幸运,直接一步就找到了,就是它:SBIconController!附件101269此时,我们可以class-dump出SpringBoard的头文件了,去查看一下它的里边都有些什么方法和属性,如果想偷懒,去github直接搜索也行。。。根据关键词和方法名译的意思大致锁定出来以下几个方法ps: 这儿的char是BOOL类型代码:[Objective-C] 纯文本查看 复制代码-(void)_handleShortcutMenuPeek:(id)arg1;-(SBApplicationShortcutMenu*)presentedShortcutMenu;-(char)_canRevealShortcutMenu;-(id)_aggregateLoggingAppKeyForShortcutMenu:(id)arg1;-(void)applicationShortcutMenu:(id)arg1activateShortcutItem:(id)arg2index:(int)arg3;-(void)applicationShortcutMenu:(id)arg1startEditingForIconView:(id)arg2;-(void)applicationShortcutMenu:(id)arg1launchApplicationWithIconView:(id)arg2;-(void)applicationShortcutMenuDidPresent:(id)arg1;-(void)_revealMenuForIconView:(id)arg1presentImmediately:(char)arg2;自己写一个tweak,hook所有的这些函数,给他们所有的实现之前加上一个NSLog(),查看调用的顺序,和传进来的值的类型。以及一次Peek事件所关联到了哪些方法。代码
iOS实践课:修改SpringBoard 来自淘豆网www.taodocs.com转载请标明出处.