iOS DevelopmentiOS - 线程/底层/RuntimeiOS

IPAPatch + UIDebuggingInformatio

2017-06-06  本文已影响718人  Vinc

目录

一、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对于该微博的转发更是引发了我的兴趣(学艺不精,却爱瞎折腾🤣),所以长假过后我简单看了一下,现在总结一下自己的心得,以飨同好(这个词似乎是应该用在引用别人的作品时🤣)。

@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的时候还可以切换查看。

切换到UIStatusBarWindow查看
2、VC Hierarchy

View Hierarchy类似,VC Hierarchy会展示VC的层次,在这个菜单里可以查看VC包括ControllerView在内的一些细节。

3、Ivar Explorer

这个选项可以查看UIApplication实例的属性们。重要的是,所有对象变量都可以找到。

可以通过AppDelegate实例一直查找下去
4、Measure

可以测量出控件元素的横向或纵向的尺寸(以pt计)。�

5、Spec Compare

功能是读取相册的图片和当前界面对比。
这个功能千万不能被较真的PM发现!!!
这个功能千万不能被较真的PM发现!!!
这个功能千万不能被较真的PM发现!!!

  1. Add
6、System Color Audit

没能发现那几个空白的cell是做什么用的Orz


2、IPAPatch

UIDebuggingInformationOverlay小玩了一把之后,实际体验感觉并没有Flipboard推出的Flex强大,优势是调用极其方便。所以我对@NaituwIPAPatch: 免越狱调试、修改第三方App更感兴趣,不越狱用Reveal查看第三方App,这就是我一直想要的功能啊🤣。

IPAPatch的使用方法,@NaituwIPAPatch: 免越狱调试、修改第三方App一文中已经写的很清楚了,我只能算是越俎代庖。

1、IPAPatch 和 UIDebuggingInformationOverlay

我们先尝试成功运行@NaituwIPAPatch: 免越狱调试、修改第三方App文章末尾提到的Demo,下载解压,在IPAPatch-DummyApp这个Target里,配置好 BundleID 和代码签名,连接手机编译运行。

配置IPAPatch-DummyApp这个Target 的 BundleID 和代码签名——Naituw原文配图 只在Demo基础上修改了签名,成功运行 运行到真机上

将上文的代码拷贝到IPAPatchEntry.mm文件中的+load方法中,再次运行。

2、IPAPatch 和 Reveal

这次我们置换一下要打包安装的App,按照@NaituwIPAPatch: 免越狱调试、修改第三方App的步骤

  1. 首先我们需要准备一个解密过的 Youtube IPA 文件,这个文件可以从越狱手机上导出,也可以直接去网站下载,比如我自己常用的是 iphonecake.com
  1. 将 IPA 文件命名为 app.ipa,替换模版工程中的 Assets/app.ipa 文件

  2. 打开 Reveal,拿到需要集成的 Framework 文件

  3. 将 RevealServer.framework 放置在 Assets/Frameworks/RevealServer.framework

  4. 打开 IPAPatch,在 IPAPatch-DummyApp 这个 Target 里,配置好 BundleID 和代码签名。Display Name 会作为前缀添加到原来的 App 上,如图配置的话最后就是 "RevealYoutube"

  5. 点击 Xcode 左上角的编译运行按钮,修改好的 Youtube 就会安装到手机上,Reveal 中也能找到

  6. 我先去下了一个解密过的 QQ IPA 文件(@Naituw常用的AppCake上多是国外应用)

  7. 重命名为 app.ipa,替换模版工程中的 Assets/app.ipa

  8. 编译运行,Bingo!


  9. 将 Reveal App 目录下的 RevealServer.framework 放置在模版工程中的 Assets/Frameworks/RevealServer.framework

  10. 编译运行,确保 iPhone 和 Mac 在同一 WiFi 下,打开Reveal,Bingo!



3、IPAPatch 和 FLEX

Flipboard/FLEX相比UIDebuggingInformationOverlay还要强大得多,UIDebuggingInformationOverlay的优点可以看下图。

下面我们尝试用 IPAPatch 来集成 FLEX,来查看第三方App的网络请求、系统log、堆对象、沙盒文件、Cookies、UserDefaults、UIApplication、UIScreen、UIDevice等信息。

  1. 从 GitHub 下载Flipboard/FLEX,解压,打开FLEX.xcworkspace

  2. Build Flex 这个 project,去 Finder 中获取 Flex.framework,拷贝到模版工程中的 Assets/Frameworks/


  3. Flex.framework拖到IPAPatch工程中,以供代码引用

  4. 新增UIWindowFlexSetting分类,功能是在晃动手机时唤出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

  1. 编译运行,Bingo!




至此,本文内容已告完成。我们尝试了用IPAPatchUIDebuggingInformationOverlayRevealFLEX三者进行配合,在研究学习第三方App的时候,我们大可将这几个工具放到一起,充分发挥这些工具的作用!

看完全文,不难发现本文主角是IPAPatch,这里安利一发IPAPatch作者@Naituw的免费Maipo - 全功能新浪微博 macOS 客户端体验非常棒,配合手机端的奇点墨客疗效显著!

最后一记自发安利,@onevcat同样推荐的泊学 - 一个全栈工程师的自学网站,一手 Swift 视频学习资料!

上一篇下一篇

猜你喜欢

热点阅读