IPAPatch + UIDebuggingInformatio
目录
一、UIDebuggingInformationOverlay
1、View Hierarchy
2、VC Hierarchy
3、Ivar Explorer
4、Measure
5、Spec Compare
6、System Color Audit
二、IPAPatch
1、IPAPatch 和 UIDebuggingInformationOverlay
2、IPAPatch 和 Reveal
3、IPAPatch 和 FLEX
端午假期前一天,微博上的iOS圈被@图拉鼎的一条微博刷了屏
之后@Naituw对于该微博的转发更是引发了我的兴趣(学艺不精,却爱瞎折腾🤣),所以长假过后我简单看了一下,现在总结一下自己的心得,以飨同好(这个词似乎是应该用在引用别人的作品时🤣)。
1、UIDebuggingInformationOverlay
言归正传,UIDebuggingInformationOverlay
是一个系统的调试界面,只需将几句简单的代码放入AppDelegate
的-application:didFinishLaunchingWithOptions:
即可唤出(提交审核的版本中请勿添加,可能会因此被拒)。代码如下:
Objective-C
id debugClass = NSClassFromString(@"UIDebuggingInformationOverlay");
[debugClass performSelector:NSSelectorFromString(@"prepareDebuggingOverlay")];
id debugOverlayInstance = [debugClass performSelector:NSSelectorFromString(@"overlay")];
[debugOverlayInstance performSelector:NSSelectorFromString(@"toggleVisibility")];
Swift
let overlayClass = NSClassFromString("UIDebuggingInformationOverlay") as? UIWindow.Type
_ = overlayClass?.perform(NSSelectorFromString("prepareDebuggingOverlay"))
let overlay = overlayClass?.perform(NSSelectorFromString("overlay")).takeUnretainedValue() as? UIWindow
_ = overlay?.perform(NSSelectorFromString("toggleVisibility"))
如果隐藏了这个视图,只需再用两个手指同时点击手机的status bar就可以再次唤出了。
从上图可以看出有6个选项,我们根据国外原文的描述分别简单翻译一下。
1、View Hierarchy
罗列选中Window的Views,可以点击View查看View的细节,从frame
到实例变量,在同时有多个window的时候还可以切换查看。
2、VC Hierarchy
与View Hierarchy
类似,VC Hierarchy
会展示VC的层次,在这个菜单里可以查看VC包括Controller
的View
在内的一些细节。
3、Ivar Explorer
这个选项可以查看UIApplication
实例的属性们。重要的是,所有对象变量都可以找到。
4、Measure
可以测量出控件元素的横向或纵向的尺寸(以pt计)。�
5、Spec Compare
功能是读取相册的图片和当前界面对比。
这个功能千万不能被较真的PM发现!!!
这个功能千万不能被较真的PM发现!!!
这个功能千万不能被较真的PM发现!!!
- Add
- 从相册选择1张图片,点击图片
- 手指在屏幕上『上下滑动』调整选图的透明度来对比和当前界面的差异
-
双击退出
6、System Color Audit
没能发现那几个空白的cell是做什么用的Orz
2、IPAPatch
UIDebuggingInformationOverlay
小玩了一把之后,实际体验感觉并没有Flipboard推出的Flex
强大,优势是调用极其方便。所以我对@Naituw的IPAPatch: 免越狱调试、修改第三方App更感兴趣,不越狱用Reveal
查看第三方App,这就是我一直想要的功能啊🤣。
IPAPatch的使用方法,@Naituw在IPAPatch: 免越狱调试、修改第三方App一文中已经写的很清楚了,我只能算是越俎代庖。
1、IPAPatch 和 UIDebuggingInformationOverlay
我们先尝试成功运行@Naituw在IPAPatch: 免越狱调试、修改第三方App文章末尾提到的Demo,下载解压,在IPAPatch-DummyApp这个Target里,配置好 BundleID 和代码签名,连接手机编译运行。
将上文的代码拷贝到IPAPatchEntry.mm
文件中的+load
方法中,再次运行。
2、IPAPatch 和 Reveal
这次我们置换一下要打包安装的App,按照@Naituw在IPAPatch: 免越狱调试、修改第三方App的步骤
- 首先我们需要准备一个解密过的 Youtube IPA 文件,这个文件可以从越狱手机上导出,也可以直接去网站下载,比如我自己常用的是 iphonecake.com
-
将 IPA 文件命名为 app.ipa,替换模版工程中的 Assets/app.ipa 文件
-
打开 Reveal,拿到需要集成的 Framework 文件
-
将 RevealServer.framework 放置在 Assets/Frameworks/RevealServer.framework
-
打开 IPAPatch,在 IPAPatch-DummyApp 这个 Target 里,配置好 BundleID 和代码签名。Display Name 会作为前缀添加到原来的 App 上,如图配置的话最后就是 "RevealYoutube"
-
点击 Xcode 左上角的编译运行按钮,修改好的 Youtube 就会安装到手机上,Reveal 中也能找到
-
重命名为 app.ipa,替换模版工程中的 Assets/app.ipa
-
编译运行,Bingo!
-
将 Reveal App 目录下的 RevealServer.framework 放置在模版工程中的 Assets/Frameworks/RevealServer.framework
-
编译运行,确保 iPhone 和 Mac 在同一 WiFi 下,打开Reveal,Bingo!
3、IPAPatch 和 FLEX
Flipboard/FLEX相比UIDebuggingInformationOverlay
还要强大得多,UIDebuggingInformationOverlay
的优点可以看下图。
下面我们尝试用 IPAPatch 来集成 FLEX,来查看第三方App的网络请求、系统log、堆对象、沙盒文件、Cookies、UserDefaults、UIApplication、UIScreen、UIDevice等信息。
-
从 GitHub 下载Flipboard/FLEX,解压,打开
FLEX.xcworkspace
-
Build Flex 这个 project,去 Finder 中获取
Flex.framework
,拷贝到模版工程中的 Assets/Frameworks/
-
将
Flex.framework
拖到IPAPatch
工程中,以供代码引用 -
新增
UIWindow
的FlexSetting
分类,功能是在晃动手机时唤出FLEX调试视图,代码如下
// UIWindow+FlexSetting.h
#import <UIKit/UIKit.h>
@interface UIWindow (FlexSetting)
@end
// UIWindow+FlexSetting.m
#import "UIWindow+FlexSetting.h"
#if DEBUG
#import "FLEX/FLEXManager.h"
#endif
@implementation UIWindow (FlexSetting)
#if DEBUG
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
[super motionBegan:motion withEvent:event];
if (motion == UIEventSubtypeMotionShake) {
[[FLEXManager sharedManager] showExplorer];
}
}
#endif
@end
-
编译运行,Bingo!
至此,本文内容已告完成。我们尝试了用IPAPatch和UIDebuggingInformationOverlay
、Reveal、FLEX三者进行配合,在研究学习第三方App的时候,我们大可将这几个工具放到一起,充分发挥这些工具的作用!
看完全文,不难发现本文主角是IPAPatch,这里安利一发IPAPatch作者@Naituw的免费Maipo - 全功能新浪微博 macOS 客户端体验非常棒,配合手机端的奇点或墨客疗效显著!
最后一记自发安利,@onevcat同样推荐的泊学 - 一个全栈工程师的自学网站,一手 Swift 视频学习资料!