前言
- 调试一款应用,使用重签名方案,很容易被第三方察觉.在越狱环境中,我们可以在不污染App的情况下,对第三方程序进行动态调试
一、Reveal
Reveal 是一款UI调试工具,对iOS逆向开发非常有帮助.
- 在Mac电脑中,安装Reveal软件: 密码 xclient.info
- 在手机中,安装Reveal插件
- 打开Cydia,安装Reveal2Loader插件
- 导入dylib文件
- 在手机上,进入/Library,创建RHRevealLoader目录
cd ~/Library
mkdir RHRevealLoader
-
- 在Mac电脑上,打开Reveal,找到iOS Library选项
-
- 找到RevealServer路径
- 打开终端,将RevealServer拷贝到手机的 /Library/RHRevealLoader目录下,重命名为libReveal.dylib
- 手机开启允许调试的应用
- 打开设置,找到Reveal选项
- 开启允许调试的应用,例如 知乎
- 使用Reveal 进行UI调试
- 在Mac电脑上,打开Reveal软件.手机上,重新启动 知乎
- 在电脑的Reveal中,出现两个 知乎,分别是 Wifi连接和USB连接
- 点击USB连接的 知乎,可进行UI调试,并且不会阻塞 知乎的进程
二、debugserver
- 在越狱环境中,使用Xcode进行lldb附加
2.1 lldb原理
-
- Xcode中的lldb可以调试手机中的应用,是因为手机中的debugserver开启了相关服务
- 所以在越狱环境中, 我们只需要开启debugserver服务,就可以利用lldb远程调试三方应用了.
- 搜索debugserver
- 找到Mac电脑中的debugserver,进入以下目录
cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport $ ls
11.0 11.2 11.4 12.1 12.3 13.0 13.2 13.4 13.6 14.0 14.2 14.4 15.0 15.4 15.6 16.0
11.1 11.3 12.0 12.2 12.4 13.1 13.3 13.5 13.7 14.1 14.3 14.5 15.2 15.5 15.7 16.1
192 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport $
-
- 可以找到不同的iOS系统版本,所对应的镜像文件
- 进入12.4系统设备对应的系统目录,找到dmg文件 DeveloperDiskImage.dmg
- 打开dmg文件,进入usr/bin目录可以看到 debugserver.这就是Xcode安装到真机中的文件
-
- 查看该文件的md5值
md5 /Volumes/DeveloperDiskImage/usr/bin/debugserver
MD5 (/Volumes/DeveloperDiskImage/usr/bin/debugserver) = b771aad8917de2ff41feb5acfe4a9b15
2.2 手机设备中的debugserver
-
- 在手机系统中,已经存在一个debugserver,当Xcode第一次连接手机,就会将对应版本的debugserver安装到手机系统中
- 进入手机的/Developer/usr/bin 目录下
cd /Developer/usr/bin
Holothurian6P:/Developer/usr/bin root# ls
DTDeviceArbitration* XcodeDeviceMonitor* debugserver*
ScreenShotr* axauditd*
-
- 将手机中的debugserver拷贝到Mac电脑中
- 将拷贝后的debugserver生成的md5值拿出
scp -r root@192.168.124.12:/Developer/usr/bin/debugserver ~/Desktop
debugserver 100% 9505KB 949.7KB/s 00:10
~/Desktop master $ ls | grep debug
KCObjc4_debug
debugserver
~/Desktop master $ md5 debugserver
MD5 (debugserver) = b771aad8917de2ff41feb5acfe4a9b15
-
- 与Mac电脑中的debugserver对比发现,两个文件的hash值一致,说明手机中的 debugserver,就是Mac电脑中指定系统目录下的debugserver
2.3 USB启动debugserver
- iPhone中开启debugserver服务
- Mac电脑中的lldb连接手机上的debugserver,需要配置IP和端口号
- 在手机中,查看debugserver命令
Holothurian6P:~ root# /Developer/usr/bin/debugserver
debugserver-@(#)PROGRAM:LLDB PROJECT:lldb-900.3.87
for arm64.
Usage:
debugserver host:port [program-name program-arg1 program-arg2 ...]
debugserver /path/file [program-name program-arg1 program-arg2 ...]
debugserver host:port --attach=<pid>
debugserver /path/file --attach=<pid>
debugserver host:port --attach=<process_name>
debugserver /path/file --attach=<process_name>
-
- debugserver 主机地址: 端口号 -a 应用程序
- 由于主机地址是当前手机,可以使用localhost代替
- 端口号: 启动server服务,开放端口,让远程的lldb通过server调试进程
- 使用手机上的debugserver,附加 WeChat应用, 找到WeChat进程
Holothurian6P:~ root# ps -e | grep WeChat
39568 ?? 0:00.00 /var/containers/Bundle/Application/0AE7CC54-E2BF-4CD0-A1F6-95EBB12285D0/WeChat.app/WeChat
39571 ttys001 0:00.00 grep WeChat
- 使用debugserver附加WeChat应用/ AlipayWallet应用,均失败.
- 最后附加我们自己的demo
ps -e | grep ASLRDemo
39553 ?? 0:01.12 /var/containers/Bundle/Application/198B2EE1-15CD-4181-ABB6-EF0210F161CC/ASLRDemo.app/ASLRDemo
39583 ttys001 0:00.00 grep ASLRDemo
Holothurian6P:~ root# /Developer/usr/bin/debugserver localhost:22 -a 39553
debugserver-@(#)PROGRAM:LLDB PROJECT:lldb-900.3.87
for arm64.
Attaching to process 39553...
Listening to port 22 for a connection from localhost...
Failed to get connection from a remote gdb process.
Exiting.
-
- 出现 Failed to get connection from a remote gdb process.
- 解决方案: 使用ldid对debugserver配置权限
- 将手机中debugserver拷贝到Mac电脑的目录下,导出debugserver的权限
$ ldid -e debugserver > debugserver.entitlements
$ ls | grep debugserver.entitlements
debugserver.entitlements
-
- 打开权限配置文档,发现用Xcode打不开
-
- 采用文本编辑打开,发现属性重复、于是删掉下边一组
- 再次打开,删除三项权限
seatbelt-profiles
com.apple.security.network.server
com.apple.security.network.client
-
- 添加四项权限
<key>task_for_pid-allow</key>
<true/>
<key>get-task-allow</key>
<true/>
<key>platform-application</key>
<true/>
<key>run-unsigned-code</key>
<true/>
-
- 修改后的debugserver.entitlements文件
-
- 导入权限文件到debugserver
ldid -Sdebugserver.entitlements debugserver
-
- 将修改后的debugserver拷贝到手机的 /usr/bin目录,拷贝后可全局使用
- 找到WeChat进程,使用debugserver,附加WeChat应用
ps -A | grep WeChat
39568 ?? 0:00.00 /var/containers/Bundle/Application/0AE7CC54-E2BF-4CD0-A1F6-95EBB12285D0/WeChat.app/WeChat
39613 ttys001 0:00.00 grep WeChat
Holothurian6P:/Developer/usr/bin root# debugserver localhost:22 -a 39568
debugserver-@(#)PROGRAM:LLDB PROJECT:lldb-900.3.87
for arm64.
Attaching to process 39568...
Listening to port 22 for a connection from localhost...
2.4 class-dump
- class-dump是一个命令行工具,最高版本为 class-dump 3.5(64bit),已经停止更新
- 查看class-dump的路径
which class-dump
/opt/MonkeyDev/bin/class-dump
-
- 在MonkeyDev中,class-dump的使用
- 搭建MonkeyDev项目
- 在Build Settings中,将MONKEYDEV_CLASS_DUMP默认为NO
- 将其修改为YES
- 编译项目,主工程下生成Headers目录,自动导出头文件
- 工程目录下不要包含中文,否则Headers目录以及头文件无法生成
- class-dump 手动使用
class-dump -S -s -H AlipayWallet -o ./Headers
2.5 lldb手动砸壳
- 逆向分析一个应用,第一步就是应用砸壳
2.5.1 获取一个未砸壳应用的MachO
- 查看MachO文件中的crypt信息
otool -l AlipayWallet | grep crypt
cryptoff 16384
cryptsize 2293760
cryptid 0
-
- cryptid: 为0表示应用已砸壳
- cryptoff:表示开始加密的偏移位置
- cryptsize:表示加密长度
- 将应用砸壳后,才能使用class-dump导出头文件
- 查看加壳的MachO文件
- USB连接手机设备,找到bili的沙盒路径
Holothurian6P:~ root# ps -e | grep bili
39665 ?? 0:00.00 /var/containers/Bundle/Application/DB8B3BA4-A718-4C67-9E0A-D55B87B7D57D/bili-universal.app/bili-universal
39684 ttys000 0:00.00 grep bili-universal
-
- 将bili-universal 拷贝到Mac电脑
scp root@192.168.124.12:/var/containers/Bundle/Application/DB8B3BA4-A718-4C67-9E0A-D55B87B7D57D/bili-universal.app/bili-universal ./bili
bili-universal 4% 12MB 2.2MB/s 01:48 ETA
-
- 查看MachO文件中的crypt加密信息
otool -l bili-universal | grep crypt
cryptoff 147456
cryptsize 3948544
cryptid 1
- 尝试不砸壳,只修改crypted,能否使用class-dump导出头文件
- 使用MachOView打开bili-universal
- 在Load Commands中,找到LC_EnCRYPTION_INFO_64,修改Crypt ID 为0
-
- 当前修改后Value为缓存数据,再次打开后Value为0
- 使用class-dump 导出头文件
class-dump -S -s -H bili-universal -o ./BiliBili
-
- 导出失败.不砸壳,仅修改cryptid,无法导出头文件,所以砸壳的关键,并不是cryptid这个标志符的值,而是将加密的代码段进行解密
2.5.2 终端lldb调试手机中App进程
-
- 砸壳的逻辑,从内存中,读取cryptoff位置到cryptsize长度的数据,然后将其覆盖原始MachO文件
- 使用Xcode打开工程,选择设备,附加bili-universal进程,此时Xcode---Debug---Attach to Process没有进程了
- 因为Xcode附加程序的本质是借助lldb控制台,那么可以直接通过终端附加的方式.此时采用另一种附加进程方式
- 手机端开启debugserver服务,
$ ps -A | grep bili
39501 ?? 0:00.00 /System/Library/PrivateFrameworks/Accessibility.framework/Frameworks/AccessibilityUI.framework/XPCServices/com.apple.accessibility.AccessibilityUIServer.xpc/com.apple.accessibility.AccessibilityUIServer
39724 ?? 0:00.00 /var/containers/Bundle/Application/DB8B3BA4-A718-4C67-9E0A-D55B87B7D57D/bili-universal.app/bili-universal
39768 ttys000 0:00.00 grep bili
Holothurian6P:/usr/bin root# debugserver localhost:22 -a 39724
debugserver-@(#)PROGRAM:LLDB PROJECT:lldb-900.3.87 for arm64.
Attaching to process 39724...
Listening to port 22 for a connection from localhost...
-
- 当处于监听状态时,那么需要电脑端操作端口并链接了,此时通过终端的lldb尝试连接
$ lldb
(lldb) process connect connect://localhost:22
error: Failed to connect port
(lldb)
-
- 此时发现端口错误,那么需要映射一个端口出来.
- 采用iproxy映射端口
- 由于iproxy属于 usbmuxd的,那么采用brew安装一下
$ brew install usbmuxd
Warning: Use libusbmuxd instead of deprecated usbmuxd
Warning: Use libusbmuxd instead of deprecated usbmuxd
Warning: libusbmuxd 2.0.2 is already installed, it's just not linked.
To link this version, run:
brew link libusbmuxd
-
- 此时发现,libusbmuxd已经被安装了、但是我们的iproxy却敲不出命令.
$ brew link libusbmuxd
Linking /usr/local/Cellar/libusbmuxd/2.0.2...
Error: Could not symlink include/usbmuxd-proto.h
/usr/local/include is not writable.
-
- 根据提示,得到本机已经装过了 libusbmuxd、但是直接使用iproxy命令却敲不出来.那么查看路径下的iproxy是否可用
$ /usr/local/Cellar/libusbmuxd/2.0.2/bin/iproxy
ERROR: Not enough parameters. Need at least one pair of ports.
Usage: iproxy [OPTIONS] LOCAL_PORT:DEVICE_PORT [LOCAL_PORT2:DEVICE_PORT2 ...]
Proxy that binds local TCP ports to be forwarded to the specified ports on a usbmux device.
OPTIONS:
-u, --udid UDID target specific device by UDID
-n, --network connect to network device
-l, --local connect to USB device (default)
-s, --source ADDR source address for listening socket (default 127.0.0.1)
-h, --help prints usage information
-d, --debug increase debug level
-v, --version prints version information
Homepage: <https://libimobiledevice.org>
Bug Reports: <https://github.com/libimobiledevice/libusbmuxd/issues>
-
- 明显能用,也就是没有配置环境变量的问题导致的
- 将 /usr/local/Cellar/libusbmuxd/2.0.2/bin/iproxy 下的iproxy拷贝到 /usr/local/bin/ 目录下并且附上执行权限.
- 另起一个终端,在~/.bash_profile 或 ~/.zshrc文件中添加别名
alias iproxy="/usr/local/bin/iproxy"
-
- 另起一个终端,执行端口映射
$ iproxy 12345 22
Creating listening port 12345 for device port 22
waiting for connection
New connection for 12345->22, fd = 5
waiting for connection
Requesting connecion to USB device handle 82 (serial: 8788523883636fff87c0fc6b0dc69c46ddd290ce), port 22
-
- 此时另起一个终端,开启lldb、建立连接
$ lldb
(lldb) process connect connect://localhost:12345
Process 39866 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
frame #0: 0x000000023b0d40f4 libsystem_kernel.dylib`mach_msg_trap + 8
libsystem_kernel.dylib`mach_msg_trap:
-> 0x23b0d40f4 <+8>: ret
libsystem_kernel.dylib`mach_msg_overwrite_trap:
0x23b0d40f8 <+0>: mov x16, #-0x20
0x23b0d40fc <+4>: svc #0x80
0x23b0d4100 <+8>: ret
Target 0: (bili-universal) stopped.
(lldb)
- 综上终端lldb调试手机进程流程为
2.5.3 使用终端lldb砸壳
- 在终端调试状态下,获取MachO的首地址,因为库文件太多,所以采用筛选方式
(lldb) image list | grep "bili-universal"
[ 0] 0E15EE04-A3E7-3B81-ABC9-5B7FB2DED041 0x000000010117c000 /var/containers/Bundle/Application/DB8B3BA4-A718-4C67-9E0A-D55B87B7D57D/bili-universal.app/bili-universal (0x000000010117c000)
-
- 此时拿到MachO首地址为 0x000000010117c000
- 从内存中,将加密部分的代码段,导出到bili-universal.bin文件.因为已经读取到内存中,相当于解密
(lldb) memory read --force --outfile ~/Downloads/bili-universal.bin --binary --count 3948544 0x000000010117c000+147456
3948544 bytes written to '/Users/chenxi/Downloads/bili-universal.bin'
(lldb)
-
- 代码段加密的开始位置: MachO首地址 + 加密偏移地址
- 将bili-universal.bin文件,写入到MachO文件中相同位置,相当于用解密后的数据,覆盖原始的加密数据
dd seek=147456 bs=1 conv=notrunc if=./bili-universal.bin of=bili-universal
3948544+0 records in
3948544+0 records out
3948544 bytes transferred in 20.302690 secs (194484 bytes/sec)
-
- seek: 从输出文件开头跳过x个块后再开始复制
- bs: 同时设置读入/输出的块大小为x个字节
- conv=notrunc:不截断输出文件
- if: 输入文件名,默认为标准输入.即指定源文件
- of: 输出文件名,默认为标准输出.即指定目的文件,原来的那个加密的MachO文件,
- 文件写入成功,将MachO文件的cryptid修改为 0,然后保存,再使用class-dump,成功导出头文件
class-dump -H -S ~/Desktop/bili-universal -o ./Bilibili
三、Tweak 修改系统行为
目标: 搭建Tweak插件,屏蔽应用的红点气泡
思路: 屏蔽应用的红点气泡,需要附加的应用是系统的桌面程序SpringBoard
3.1 获取SpringBoard头文件
- USB连接手机,找到SpringBoard进程(sshConnect -> ssh root@192.168.124.12)
$ sshConnect
Holothurian6P:~ root# ps -A | grep SpringBoard
37930 ?? 0:00.00 /System/Library/CoreServices/SpringBoard.app/SpringBoard
39957 ttys000 0:00.00 grep SpringBoard
- 将SpringBoard 拷贝到Mac电脑
scp -r root@192.168.124.12:/System/Library/CoreServices/SpringBoard.app/SpringBoard ~/Desktop
SpringBoard 100% 11MB 2.2MB/s 00:05
- 查看MachO文件中的crypt信息
otool -l SpringBoard | grep crypt
-
- MachO中找不到加密信息,说明SpringBoard本来就没有加壳
- 使用class-dump导出头文件
class-dump -H -S -s SpringBoard -o ./SpringHeaders
2023-04-13 22:27:07.353 class-dump[57081:1071140] Unknown load command: 0x00000032
-
- 虽然有略微报错,但是成功导出对应的头文件
3.2 动态调试SpringBoard
- 我们可以使用的动态调试工具有三种
- Reveal
- Cycript
- lldb
- 使用Reveal无法动态调试,因为在手机设置页的Reveal选项中,并没有SpringBoard应用
- 使用Cycript,可以成功附加SpringBoard进程.因为视图不可见,可能需要盲猜
- 使用Xcode的lldb附加SpringBoard进程,通过Debug View 找到红点对象. 然而目前Xcode的Attach to Process一直没反应,因此放弃.(本质上,这一步我们需要通过可视化视图找到SBIconParallaxBadgeView视图)
- 使用Cycript环境来操作
- 假如当前没有角标、那么自己运行一个Demo,写上角标999
-
- 当前界面角标
-
- 进入cy环境、导入自定义cy脚本
- 猜测角标与badge有关,当前界面有三个角标,查看是否有三个视图对象
$ sshConnect
Holothurian6P:~ root# cycript -p SpringBoard
cy# @import com.Holothurian.current_vc
{}
cy# APPID
@"com.apple.springboard"
cy# APPPATH
@"/System/Library/CoreServices/SpringBoard.app"
cy# HSCurrentVC()
#"<SBHomeScreenViewController: 0x14bdb93d0>"
cy# #0x14bdb93d0.view.recursiveDescription().toString()
"<SBHomeScreenView: 0x14bda9940; frame = (0 0; 414 736); autoresize = W+H; layer = <CALayer: 0x283ee2160>>\n | <SBStatusBarLegibilityView: 0x14bdbd6b0; frame = (0 0; 414 736); layer = <CALayer: 0x283ee21a0>>\n | | <SBStatusBarLegibilityGradientView: 0x14bdf9ea0; frame = (0 0; 414 736); layer = <CAGradientLayer: 0x283ef2560>>\n | | <SBStatusBarLegibilityGradientView: 0x14bda7670; frame = (0 0; 414 100); layer = <CAGradientLayer: 0x283ef3940>>\n | <SBIconContentView: 0x14bd73490; frame = (0 0; 414 736); layer = <CALayer: 0x283e463a0>>\n | | <SBFolderContainerView: 0x1501599e0; frame = (0 0; 414 736); layer = <CALayer: 0x283e220c0>>\n | | | <SBRootFolderView: 0x14c08d400; folder: <SBRootFolderWithDock: 0x280f29720, (null)>; editing: NO; scrolling: NO; orientation: UIInterfaceOrientationPortrait; currentPageIndex: 0; iconListViewCount: 4; statusBarHeight: 20.000000; isScalingViewBorrowed: NO; minusPageCount: 1; dockOffscreenProgressSettingClients: NSHashTable {\n}\n; pageState: icon>\n | | | | <UIView: 0x14d74d570; frame = (0 0; 414 736); layer = <CALayer: 0x283ecf2e0>>\n | | | | | <SBDockView: 0x14d76b4c0; frame = (0 640; 414 96); autoresizesSubviews = NO; layer = <CALayer: 0x283e55460>>\n | | | | | | <UIView: 0x150071f00; frame = (-23 4; 460 173.778); layer = <CALayer: 0x283e02240>>\n | | | | | | <SBRootFolderDockIconListView 0x150034ff0: frame = {{0, 4}, {414, 92}}; Model = <SBIconListModel: 0x281dee4e0; 4 icons; folder = <SBRootFolderWithDock: 0x280f29720, (null)>>>\n | | | | | | | <SBIconView: 0x1501033c0; frame: {{35, 16}, {60, 60}}; icon: <SBApplicationIcon: 0x280122a30; nodeID: com.apple.MobileSMS; bundleID: com.apple.MobileSMS>; location: dock; contentType: no label; isLabelHidden: YES; isLabelAccessoryViewHidden: YES>\n | | | | | | | | <SBIconImageView: 0x150103e20; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x280122a30; nodeID: com.apple.MobileSMS; bundleID: com.apple.MobileSMS>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x150105270; frame: {{130, 16}, {60, 60}}; icon: <SBApplicationIcon: 0x280122fd0; nodeID: com.apple.mobilephone; bundleID: com.apple.mobilephone>; location: dock; contentType: no label; isLabelHidden: YES; isLabelAccessoryViewHidden: YES>\n | | | | | | | | <SBIconImageView: 0x150105df0; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x280122fd0; nodeID: com.apple.mobilephone; bundleID: com.apple.mobilephone>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x1500ebdc0; frame: {{224, 16}, {60, 60}}; icon: <SBApplicationIcon: 0x280120000; nodeID: com.alipay.iphoneclient; bundleID: com.alipay.iphoneclient>; location: dock; contentType: no label; isLabelHidden: YES; isLabelAccessoryViewHidden: YES>\n | | | | | | | | <SBIconImageView: 0x1500ec820; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x280120000; nodeID: com.alipay.iphoneclient; bundleID: com.alipay.iphoneclient>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x1500ede80; frame: {{319, 16}, {60, 60}}; icon: <SBApplicationIcon: 0x28011ca50; nodeID: com.apple.mobilesafari; bundleID: com.apple.mobilesafari>; location: dock; contentType: no label; isLabelHidden: YES; isLabelAccessoryViewHidden: YES>\n | | | | | | | | <SBIconImageView: 0x1500ee8e0; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x28011ca50; nodeID: com.apple.mobilesafari; bundleID: com.apple.mobilesafari>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | <SBHighlightView: 0x15006f460; frame = (0 3; 414 2.5); layer = <CALayer: 0x283e01480>>\n | | | | | | | <UIImageView: 0x15006fdc0; frame = (0 0; 414 2.5); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283e556a0>>\n | | | | | <SBIconScrollView: 0x14c1f6400; baseClass = UIScrollView; frame = (0 20; 414 604); autoresize = W+H; gestureRecognizers = <NSArray: 0x28322a8b0>; animations = { <_UIParallaxMotionEffect: 0x281dde940>=<CAAnimationGroup: 0x283fc4f20>; }; layer = <CALayer: 0x283ecf300>; contentOffset: {414, 0}; contentSize: {2070, 604}; adjustedContentInset: {0, 0, 0, 0}>\n | | | | | | <_SBRootFolderLayoutWrapperView: 0x15007a9d0; frame: {{0, -20}, {414, 736}}; statusBarHeightAdjustment: 0.000000; headerOffset: 0.000000; extendedSize: {0, 0}; wrappedView: <UIView: 0x15007ade0; frame = (0 0; 414 736); autoresize = W+H; layer = <CALayer: 0x283e13460>>>\n | | | | | | | <UIView: 0x15007ade0; frame = (0 0; 414 736); autoresize = W+H; layer = <CALayer: 0x283e13460>>\n | | | | | | | | <UILayoutContainerView: 0x150170e50; frame = (0 0; 414 736); autoresize = W+H; gestureRecognizers = <NSArray: 0x283182190>; layer = <CALayer: 0x283e63660>>\n | | | | | | | | | <UINavigationTransitionView: 0x15015fa80; frame = (0 0; 414 736); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x283e6eb60>>\n | | | | | | | | | | <UIViewControllerWrapperView: 0x150101750; frame = (0 0; 414 736); autoresize = W+H; layer = <CALayer: 0x283f8c880>>\n | | | | | | | | | | | <UIView: 0x15015dc60; frame = (0 0; 414 736); autoresize = W+H; layer = <CALayer: 0x283e63f60>>\n | | | | | | | | | | | | <UIView: 0x15007afc0; frame = (8 0; 398 736); autoresize = W+H; layer = <CALayer: 0x283e126a0>>\n | | | | | | | | | | | | | <UIScrollView: 0x14c3d4a00; frame = (0 0; 398 736); autoresize = W+H; gestureRecognizers = <NSArray: 0x2831ec480>; layer = <CALayer: 0x283e5d760>; contentOffset: {0, 0}; contentSize: {398, 673.66666666666663}; adjustedContentInset: {0, 0, 0, 0}>\n | | | | | | | | | | | | | | <UIStackView: 0x14d74c8d0; frame = (0 0; 398 673.667); layer = <CATransformLayer: 0x283e5ff20>>\n | | | | | | | | | | | | | | | <WGWidgetListFooterView: 0x150170c30; frame = (0 444; 398 229.667); layer = <CALayer: 0x283e60e80>>\n | | | | | | | | | | | | | | | | <WGShortLookStyleButton: 0x150171050; baseClass = UIControl; frame = (175 35; 48 48); layer = <CALayer: 0x283e60b60>>\n | | | | | | | | | | | | | | | | | <MTMaterialView: 0x15015d340; frame = (0 0; 48 48); userInteractionEnabled = NO; layer = <CALayer: 0x283e62480>>\n | | | | | | | | | | | | | | | | | | <UIView: 0x14bdac790; frame = (0 0; 48 48); autoresize = W+H; layer = <CALayer: 0x283e62540>>\n | | | | | | | | | | | | | | | | | | <UIView: 0x14bdf5320; frame = (0 0; 48 48); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x283e62880>>\n | | | | | | | | | | | | | | | | | <UILabel: 0x15015a9f0; frame = (8 17; 32 14.3333); text = '\u7f16\u8f91'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x281dea620>>\n | | | | | | | | | | | | | | | | | | <_UILabelContentLayer: 0x283f94260> (layer)\n | | | | | | | | | | | | | | | | <WGNewWidgetsButton: 0x1501c04a0; baseClass = UIButton; frame = (151 97.8597; 96 25.3333); text = '3 \u4e2a\u65b0\u5c0f\u7ec4\u4ef6\u53ef\u7528'; opaque = NO; layer = <CALayer: 0x28389b940>>\n | | | | | | | | | | | | | | | | | <UIButtonLabel: 0x1500b65f0; frame = (0 0; 0 0); hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x281e54a50>>\n | | | | | | | | | | | | | | | | | <UIButton: 0x150036250; frame = (0 0; 96 25.3333); opaque = NO; layer = <CALayer: 0x28389b8a0>>\n | | | | | | | | | | | | | | | | | | <UIButtonLabel: 0x1500ddfb0; frame = (0.333333 6; 95.3333 13.3333); text = '\ufffc \u4e2a\u65b0\u5c0f\u7ec4\u4ef6\u53ef\u7528'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x281e54af0>>\n | | | | | | | | | | | | | | | | | | | <_UILabelContentLayer: 0x2838a47c0> (layer)\n | | | | | | | | | | | | | | | | | <UIButton: 0x1502627f0; frame = (0 0; 96 25.3333); opaque = NO; layer = <CALayer: 0x28389b7a0>>\n | | | | | | | | | | | | | | | | | | <UIButtonLabel: 0x150262b10; frame = (0.333333 6; 95.3333 13.3333); text = '\ufffc \u4e2a\u65b0\u5c0f\u7ec4\u4ef6\u53ef\u7528'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x281e54be0>>\n | | | | | | | | | | | | | | | | | | | <_UILabelContentLayer: 0x2838a48a0> (layer)\n | | | | | | | | | | | | | | | | <WGWidgetAttributionView: 0x14cbfe600; baseClass = UITextView; frame = (83.3333 185.86; 231.667 29.3333); text = '\u5929\u6c14\u4fe1\u606f\u6765\u6e90\uff1aThe\xa0Weather\xa0Channe...'; clipsToBounds = YES; opaque = NO; gestureRecognizers = <NSArray: 0x282de1c20>; layer = <CALayer: 0x28389ebc0>; contentOffset: {0, 0}; contentSize: {231.66666666666666, 30}; adjustedContentInset: {0, 0, 0, 0}>\n | | | | | | | | | | | | | | | | | <<_UITextContainerView: 0x1502703c0; frame = (0 0; 231.667 30); layer = <__UITextTiledLayer: 0x281b6b120>> minSize = {0, 0}, maxSize = {1.7976931348623157e+308, 1.7976931348623157e+308}, textContainer = <NSTextContainer: 0x280cb7cc0 size = (231.666672,340282346638528859811704183484516925440.000000); widthTracksTextView = YES; heightTracksTextView = NO>; exclusionPaths = 0x283c340f0; lineBreakMode = 0>\n | | | | | | | | | | | | | | | | | | <__UITileLayer: 0x282d8dcb0> (layer)\n | | | | | | | | | | | | | | | | | <UIImageView: 0x14d7f6330; frame = (-41.3333 24; 36 2.33333); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x2838fe4c0>>\n | | | | | | | | | | | | | | | | | <UIImageView: 0x14d7f6560; frame = (226.333 -31; 2.33333 28); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x2838fe480>>\n | | | | | | | | | | | | | | | <WGWidgetPlatterView: 0x1501a0990; frame = (0 0; 398 140); layer = <CALayer: 0x2838b9e80>>\n | | | | | | | | | | | | | | | | <MTMaterialView: 0x1502851f0; frame = (0 0; 398 140); clipsToBounds = YES; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x2838a86e0>>\n | | | | | | | | | | | | | | | | | <UIView: 0x150285620; frame = (0 0; 398 140); autoresize = W+H; layer = <CALayer: 0x2838a8700>>\n | | | | | | | | | | | | | | | | <UIView: 0x1501a1400; frame = (0 0; 398 35.3333); layer = <CALayer: 0x2838ba340>>\n | | | | | | | | | | | | | | | | | <MTMaterialView: 0x150288880; frame = (0 0; 398 35.3333); userInteractionEnabled = NO; layer = <CALayer: 0x2838a8a60>>\n | | | | | | | | | | | | | | | | | <PLPlatterHeaderContentView: 0x1501a17e0; frame = (0 0; 398 35.3333); layer = <CALayer: 0x2838ba380>>\n | | | | | | | | | | | | | | | | | | <UIButton: 0x150280ce0; frame = (360 4; 38 27); opaque = NO; layer = <CALayer: 0x2838aeea0>>\n | | | | | | | | | | | | | | | | | | | <UIButtonLabel: 0x150281600; frame = (0 0; 0 0); hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x281e4f890>>\n | | | | | | | | | | | | | | | | | | <UILabel: 0x150282300; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x281e4fac0>>\n | | | | | | | | | | | | | | | | <MTMaterialView: 0x14be7dfc0; frame = (0 35.3333; 398 104.667); autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x2838a8980>>\n | | | | | | | | | | | | | | | | <PLPlatterCustomContentView: 0x150000000; frame = (0 35.3333; 398 104.667); autoresize = W+H; layer = <CALayer: 0x2838a89e0>>\n | | | | | | | | | | | | | | | <WGWidgetPlatterView: 0x150290710; frame = (0 148; 398 140); layer = <CALayer: 0x2838a70c0>>\n | | | | | | | | | | | | | | | | <MTMaterialView: 0x1502918d0; frame = (0 0; 398 140); clipsToBounds = YES; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x2838a73c0>>\n | | | | | | | | | | | | | | | | | <UIView: 0x150291b00; frame = (0 0; 398 140); autoresize = W+H; layer = <CALayer: 0x2838a73e0>>\n | | | | | | | | | | | | | | | | <UIView: 0x150290b80; frame = (0 0; 398 35.3333); layer = <CALayer: 0x2838a70e0>>\n | | | | | | | | | | | | | | | | | <MTMaterialView: 0x150292500; frame = (0 0; 398 35.3333); userInteractionEnabled = NO; layer = <CALayer: 0x2838a7660>>\n | | | | | | | | | | | | | | | | | <PLPlatterHeaderContentView: 0x150290d60; frame = (0 0; 398 35.3333); layer = <CALayer: 0x2838a7140>>\n | | | | | | | | | | | | | | | | | | <UIButton: 0x150290fc0; frame = (360 4; 38 27); opaque = NO; layer = <CALayer: 0x2838a71a0>>\n | | | | | | | | | | | | | | | | | | | <UIButtonLabel: 0x1502912e0; frame = (0 0; 0 0); hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x281e45fe0>>\n | | | | | | | | | | | | | | | | | | <UILabel: 0x1502915e0; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x281e46210>>\n | | | | | | | | | | | | | | | | <MTMaterialView: 0x1502920e0; frame = (0 35.3333; 398 104.667); autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x2838a7560>>\n | | | | | | | | | | | | | | | | <PLPlatterCustomContentView: 0x150292310; frame = (0 35.3333; 398 104.667); autoresize = W+H; layer = <CALayer: 0x2838a7540>>\n | | | | | | | | | | | | | | | <WGWidgetPlatterView: 0x150296210; frame = (0 296; 398 140); layer = <CALayer: 0x2838a27c0>>\n | | | | | | | | | | | | | | | | <MTMaterialView: 0x1502971d0; frame = (0 0; 398 140); clipsToBounds = YES; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x2838a2ac0>>\n | | | | | | | | | | | | | | | | | <UIView: 0x150297400; frame = (0 0; 398 140); autoresize = W+H; layer = <CALayer: 0x2838a2ae0>>\n | | | | | | | | | | | | | | | | <UIView: 0x150296480; frame = (0 0; 398 35.3333); layer = <CALayer: 0x2838a27e0>>\n | | | | | | | | | | | | | | | | | <MTMaterialView: 0x1501a2ca0; frame = (0 0; 398 35.3333); userInteractionEnabled = NO; layer = <CALayer: 0x28389d420>>\n | | | | | | | | | | | | | | | | | <PLPlatterHeaderContentView: 0x150296660; frame = (0 0; 398 35.3333); layer = <CALayer: 0x2838a2840>>\n | | | | | | | | | | | | | | | | | | <UIButton: 0x1502968c0; frame = (360 4; 38 27); opaque = NO; layer = <CALayer: 0x2838a28a0>>\n | | | | | | | | | | | | | | | | | | | <UIButtonLabel: 0x150296be0; frame = (0 0; 0 0); hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x281e475c0>>\n | | | | | | | | | | | | | | | | | | <UILabel: 0x150296ee0; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x281e477f0>>\n | | | | | | | | | | | | | | | | <MTMaterialView: 0x14bd61ce0; frame = (0 35.3333; 398 104.667); autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x28389d360>>\n | | | | | | | | | | | | | | | | <PLPlatterCustomContentView: 0x14bd002b0; frame = (0 35.3333; 398 104.667); autoresize = W+H; layer = <CALayer: 0x28389d3c0>>\n | | | | | | | | | <SPUINavigationBar: 0x15015b380; baseClass = UINavigationBar; frame = (0 24; 414 46.3333); opaque = NO; autoresize = W; tintColor = UIExtendedGrayColorSpace 1 0.6; layer = <CALayer: 0x283e63e20>>\n | | | | | | | | | | <_UIBarBackground: 0x15015b650; frame = (0 0; 414 46.3333); userInteractionEnabled = NO; layer = <CALayer: 0x283e63e80>>\n | | | | | | | | | | | <SPUIHeaderBlurView: 0x15015f1f0; baseClass = UIVisualEffectView; frame = (0 0; 414 46.3333); alpha = 0; layer = <CALayer: 0x283e64960>>\n | | | | | | | | | | | | <_UIVisualEffectBackdropView: 0x15015f670; frame = (0 0; 414 46.3333); autoresize = W+H; userInteractionEnabled = NO; layer = <UICABackdropLayer: 0x283e65b80>>\n | | | | | | | | | | | | <_UIVisualEffectContentView: 0x15015f880; frame = (0 0; 414 46.3333); clipsToBounds = YES; alpha = 0.35; autoresize = W+H; layer = <CALayer: 0x283e69fc0>>\n | | | | | | | | | | <_UINavigationBarLargeTitleView: 0x15015c8c0; frame = (0 0; 0 0); clipsToBounds = YES; hidden = YES; layer = <CALayer: 0x283e62cc0>>\n | | | | | | | | | | | <UILabel: 0x15015e190; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x281df85a0>>\n | | | | | | | | | | <_UINavigationBarContentView: 0x15015bf60; frame = (0 0; 414 44); alpha = 0; layer = <CALayer: 0x283e63f20>>\n | | | | | | | | | | <SPUISearchHeader: 0x15015c380; frame = (0 0; 414 46.3333); layer = <CALayer: 0x283e75cc0>>\n | | | | | | | | | | | <UIView: 0x150157bd0; frame = (8 0; 398 46.3333); layer = <CALayer: 0x283e75c00>>\n | | | | | | | | | | | | <SPUITextField: 0x150157db0; baseClass = UIControl; frame = (0 4; 398 34.3333); text = ''; tintColor = UIExtendedGrayColorSpace 1 1; gestureRecognizers = <NSArray: 0x283191cb0>; layer = <CALayer: 0x283e76da0>>\n | | | | | | | | | | | | | <SPUIHeaderBlurView: 0x150081570; baseClass = UIVisualEffectView; frame = (0 0; 398 34.3333); userInteractionEnabled = NO; tintColor = UIExtendedSRGBColorSpace 0.35936 0.530879 0.764062 1; layer = <CALayer: 0x283e16d60>>\n | | | | | | | | | | | | | | <_UIVisualEffectBackdropView: 0x1500817d0; frame = (0 0; 398 34.3333); autoresize = W+H; userInteractionEnabled = NO; layer = <UICABackdropLayer: 0x283e16aa0>>\n | | | | | | | | | | | | | | <_UIVisualEffectContentView: 0x1500819e0; frame = (0 0; 398 34.3333); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x283e16dc0>>\n | | | | | | | | | | | | | <UIView: 0x150082770; frame = (0 0; 398 34.3333); userInteractionEnabled = NO; layer = <CALayer: 0x283e17400>>\n | | | | | | | | | | | | | <UIScrollView: 0x14c0f6a00; frame = (29 0; 342.333 34.3333); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x28318c630>; layer = <CALayer: 0x283e76d20>; contentOffset: {0, 0}; contentSize: {0, 0}; adjustedContentInset: {0, 0, 0, 0}>\n | | | | | | | | | | | | | | <_MFAtomFieldEditor: 0x14c8a4600; baseClass = UITextView; frame = (0 4.66667; 342.333 25.3333); text = ''; gestureRecognizers = <NSArray: 0x2831901b0>; layer = <CALayer: 0x283e14d00>; contentOffset: {0, 0}; contentSize: {342.33333333333331, 25.333333333333332}; adjustedContentInset: {0, 0, 0, 0}>\n | | | | | | | | | | | | | | | <<_UITextContainerView: 0x15007f760; frame = (0 0; 342.333 25.3333); layer = <__UITextTiledLayer: 0x281afaa60>> minSize = {0, 25.333333333333332}, maxSize = {342.33333333333331, 25.333333333333332}, textContainer = <NSTextContainer: 0x280c0abe0 size = (342.333344,19.333334); widthTracksTextView = YES; heightTracksTextView = YES>; exclusionPaths = 0x283c340f0; lineBreakMode = 0>\n | | | | | | | | | | | | | | | | <__UITileLayer: 0x2831a4180> (layer)\n | | | | | | | | | | | | | | | <UIImageView: 0x150122890; frame = (3.66667 20; 335.667 2.33333); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x283fca780>>\n | | | | | | | | | | | | | | | <UIImageView: 0x150122ac0; frame = (337 -11.3333; 2.33333 36); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x283fca800>>\n | | | | | | | | | | | | | <UILabel: 0x14d78c0c0; frame = (30 7.66667; 336 19.3333); text = '\u641c\u7d22'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x281dfa6c0>>\n | | | | | | | | | | | | | | <_UILabelContentLayer: 0x283e3c2e0> (layer)\n | | | | | | | | | | | | | <UIImageView: 0x150082a70; frame = (10 10.3333; 14 14); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283e15ec0>>\n | | | | | | | | | | | | | <UIButton: 0x150158310; frame = (371.333 6.33333; 16 22); hidden = YES; opaque = NO; layer = <CALayer: 0x283e20700>>\n | | | | | | | | | | | | | | <UIImageView: 0x14d78c580; frame = (0 1.33333; 16 18.6667); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283e21dc0>>\n | | | | | | | | | | | | <UIButton: 0x1501591a0; frame = (409 4.66667; 35 33); alpha = 0; opaque = NO; layer = <CALayer: 0x283e21360>>\n | | | | | | | | | | | | | <UIButtonLabel: 0x1501594c0; frame = (0.333333 6.33333; 34.6667 20.3333); text = '\u53d6\u6d88'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x281df9ae0>>\n | | | | | | | | | | | | | | <_UILabelContentLayer: 0x283e220a0> (layer)\n | | | | | | | | | | <_UINavigationBarModernPromptView: 0x15015ce00; frame = (0 0; 0 0); alpha = 0; hidden = YES; layer = <CALayer: 0x283e63400>>\n | | | | | | | | | | <UIView: 0x15015e480; frame = (0 46; 414 0.333333); alpha = 0; layer = <CALayer: 0x283e659e0>>\n | | | | | | <SBRootIconListView 0x150087a50: frame = {{414, 0}, {414, 604}}; Model = <SBIconListModel: 0x281dedbd0; 18 icons; folder = <SBRootFolderWithDock: 0x280f29720, (null)>>>\n | | | | | | | <SBIconView: 0x15006d8d0; frame: {{35, 18}, {60, 74}}; icon: <SBCalendarApplicationIcon: 0x280201100; nodeID: com.apple.mobilecal; bundleID: com.apple.mobilecal>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1500f14c0; baseClass = _UILegibilityView; frame = (15.6667 61.3333; 29 22); userInteractionEnabled = NO; layer = <CALayer: 0x283f98e40>>\n | | | | | | | | | <_UILegibilityImageView: 0x15010a3b0; frame = (-12 -12; 53 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f57c00>>\n | | | | | | | | | <_UILegibilityImageView: 0x15010a180; frame = (0 0; 29 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f57ce0>>\n | | | | | | | | <SBIconImageView: 0x15006df20; frame: {{0, 0}, {60, 60}}; icon: <SBCalendarApplicationIcon: 0x280201100; nodeID: com.apple.mobilecal; bundleID: com.apple.mobilecal>; brightness: 1.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x15006f040; frame: {{129.66666666666666, 18}, {60, 74}}; icon: <SBApplicationIcon: 0x28011cb40; nodeID: com.apple.mobileslideshow; bundleID: com.apple.mobileslideshow>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1500aa860; baseClass = _UILegibilityView; frame = (15.6667 61.3333; 29 22); userInteractionEnabled = NO; layer = <CALayer: 0x283f990c0>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500f1a30; frame = (-12 -12; 53 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f99140>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500f1230; frame = (0 0; 29 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f98dc0>>\n | | | | | | | | <SBIconImageView: 0x15006f690; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x28011cb40; nodeID: com.apple.mobileslideshow; bundleID: com.apple.mobileslideshow>; brightness: 1.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x14d74dd10; frame: {{224.33333333333334, 18}, {60, 74}}; icon: <SBApplicationIcon: 0x280120780; nodeID: com.apple.camera; bundleID: com.apple.camera>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x15010a9a0; baseClass = _UILegibilityView; frame = (15.6667 61.3333; 29 22); userInteractionEnabled = NO; layer = <CALayer: 0x283f97260>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500f1da0; frame = (-12 -12; 53 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f993e0>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500f2a10; frame = (0 0; 29 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f993a0>>\n | | | | | | | | <SBIconImageView: 0x14bedc330; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x280120780; nodeID: com.apple.camera; bundleID: com.apple.camera>; brightness: 1.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x15006adf0; frame: {{319, 18}, {60, 74}}; icon: <SBWeatherApplicationIcon: 0x28012bde0; nodeID: com.apple.weather; bundleID: com.apple.weather>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1500aa510; baseClass = _UILegibilityView; frame = (15.6667 61.3333; 29 22); userInteractionEnabled = NO; layer = <CALayer: 0x283f99480>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500f2d60; frame = (-12 -12; 53 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f99500>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500f1fd0; frame = (0 0; 29 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f994a0>>\n | | | | | | | | <SBIconImageView: 0x15006cc70; frame: {{0, 0}, {60, 60}}; icon: <SBWeatherApplicationIcon: 0x28012bde0; nodeID: com.apple.weather; bundleID: com.apple.weather>; brightness: 1.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x1500abf70; frame: {{35, 118}, {60, 74}}; icon: <SBClockApplicationIcon: 0x28012bc00; nodeID: com.apple.mobiletimer; bundleID: com.apple.mobiletimer>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1500ac6b0; baseClass = _UILegibilityView; frame = (15.6667 61.3333; 29 22); userInteractionEnabled = NO; layer = <CALayer: 0x283f995a0>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500f3a90; frame = (-12 -12; 53 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f99620>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500f3860; frame = (0 0; 29 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f995c0>>\n | | | | | | | | <SBClockApplicationIconImageView: 0x1500acee0; frame: {{0, 0}, {60, 60}}; icon: <SBClockApplicationIcon: 0x28012bc00; nodeID: com.apple.mobiletimer; bundleID: com.apple.mobiletimer>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | | | <CALayer: 0x283f11600> (layer)\n | | | | | | | | | <CALayer: 0x283f13f40> (layer)\n | | | | | | | | | <CALayer: 0x283f13ea0> (layer)\n | | | | | | | | | <CALayer: 0x283f13e60> (layer)\n | | | | | | | | | <CALayer: 0x283f13000> (layer)\n | | | | | | | <SBIconView: 0x15012d870; frame: {{129.66666666666666, 118}, {60, 74}}; icon: <SBApplicationIcon: 0x2801230c0; nodeID: com.apple.Maps; bundleID: com.apple.Maps>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x15012d580; baseClass = _UILegibilityView; frame = (15.6667 61.3333; 29 22); userInteractionEnabled = NO; layer = <CALayer: 0x283f96e00>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500f3ef0; frame = (-12 -12; 53 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f99ce0>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500f3cc0; frame = (0 0; 29 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f99c80>>\n | | | | | | | | <SBIconImageView: 0x15012df30; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x2801230c0; nodeID: com.apple.Maps; bundleID: com.apple.Maps>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x15012e4b0; frame: {{224.33333333333334, 118}, {60, 74}}; icon: <SBApplicationIcon: 0x28011c690; nodeID: com.apple.Passbook; bundleID: com.apple.Passbook>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1500f4120; baseClass = _UILegibilityView; frame = (15.6667 61.3333; 29 22); userInteractionEnabled = NO; layer = <CALayer: 0x283f99d80>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500f47b0; frame = (-12 -12; 53 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f99e00>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500f4580; frame = (0 0; 29 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f99da0>>\n | | | | | | | | <SBIconImageView: 0x15012e9f0; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x28011c690; nodeID: com.apple.Passbook; bundleID: com.apple.Passbook>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x1500a12e0; frame: {{319, 118}, {60, 74}}; icon: <SBApplicationIcon: 0x28011c5a0; nodeID: com.apple.Home; bundleID: com.apple.Home>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1500a10b0; baseClass = _UILegibilityView; frame = (15.6667 61.3333; 29 22); userInteractionEnabled = NO; layer = <CALayer: 0x283f99ea0>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500f4d30; frame = (-12 -12; 53 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f99f40>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500f4b00; frame = (0 0; 29 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f99f00>>\n | | | | | | | | <SBIconImageView: 0x1500a1b10; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x28011c5a0; nodeID: com.apple.Home; bundleID: com.apple.Home>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBFolderIconView: 0x15012fad0; frame: {{35, 218}, {60, 74}}; icon: <SBFolderIcon: 0x28072eae0; nodeID: folder:55FF7530-0F63-430B-A178-76E6E632AB24> Folder: <SBFolder: 0x2810f6c00, \u9644\u52a0\u7a0b\u5e8f>; location: home; contentType: default> Folder: <SBFolder: 0x2810f6c00, \u9644\u52a0\u7a0b\u5e8f>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1500f5210; baseClass = _UILegibilityView; frame = (3.66667 61.3333; 54 22); userInteractionEnabled = NO; layer = <CALayer: 0x283f99fe0>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500f5b10; frame = (-12 -12; 78 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f9a060>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500f58e0; frame = (0 0; 54 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f9a000>>\n | | | | | | | | <SBFolderIconImageView: 0x1501307f0; frame: {{0, 0}, {60, 60}}; icon: <SBFolderIcon: 0x28072eae0; nodeID: folder:55FF7530-0F63-430B-A178-76E6E632AB24> Folder: <SBFolder: 0x2810f6c00, \u9644\u52a0\u7a0b\u5e8f>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO; animating: NO>\n | | | | | | | | | <SBFolderIconBackgroundView: 0x150130c90; frame = (0 0; 60 60); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x283f2c160>>\n | | | | | | | | | <UIView: 0x14be9b7d0; frame = (0 0; 60 60); clipsToBounds = YES; layer = <CALayer: 0x283f20b20>>\n | | | | | | | | | <UIView: 0x15012fde0; frame = (7.66667 7.66667; 45 45); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x283f2ec20>>\n | | | | | | | | | | <_SBIconGridWrapperView: 0x15012c0e0; baseClass = UIImageView; frame = (0 0; 45 45); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f2ede0>>\n | | | | | | | | | | <_SBIconGridWrapperView: 0x1500a1d40; baseClass = UIImageView; frame = (51 0; 45 45); userInteractionEnabled = NO; layer = <CALayer: 0x283f20ac0>>\n | | | | | | | <SBIconView: 0x150130ec0; frame: {{129.66666666666666, 218}, {60, 74}}; icon: <SBApplicationIcon: 0x28012b570; nodeID: com.apple.mobilenotes; bundleID: com.apple.mobilenotes>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1500a3ad0; baseClass = _UILegibilityView; frame = (9.66667 61.3333; 41 22); userInteractionEnabled = NO; layer = <CALayer: 0x283f9a100>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500f5f70; frame = (-12 -12; 65 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f9a780>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500f5d40; frame = (0 0; 41 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f9a720>>\n | | | | | | | | <SBIconImageView: 0x1500ab9a0; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x28012b570; nodeID: com.apple.mobilenotes; bundleID: com.apple.mobilenotes>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x150131930; frame: {{224.33333333333334, 218}, {60, 74}}; icon: <SBApplicationIcon: 0x280121fe0; nodeID: com.apple.reminders; bundleID: com.apple.reminders>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1500a4cf0; baseClass = _UILegibilityView; frame = (3.66667 61.3333; 54 22); userInteractionEnabled = NO; layer = <CALayer: 0x283f9a820>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500f61a0; frame = (-12 -12; 78 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f9a8a0>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500f3380; frame = (0 0; 54 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f9a840>>\n | | | | | | | | <SBIconImageView: 0x150132280; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x280121fe0; nodeID: com.apple.reminders; bundleID: com.apple.reminders>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x150133bd0; frame: {{319, 218}, {60, 74}}; icon: <SBApplicationIcon: 0x280122940; nodeID: com.apple.stocks; bundleID: com.apple.stocks>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1501341c0; baseClass = _UILegibilityView; frame = (15.6667 61.3333; 29 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fa0200>>\n | | | | | | | | | <_UILegibilityImageView: 0x15010c160; frame = (-12 -12; 53 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa02a0>>\n | | | | | | | | | <_UILegibilityImageView: 0x15010bf30; frame = (0 0; 29 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa0260>>\n | | | | | | | | <SBIconImageView: 0x1501346d0; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x280122940; nodeID: com.apple.stocks; bundleID: com.apple.stocks>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBFolderIconView: 0x1500a6b40; frame: {{35, 318}, {60, 74}}; icon: <SBFolderIcon: 0x28072ebc0; nodeID: folder:1B9DD408-631A-4DD2-B0D1-7A839FE697B0> Folder: <SBFolder: 0x2810f6c80, \u751f\u6d3b\u65b9\u5f0f>; location: home; contentType: default> Folder: <SBFolder: 0x2810f6c80, \u751f\u6d3b\u65b9\u5f0f>\n | | | | | | | | <SBIconLegibilityLabelView: 0x15010c390; baseClass = _UILegibilityView; frame = (3.66667 61.3333; 54 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fa0320>>\n | | | | | | | | | <_UILegibilityImageView: 0x15010ca20; frame = (-12 -12; 78 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa03a0>>\n | | | | | | | | | <_UILegibilityImageView: 0x15010c7f0; frame = (0 0; 54 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa0340>>\n | | | | | | | | <SBFolderIconImageView: 0x150134de0; frame: {{0, 0}, {60, 60}}; icon: <SBFolderIcon: 0x28072ebc0; nodeID: folder:1B9DD408-631A-4DD2-B0D1-7A839FE697B0> Folder: <SBFolder: 0x2810f6c80, \u751f\u6d3b\u65b9\u5f0f>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO; animating: NO>\n | | | | | | | | | <SBFolderIconBackgroundView: 0x150135080; frame = (0 0; 60 60); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x283f14b80>>\n | | | | | | | | | <UIView: 0x15009ed60; frame = (0 0; 60 60); clipsToBounds = YES; layer = <CALayer: 0x283f23200>>\n | | | | | | | | | <UIView: 0x15009eb80; frame = (7.66667 7.66667; 45 45); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x283f230e0>>\n | | | | | | | | | | <_SBIconGridWrapperView: 0x15009b210; baseClass = UIImageView; frame = (0 0; 45 45); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f23140>>\n | | | | | | | | | | <_SBIconGridWrapperView: 0x15009b440; baseClass = UIImageView; frame = (51 0; 45 45); userInteractionEnabled = NO; layer = <CALayer: 0x283f231a0>>\n | | | | | | | <SBIconView: 0x150136820; frame: {{129.66666666666666, 318}, {60, 74}}; icon: <SBApplicationIcon: 0x28011c4b0; nodeID: com.apple.AppStore; bundleID: com.apple.AppStore>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1501372f0; baseClass = _UILegibilityView; frame = (-0.333333 61.3333; 62 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fa0440>>\n | | | | | | | | | <_UILegibilityImageView: 0x15010d200; frame = (-12 -12; 86 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa0800>>\n | | | | | | | | | <_UILegibilityImageView: 0x15010cfd0; frame = (0 0; 62 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa0460>>\n | | | | | | | | <SBIconImageView: 0x150136d60; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x28011c4b0; nodeID: com.apple.AppStore; bundleID: com.apple.AppStore>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x150137bd0; frame: {{224.33333333333334, 318}, {60, 74}}; icon: <SBApplicationIcon: 0x280123cf0; nodeID: com.apple.Preferences; bundleID: com.apple.Preferences>; location: home; contentType: default; accessoryType: badge>\n | | | | | | | | <SBIconLegibilityLabelView: 0x150137940; baseClass = _UILegibilityView; frame = (15.6667 61.3333; 29 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fa08a0>>\n | | | | | | | | | <_UILegibilityImageView: 0x15010d890; frame = (-12 -12; 53 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa0920>>\n | | | | | | | | | <_UILegibilityImageView: 0x15010d660; frame = (0 0; 29 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa08c0>>\n | | | | | | | | <SBIconImageView: 0x150136f90; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x280123cf0; nodeID: com.apple.Preferences; bundleID: com.apple.Preferences>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | | <SBIconParallaxBadgeView: 0x15009ce70; frame = (45 -11; 26 26); animations = { <UIInterpolatingMotionEffect: 0x281dc4f50>=<CABasicAnimation: 0x28386cd80>; <UIInterpolatingMotionEffect: 0x281dc6620>=<CABasicAnimation: 0x28386cce0>; }; layer = <CALayer: 0x283f23fe0>>\n | | | | | | | | | <SBDarkeningImageView: 0x1500b70d0; baseClass = UIImageView; frame = (0 0; 26 26); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f23d60>>{brightness=1.000000 image=<_UIResizableImage: 0x28091cc60> size {26, 26} orientation 0 scale 3.000000}\n | | | | | | | | | | <SBDarkeningImageView: 0x1500b7510; baseClass = UIImageView; frame = (8 3; 10 19); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f23a80>>{brightness=1.000000 image=<SBIconAccessoryImage: 0x2815b20d0> size {10, 19} orientation 0 scale 3.000000}\n | | | | | | | <SBIconView: 0x15009ca10; frame: {{319, 318}, {60, 74}}; icon: <SBApplicationIcon: 0x2801204b0; nodeID: com.apple.VoiceMemos; bundleID: com.apple.VoiceMemos>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x15013a260; baseClass = _UILegibilityView; frame = (-2.33333 61.3333; 66 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fa09e0>>\n | | | | | | | | | <_UILegibilityImageView: 0x15010dd40; frame = (-12 -12; 90 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa0de0>>\n | | | | | | | | | <_UILegibilityImageView: 0x15020a9b0; frame = (0 0; 66 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa8000>>\n | | | | | | | | <SBIconImageView: 0x1500b8100; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x2801204b0; nodeID: com.apple.VoiceMemos; bundleID: com.apple.VoiceMemos>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x1500b8330; frame: {{35, 418}, {60, 74}}; icon: <SBApplicationIcon: 0x280122b20; nodeID: com.Holothurian.NewSpringBoard; bundleID: com.Holothurian.NewSpringBoard>; location: home; contentType: default; accessoryType: badge>\n | | | | | | | | <SBIconLegibilityLabelView: 0x15010df70; baseClass = _UILegibilityView; frame = (-13.3333 61.3333; 88 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fa0e80>>\n | | | | | | | | | <_UILegibilityImageView: 0x15010ebf0; frame = (-12 -12; 112 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa0f00>>\n | | | | | | | | | <_UILegibilityImageView: 0x15010e3d0; frame = (0 0; 88 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa0ea0>>\n | | | | | | | | <SBIconImageView: 0x1500b9210; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x280122b20; nodeID: com.Holothurian.NewSpringBoard; bundleID: com.Holothurian.NewSpringBoard>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | | <SBIconParallaxBadgeView: 0x1500bbe50; frame = (29 -11; 42 26); animations = { <UIInterpolatingMotionEffect: 0x281dc6ee0>=<CABasicAnimation: 0x28386d120>; <UIInterpolatingMotionEffect: 0x281dc7520>=<CABasicAnimation: 0x28386c200>; }; layer = <CALayer: 0x283f05160>>\n | | | | | | | | | <SBDarkeningImageView: 0x1500be7e0; baseClass = UIImageView; frame = (0 0; 42 26); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f05180>>{brightness=1.000000 image=<_UIResizableImage: 0x28093bde0> size {26, 26} orientation 0 scale 3.000000}\n | | | | | | | | | | <SBDarkeningImageView: 0x1500bea20; baseClass = UIImageView; frame = (6 3; 30 19); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f05220>>{brightness=1.000000 image=<SBIconAccessoryImage: 0x2815b9960> size {30, 19} orientation 0 scale 3.000000}\n | | | | | | | <SBIconView: 0x15013a770; frame: {{129.66666666666666, 418}, {60, 74}}; icon: <SBApplicationIcon: 0x28011c0f0; nodeID: com.tencent.xin; bundleID: com.tencent.xin>; location: home; contentType: default; accessoryType: badge>\n | | | | | | | | <SBIconLegibilityLabelView: 0x15010ee20; baseClass = _UILegibilityView; frame = (15.6667 61.3333; 29 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fa0fc0>>\n | | | | | | | | | <_UILegibilityImageView: 0x15010f4b0; frame = (-12 -12; 53 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa1040>>\n | | | | | | | | | <_UILegibilityImageView: 0x15010f280; frame = (0 0; 29 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa0fe0>>\n | | | | | | | | <SBIconImageView: 0x15013ce00; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x28011c0f0; nodeID: com.tencent.xin; bundleID: com.tencent.xin>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | | <SBIconParallaxBadgeView: 0x1500c10a0; frame = (45 -11; 26 26); animations = { <UIInterpolatingMotionEffect: 0x281e3b660>=<CABasicAnimation: 0x28386c080>; <UIInterpolatingMotionEffect: 0x281e3b890>=<CABasicAnimation: 0x28386cac0>; }; layer = <CALayer: 0x283f4f3a0>>\n | | | | | | | | | <SBDarkeningImageView: 0x1500c12c0; baseClass = UIImageView; frame = (0 0; 26 26); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f4fa00>>{brightness=1.000000 image=<_UIResizableImage: 0x28093c210> size {26, 26} orientation 0 scale 3.000000}\n | | | | | | | | | | <SBDarkeningImageView: 0x1500c1500; baseClass = UIImageView; frame = (8 3; 10 19); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f4f4e0>>{brightness=1.000000 image=<SBIconAccessoryImage: 0x2815b20d0> size {10, 19} orientation 0 scale 3.000000}\n | | | | | | <SBRootIconListView 0x14be41c50: frame = {{828, 0}, {414, 604}}; Model = <SBIconListModel: 0x281dedc20; 16 icons; folder = <SBRootFolderWithDock: 0x280f29720, (null)>>>\n | | | | | | | <SBIconView: 0x1500c19c0; frame: {{35, 18}, {60, 74}}; icon: <SBApplicationIcon: 0x28011cd20; nodeID: com.apple.facetime; bundleID: com.apple.facetime>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x15010f6e0; baseClass = _UILegibilityView; frame = (-13.3333 61.3333; 87 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fa1100>>\n | | | | | | | | | <_UILegibilityImageView: 0x15010fb40; frame = (-12 -12; 111 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa1400>>\n | | | | | | | | | <_UILegibilityImageView: 0x15010f910; frame = (0 0; 87 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa13e0>>\n | | | | | | | | <SBIconImageView: 0x1500c1cc0; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x28011cd20; nodeID: com.apple.facetime; bundleID: com.apple.facetime>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x1500c5260; frame: {{129.66666666666666, 18}, {60, 74}}; icon: <SBApplicationIcon: 0x280121d10; nodeID: com.apple.calculator; bundleID: com.apple.calculator>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1500c58a0; baseClass = _UILegibilityView; frame = (9.66667 61.3333; 41 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fabea0>>\n | | | | | | | | | <_UILegibilityImageView: 0x1501101d0; frame = (-12 -12; 65 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa0a60>>\n | | | | | | | | | <_UILegibilityImageView: 0x15010fe80; frame = (0 0; 41 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa14a0>>\n | | | | | | | | <SBIconImageView: 0x1500c5560; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x280121d10; nodeID: com.apple.calculator; bundleID: com.apple.calculator>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x1500c64f0; frame: {{224.33333333333334, 18}, {60, 74}}; icon: <SBApplicationIcon: 0x280123b10; nodeID: com.apple.podcasts; bundleID: com.apple.podcasts>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x150110400; baseClass = _UILegibilityView; frame = (15.6667 61.3333; 29 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fa1560>>\n | | | | | | | | | <_UILegibilityImageView: 0x150110980; frame = (-12 -12; 53 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa15e0>>\n | | | | | | | | | <_UILegibilityImageView: 0x150110750; frame = (0 0; 29 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa1580>>\n | | | | | | | | <SBIconImageView: 0x1500c5c40; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x280123b10; nodeID: com.apple.podcasts; bundleID: com.apple.podcasts>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x1500c6c90; frame: {{319, 18}, {60, 74}}; icon: <SBApplicationIcon: 0x280122ee0; nodeID: com.apple.Bridge; bundleID: com.apple.Bridge>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x150110bb0; baseClass = _UILegibilityView; frame = (9.66667 61.3333; 41 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fa1680>>\n | | | | | | | | | <_UILegibilityImageView: 0x150111240; frame = (-12 -12; 65 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa1700>>\n | | | | | | | | | <_UILegibilityImageView: 0x150111010; frame = (0 0; 41 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa16a0>>\n | | | | | | | | <SBIconImageView: 0x15009c030; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x280122ee0; nodeID: com.apple.Bridge; bundleID: com.apple.Bridge>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x150145300; frame: {{35, 118}, {60, 74}}; icon: <SBApplicationIcon: 0x2801201e0; nodeID: com.apple.DocumentsApp; bundleID: com.apple.DocumentsApp>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x150144a30; baseClass = _UILegibilityView; frame = (15.6667 61.3333; 29 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fa17a0>>\n | | | | | | | | | <_UILegibilityImageView: 0x1501117c0; frame = (-12 -12; 53 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa1820>>\n | | | | | | | | | <_UILegibilityImageView: 0x150111590; frame = (0 0; 29 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa17c0>>\n | | | | | | | | <SBIconImageView: 0x150145c50; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x2801201e0; nodeID: com.apple.DocumentsApp; bundleID: com.apple.DocumentsApp>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x1500c9510; frame: {{129.66666666666666, 118}, {60, 74}}; icon: <SBApplicationIcon: 0x2801205a0; nodeID: com.tencent.qqmail; bundleID: com.tencent.qqmail>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x150147a00; baseClass = _UILegibilityView; frame = (6.66667 61.3333; 48 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fa18c0>>\n | | | | | | | | | <_UILegibilityImageView: 0x150111b10; frame = (-12 -12; 72 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa1940>>\n | | | | | | | | | <_UILegibilityImageView: 0x15012ce00; frame = (0 0; 48 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa18e0>>\n | | | | | | | | <SBIconImageView: 0x1500c9ad0; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x2801205a0; nodeID: com.tencent.qqmail; bundleID: com.tencent.qqmail>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBFolderIconView: 0x1500a2360; frame: {{224.33333333333334, 118}, {60, 74}}; icon: <SBFolderIcon: 0x28072eca0; nodeID: folder:96367D3C-9826-4C17-9A57-4CCB3BC6BBC9> Folder: <SBFolder: 0x2810fbe80, \u6587\u4ef6\u5939>; location: home; contentType: default> Folder: <SBFolder: 0x2810fbe80, \u6587\u4ef6\u5939>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1500cb470; baseClass = _UILegibilityView; frame = (9.66667 61.3333; 41 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fac020>>\n | | | | | | | | | <_UILegibilityImageView: 0x15020abe0; frame = (-12 -12; 65 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fac0e0>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500ab3b0; frame = (0 0; 41 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fac040>>\n | | | | | | | | <SBFolderIconImageView: 0x1500ca210; frame: {{0, 0}, {60, 60}}; icon: <SBFolderIcon: 0x28072eca0; nodeID: folder:96367D3C-9826-4C17-9A57-4CCB3BC6BBC9> Folder: <SBFolder: 0x2810fbe80, \u6587\u4ef6\u5939>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO; animating: NO>\n | | | | | | | | | <SBFolderIconBackgroundView: 0x1500acca0; frame = (0 0; 60 60); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x283f6ca40>>\n | | | | | | | | | <UIView: 0x1500cb910; frame = (0 0; 60 60); clipsToBounds = YES; layer = <CALayer: 0x283f6cbc0>>\n | | | | | | | | | <UIView: 0x1500ca4b0; frame = (7.66667 7.66667; 45 45); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x283f6caa0>>\n | | | | | | | | | | <_SBIconGridWrapperView: 0x1500ca690; baseClass = UIImageView; frame = (0 0; 45 45); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f6cb00>>\n | | | | | | | | | | <_SBIconGridWrapperView: 0x1500cb6e0; baseClass = UIImageView; frame = (51 0; 45 45); userInteractionEnabled = NO; layer = <CALayer: 0x283f6cb60>>\n | | | | | | | <SBIconView: 0x1500cbaf0; frame: {{319, 118}, {60, 74}}; icon: <SBApplicationIcon: 0x28012b840; nodeID: com.liguangming.Shadowrocket; bundleID: com.liguangming.Shadowrocket>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1500ccf30; baseClass = _UILegibilityView; frame = (-13.3333 61.3333; 87 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fac180>>\n | | | | | | | | | <_UILegibilityImageView: 0x150112120; frame = (-12 -12; 111 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa3f20>>\n | | | | | | | | | <_UILegibilityImageView: 0x150111d40; frame = (0 0; 87 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa3ec0>>\n | | | | | | | | <SBIconImageView: 0x1500cc760; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x28012b840; nodeID: com.liguangming.Shadowrocket; bundleID: com.liguangming.Shadowrocket>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x1500cc990; frame: {{35, 218}, {60, 74}}; icon: <SBApplicationIcon: 0x28011c1e0; nodeID: com.ss.iphone.article.lite; bundleID: com.ss.iphone.article.lite>; location: home; contentType: default; accessoryType: badge>\n | | | | | | | | <SBIconLegibilityLabelView: 0x150112350; baseClass = _UILegibilityView; frame = (-14.3333 61.3333; 89 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fa3fc0>>\n | | | | | | | | | <_UILegibilityImageView: 0x1501128d0; frame = (-12 -12; 113 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa7960>>\n | | | | | | | | | <_UILegibilityImageView: 0x1501126a0; frame = (0 0; 89 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fa7920>>\n | | | | | | | | <SBIconImageView: 0x1500ce9c0; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x28011c1e0; nodeID: com.ss.iphone.article.lite; bundleID: com.ss.iphone.article.lite>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x1500cebf0; frame: {{129.66666666666666, 218}, {60, 74}}; icon: <SBApplicationIcon: 0x280121680; nodeID: com.ss.iphone.ugc.Aweme; bundleID: com.ss.iphone.ugc.Aweme>; location: home; contentType: default; accessoryType: badge>\n | | | | | | | | <SBIconLegibilityLabelView: 0x150112b00; baseClass = _UILegibilityView; frame = (15.6667 61.3333; 29 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fa7ae0>>\n | | | | | | | | | <_UILegibilityImageView: 0x15020af30; frame = (-12 -12; 53 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f9bb00>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500cf680; frame = (0 0; 29 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f9bb80>>\n | | | | | | | | <SBIconImageView: 0x1500cf2e0; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x280121680; nodeID: com.ss.iphone.ugc.Aweme; bundleID: com.ss.iphone.ugc.Aweme>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x15014b9a0; frame: {{224.33333333333334, 218}, {60, 74}}; icon: <SBApplicationIcon: 0x280121770; nodeID: com.aliyun.wstudio.amc.AliyunMobileApp; bundleID: com.aliyun.wstudio.amc.AliyunMobileApp>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1500d0da0; baseClass = _UILegibilityView; frame = (9.66667 61.3333; 41 22); userInteractionEnabled = NO; layer = <CALayer: 0x283f9b620>>\n | | | | | | | | | <_UILegibilityImageView: 0x1501131a0; frame = (-12 -12; 65 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f87e80>>\n | | | | | | | | | <_UILegibilityImageView: 0x150112f70; frame = (0 0; 41 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f87e40>>\n | | | | | | | | <SBIconImageView: 0x15014c2f0; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x280121770; nodeID: com.aliyun.wstudio.amc.AliyunMobileApp; bundleID: com.aliyun.wstudio.amc.AliyunMobileApp>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x15014c520; frame: {{319, 218}, {60, 74}}; icon: <SBApplicationIcon: 0x2801214a0; nodeID: com.baidu.BaiduMobile; bundleID: com.baidu.BaiduMobile>; location: home; contentType: default; accessoryType: badge>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1501133d0; baseClass = _UILegibilityView; frame = (15.6667 61.3333; 29 22); userInteractionEnabled = NO; layer = <CALayer: 0x283f87f20>>\n | | | | | | | | | <_UILegibilityImageView: 0x150113b00; frame = (-12 -12; 53 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f87fa0>>\n | | | | | | | | | <_UILegibilityImageView: 0x150113600; frame = (0 0; 29 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f87f40>>\n | | | | | | | | <SBIconImageView: 0x15014cac0; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x2801214a0; nodeID: com.baidu.BaiduMobile; bundleID: com.baidu.BaiduMobile>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x1500d1a90; frame: {{35, 318}, {60, 74}}; icon: <SBApplicationIcon: 0x2801232a0; nodeID: com.Holothurian.CSTMIMDemo-iOS; bundleID: com.Holothurian.CSTMIMDemo-iOS>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x15014eb10; baseClass = _UILegibilityView; frame = (-13.3333 61.3333; 87 22); userInteractionEnabled = NO; layer = <CALayer: 0x283f86f20>>\n | | | | | | | | | <_UILegibilityImageView: 0x150114230; frame = (-12 -12; 111 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283ffca40>>\n | | | | | | | | | <_UILegibilityImageView: 0x150113d30; frame = (0 0; 87 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283ffc040>>\n | | | | | | | | <SBIconImageView: 0x1500d2180; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x2801232a0; nodeID: com.Holothurian.CSTMIMDemo-iOS; bundleID: com.Holothurian.CSTMIMDemo-iOS>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x15014e810; frame: {{129.66666666666666, 318}, {60, 74}}; icon: <SBApplicationIcon: 0x280122d00; nodeID: rn.notes.best; bundleID: rn.notes.best>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1500d5730; baseClass = _UILegibilityView; frame = (-2.33333 61.3333; 66 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fe1d80>>\n | | | | | | | | | <_UILegibilityImageView: 0x1501148c0; frame = (-12 -12; 90 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fd8000>>\n | | | | | | | | | <_UILegibilityImageView: 0x150114460; frame = (0 0; 66 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fff660>>\n | | | | | | | | <SBIconImageView: 0x15014fb60; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x280122d00; nodeID: rn.notes.best; bundleID: rn.notes.best>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x15014fd90; frame: {{224.33333333333334, 318}, {60, 74}}; icon: <SBApplicationIcon: 0x280120870; nodeID: com.Holothurian.12345; bundleID: com.Holothurian.12345>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x150150e60; baseClass = _UILegibilityView; frame = (4.66667 61.3333; 52 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fd80a0>>\n | | | | | | | | | <_UILegibilityImageView: 0x150114ff0; frame = (-12 -12; 76 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fce180>>\n | | | | | | | | | <_UILegibilityImageView: 0x150114af0; frame = (0 0; 52 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fce120>>\n | | | | | | | | <SBIconImageView: 0x150150b10; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x280120870; nodeID: com.Holothurian.12345; bundleID: com.Holothurian.12345>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x150152700; frame: {{319, 318}, {60, 74}}; icon: <SBApplicationIcon: 0x28011cc30; nodeID: com.Holothurian.ASLRDemo; bundleID: com.Holothurian.ASLRDemo>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x150001550; baseClass = _UILegibilityView; frame = (-4.33333 61.3333; 69 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fd1c80>>\n | | | | | | | | | <_UILegibilityImageView: 0x15020c080; frame = (-12 -12; 93 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fd1d00>>\n | | | | | | | | | <_UILegibilityImageView: 0x15020be50; frame = (0 0; 69 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fd1ca0>>\n | | | | | | | | <SBIconImageView: 0x150151480; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x28011cc30; nodeID: com.Holothurian.ASLRDemo; bundleID: com.Holothurian.ASLRDemo>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | <SBRootIconListView 0x14d7c2b10: frame = {{1242, 0}, {414, 604}}; Model = <SBIconListModel: 0x281dedef0; 10 icons; folder = <SBRootFolderWithDock: 0x280f29720, (null)>>>\n | | | | | | | <SBFolderIconView: 0x1500d3460; frame: {{35, 18}, {60, 74}}; icon: <SBFolderIcon: 0x28072ed80; nodeID: folder:F50C5671-B57C-4F5B-8A2E-3FE24B84E507> Folder: <SBFolder: 0x2810f8e00, \u8d22\u52a1>; location: home; contentType: default> Folder: <SBFolder: 0x2810f8e00, \u8d22\u52a1>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1500d7700; baseClass = _UILegibilityView; frame = (15.6667 61.3333; 29 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fd1da0>>\n | | | | | | | | | <_UILegibilityImageView: 0x15020c600; frame = (-12 -12; 53 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fd1e20>>\n | | | | | | | | | <_UILegibilityImageView: 0x15020c3d0; frame = (0 0; 29 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fd1dc0>>\n | | | | | | | | <SBFolderIconImageView: 0x1500d7110; frame: {{0, 0}, {60, 60}}; icon: <SBFolderIcon: 0x28072ed80; nodeID: folder:F50C5671-B57C-4F5B-8A2E-3FE24B84E507> Folder: <SBFolder: 0x2810f8e00, \u8d22\u52a1>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO; animating: NO>\n | | | | | | | | | <SBFolderIconBackgroundView: 0x1500d73b0; frame = (0 0; 60 60); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x283f45fc0>>\n | | | | | | | | | <UIView: 0x1500d7f80; frame = (0 0; 60 60); clipsToBounds = YES; layer = <CALayer: 0x283f45b20>>\n | | | | | | | | | <UIView: 0x1500d7940; frame = (7.66667 7.66667; 45 45); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x283f45640>>\n | | | | | | | | | | <_SBIconGridWrapperView: 0x1500d7b20; baseClass = UIImageView; frame = (0 0; 45 45); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f45500>>\n | | | | | | | | | | <_SBIconGridWrapperView: 0x1500d7d50; baseClass = UIImageView; frame = (51 0; 45 45); userInteractionEnabled = NO; layer = <CALayer: 0x283f45f60>>\n | | | | | | | <SBFolderIconView: 0x1500d8690; frame: {{129.66666666666666, 18}, {60, 74}}; icon: <SBFolderIcon: 0x28072ee60; nodeID: folder:8A100E62-5855-4CCC-8E89-C7B008E6CBDB> Folder: <SBFolder: 0x2810fb280, \u5b66\u4e60>; location: home; contentType: default> Folder: <SBFolder: 0x2810fb280, \u5b66\u4e60>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1500d96a0; baseClass = _UILegibilityView; frame = (15.6667 61.3333; 29 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fd1ec0>>\n | | | | | | | | | <_UILegibilityImageView: 0x15020ce40; frame = (-12 -12; 53 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fd1f60>>\n | | | | | | | | | <_UILegibilityImageView: 0x15020cc10; frame = (0 0; 29 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fd1ee0>>\n | | | | | | | | <SBFolderIconImageView: 0x1500d8be0; frame: {{0, 0}, {60, 60}}; icon: <SBFolderIcon: 0x28072ee60; nodeID: folder:8A100E62-5855-4CCC-8E89-C7B008E6CBDB> Folder: <SBFolder: 0x2810fb280, \u5b66\u4e60>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO; animating: NO>\n | | | | | | | | | <SBFolderIconBackgroundView: 0x1500d8e80; frame = (0 0; 60 60); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x283f46660>>\n | | | | | | | | | <UIView: 0x1500d94c0; frame = (0 0; 60 60); clipsToBounds = YES; layer = <CALayer: 0x283f450a0>>\n | | | | | | | | | <UIView: 0x1500d90b0; frame = (7.66667 7.66667; 45 45); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x283f46e00>>\n | | | | | | | | | | <_SBIconGridWrapperView: 0x1500d9290; baseClass = UIImageView; frame = (0 0; 45 45); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f44ee0>>\n | | | | | | | | | | <_SBIconGridWrapperView: 0x1500d98d0; baseClass = UIImageView; frame = (51 0; 45 45); userInteractionEnabled = NO; layer = <CALayer: 0x283f44e80>>\n | | | | | | | <SBFolderIconView: 0x14d7f3530; frame: {{224.33333333333334, 18}, {60, 74}}; icon: <SBFolderIcon: 0x28072ef40; nodeID: folder:2667F89D-207A-483D-BB9E-E0D56BC537A2> Folder: <SBFolder: 0x2810fdc80, \u8d2d\u7269>; location: home; contentType: default> Folder: <SBFolder: 0x2810fdc80, \u8d2d\u7269>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1500da160; baseClass = _UILegibilityView; frame = (15.6667 61.3333; 29 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fd2000>>\n | | | | | | | | | <_UILegibilityImageView: 0x150115220; frame = (-12 -12; 53 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fce280>>\n | | | | | | | | | <_UILegibilityImageView: 0x15010cd90; frame = (0 0; 29 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fce220>>\n | | | | | | | | <SBFolderIconImageView: 0x14d7f3e00; frame: {{0, 0}, {60, 60}}; icon: <SBFolderIcon: 0x28072ef40; nodeID: folder:2667F89D-207A-483D-BB9E-E0D56BC537A2> Folder: <SBFolder: 0x2810fdc80, \u8d2d\u7269>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO; animating: NO>\n | | | | | | | | | <SBFolderIconBackgroundView: 0x14d7f40a0; frame = (0 0; 60 60); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x283f72220>>\n | | | | | | | | | <UIView: 0x14d7f4910; frame = (0 0; 60 60); clipsToBounds = YES; layer = <CALayer: 0x283f723a0>>\n | | | | | | | | | <UIView: 0x14d7f42d0; frame = (7.66667 7.66667; 45 45); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x283f72280>>\n | | | | | | | | | | <_SBIconGridWrapperView: 0x14d7f44b0; baseClass = UIImageView; frame = (0 0; 45 45); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f722e0>>\n | | | | | | | | | | <_SBIconGridWrapperView: 0x14d7f46e0; baseClass = UIImageView; frame = (51 0; 45 45); userInteractionEnabled = NO; layer = <CALayer: 0x283f72340>>\n | | | | | | | <SBFolderIconView: 0x14d7f4af0; frame: {{319, 18}, {60, 74}}; icon: <SBFolderIcon: 0x28072f020; nodeID: folder:ECCA125C-6558-4BA3-ADC8-D193633EB9CB> Folder: <SBFolder: 0x281083a00, \u97f3\u89c6\u9891>; location: home; contentType: default> Folder: <SBFolder: 0x281083a00, \u97f3\u89c6\u9891>\n | | | | | | | | <SBIconLegibilityLabelView: 0x150115450; baseClass = _UILegibilityView; frame = (9.66667 61.3333; 41 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fce320>>\n | | | | | | | | | <_UILegibilityImageView: 0x150115e20; frame = (-12 -12; 65 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fce3a0>>\n | | | | | | | | | <_UILegibilityImageView: 0x150115bf0; frame = (0 0; 41 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fce340>>\n | | | | | | | | <SBFolderIconImageView: 0x1500daf70; frame: {{0, 0}, {60, 60}}; icon: <SBFolderIcon: 0x28072f020; nodeID: folder:ECCA125C-6558-4BA3-ADC8-D193633EB9CB> Folder: <SBFolder: 0x281083a00, \u97f3\u89c6\u9891>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO; animating: NO>\n | | | | | | | | | <SBFolderIconBackgroundView: 0x1500da8f0; frame = (0 0; 60 60); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x283f429e0>>\n | | | | | | | | | <UIView: 0x1500db3f0; frame = (0 0; 60 60); clipsToBounds = YES; layer = <CALayer: 0x283f41120>>\n | | | | | | | | | <UIView: 0x1500db210; frame = (7.66667 7.66667; 45 45); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x283f41060>>\n | | | | | | | | | | <_SBIconGridWrapperView: 0x1500db840; baseClass = UIImageView; frame = (0 0; 45 45); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f41540>>\n | | | | | | | | | | <_SBIconGridWrapperView: 0x1500dba70; baseClass = UIImageView; frame = (51 0; 45 45); userInteractionEnabled = NO; layer = <CALayer: 0x283f412c0>>\n | | | | | | | <SBFolderIconView: 0x1500dbca0; frame: {{35, 118}, {60, 74}}; icon: <SBFolderIcon: 0x28072f100; nodeID: folder:30A8A504-C2FD-4296-9F4E-B33B60FEE019> Folder: <SBFolder: 0x2810a3f00, \u51fa\u884c>; location: home; contentType: default> Folder: <SBFolder: 0x2810a3f00, \u51fa\u884c>\n | | | | | | | | <SBIconLegibilityLabelView: 0x150116050; baseClass = _UILegibilityView; frame = (15.6667 61.3333; 29 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fce440>>\n | | | | | | | | | <_UILegibilityImageView: 0x1501166e0; frame = (-12 -12; 53 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fce4c0>>\n | | | | | | | | | <_UILegibilityImageView: 0x1501164b0; frame = (0 0; 29 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fce460>>\n | | | | | | | | <SBFolderIconImageView: 0x1500dc8b0; frame: {{0, 0}, {60, 60}}; icon: <SBFolderIcon: 0x28072f100; nodeID: folder:30A8A504-C2FD-4296-9F4E-B33B60FEE019> Folder: <SBFolder: 0x2810a3f00, \u51fa\u884c>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO; animating: NO>\n | | | | | | | | | <SBFolderIconBackgroundView: 0x1500dcb50; frame = (0 0; 60 60); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x283f41d60>>\n | | | | | | | | | <UIView: 0x1500dd9a0; frame = (0 0; 60 60); clipsToBounds = YES; layer = <CALayer: 0x283f43800>>\n | | | | | | | | | <UIView: 0x1500dd360; frame = (7.66667 7.66667; 45 45); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x283f41260>>\n | | | | | | | | | | <_SBIconGridWrapperView: 0x1500dd540; baseClass = UIImageView; frame = (0 0; 45 45); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f429c0>>\n | | | | | | | | | | <_SBIconGridWrapperView: 0x1500dd770; baseClass = UIImageView; frame = (51 0; 45 45); userInteractionEnabled = NO; layer = <CALayer: 0x283f437a0>>\n | | | | | | | <SBFolderIconView: 0x1500ddb80; frame: {{129.66666666666666, 118}, {60, 74}}; icon: <SBFolderIcon: 0x28072f1e0; nodeID: folder:4963D012-0A98-4284-9D60-525FAC52F425> Folder: <SBFolder: 0x281056200, \u5de5\u4f5c>; location: home; contentType: default> Folder: <SBFolder: 0x281056200, \u5de5\u4f5c>\n | | | | | | | | <SBIconLegibilityLabelView: 0x14d7f6ec0; baseClass = _UILegibilityView; frame = (15.6667 61.3333; 29 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fce560>>\n | | | | | | | | | <_UILegibilityImageView: 0x150116d70; frame = (-12 -12; 53 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fce5e0>>\n | | | | | | | | | <_UILegibilityImageView: 0x150116b40; frame = (0 0; 29 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fce580>>\n | | | | | | | | <SBFolderIconImageView: 0x1500df760; frame: {{0, 0}, {60, 60}}; icon: <SBFolderIcon: 0x28072f1e0; nodeID: folder:4963D012-0A98-4284-9D60-525FAC52F425> Folder: <SBFolder: 0x281056200, \u5de5\u4f5c>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO; animating: NO>\n | | | | | | | | | <SBFolderIconBackgroundView: 0x1500dfa00; frame = (0 0; 60 60); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x283f41ca0>>\n | | | | | | | | | <UIView: 0x1500e0090; frame = (0 0; 60 60); clipsToBounds = YES; layer = <CALayer: 0x283f42a00>>\n | | | | | | | | | <UIView: 0x1500df450; frame = (7.66667 7.66667; 45 45); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x283f41f00>>\n | | | | | | | | | | <_SBIconGridWrapperView: 0x1500dfc30; baseClass = UIImageView; frame = (0 0; 45 45); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f412a0>>\n | | | | | | | | | | <_SBIconGridWrapperView: 0x1500dfe60; baseClass = UIImageView; frame = (51 0; 45 45); userInteractionEnabled = NO; layer = <CALayer: 0x283f43640>>\n | | | | | | | <SBIconView: 0x150149120; frame: {{224.33333333333334, 118}, {60, 74}}; icon: <SBApplicationIcon: 0x2801221c0; nodeID: com.autonavi.amap; bundleID: com.autonavi.amap>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x14d7f7a90; baseClass = _UILegibilityView; frame = (3.66667 61.3333; 54 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fce680>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500dcd80; frame = (-12 -12; 78 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fd2080>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500db5d0; frame = (0 0; 54 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fd2020>>\n | | | | | | | | <SBIconImageView: 0x14d7f75d0; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x2801221c0; nodeID: com.autonavi.amap; bundleID: com.autonavi.amap>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x14d7f86c0; frame: {{319, 118}, {60, 74}}; icon: <SBApplicationIcon: 0x2801222b0; nodeID: com.baidu.map; bundleID: com.baidu.map>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x15020d070; baseClass = _UILegibilityView; frame = (3.66667 61.3333; 54 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fd2120>>\n | | | | | | | | | <_UILegibilityImageView: 0x15020d2a0; frame = (-12 -12; 78 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fd21a0>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500852d0; frame = (0 0; 54 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fd2140>>\n | | | | | | | | <SBIconImageView: 0x14d7f8f80; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x2801222b0; nodeID: com.baidu.map; bundleID: com.baidu.map>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x1500e3170; frame: {{35, 218}, {60, 74}}; icon: <SBApplicationIcon: 0x28011cf00; nodeID: com.tencent.mqq; bundleID: com.tencent.mqq>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1500e38f0; baseClass = _UILegibilityView; frame = (18.6667 61.3333; 23 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fd2240>>\n | | | | | | | | | <_UILegibilityImageView: 0x150117170; frame = (-12 -12; 47 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fcee00>>\n | | | | | | | | | <_UILegibilityImageView: 0x1500d9f20; frame = (0 0; 23 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fd2260>>\n | | | | | | | | <SBIconImageView: 0x1500e3dc0; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x28011cf00; nodeID: com.tencent.mqq; bundleID: com.tencent.mqq>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x14d7f9a00; frame: {{129.66666666666666, 218}, {60, 74}}; icon: <SBApplicationIcon: 0x280122c10; nodeID: com.laiwang.DingTalk; bundleID: com.laiwang.DingTalk>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x14d7fac70; baseClass = _UILegibilityView; frame = (15.6667 61.3333; 29 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fceb40>>\n | | | | | | | | | <_UILegibilityImageView: 0x150117e00; frame = (-12 -12; 53 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fc83c0>>\n | | | | | | | | | <_UILegibilityImageView: 0x150117bd0; frame = (0 0; 29 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fc84a0>>\n | | | | | | | | <SBIconImageView: 0x14d7fa900; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x280122c10; nodeID: com.laiwang.DingTalk; bundleID: com.laiwang.DingTalk>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | <SBRootIconListView 0x14d7f1a30: frame = {{1656, 0}, {414, 604}}; Model = <SBIconListModel: 0x281dee490; 3 icons; folder = <SBRootFolderWithDock: 0x280f29720, (null)>>>\n | | | | | | | <SBIconView: 0x1500e4230; frame: {{35, 18}, {60, 74}}; icon: <SBApplicationIcon: 0x280123930; nodeID: com.yfwild.mofang; bundleID: com.yfwild.mofang>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1500e5550; baseClass = _UILegibilityView; frame = (3.66667 61.3333; 54 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fd2300>>\n | | | | | | | | | <_UILegibilityImageView: 0x15020e440; frame = (-12 -12; 78 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fd25a0>>\n | | | | | | | | | <_UILegibilityImageView: 0x15020e210; frame = (0 0; 54 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fd2500>>\n | | | | | | | | <SBIconImageView: 0x1500e5010; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x280123930; nodeID: com.yfwild.mofang; bundleID: com.yfwild.mofang>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBIconView: 0x14d7fb630; frame: {{129.66666666666666, 18}, {60, 74}}; icon: <SBApplicationIcon: 0x280120d20; nodeID: com.Monph.SharedHome; bundleID: com.Monph.SharedHome>; location: home; contentType: default>\n | | | | | | | | <SBIconLegibilityLabelView: 0x15020d970; baseClass = _UILegibilityView; frame = (-8.33333 61.3333; 78 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fd2420>>\n | | | | | | | | | <_UILegibilityImageView: 0x15020e940; frame = (-12 -12; 102 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fd2560>>\n | | | | | | | | | <_UILegibilityImageView: 0x15020dcc0; frame = (0 0; 78 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fd2520>>\n | | | | | | | | <SBIconImageView: 0x14d7fbcf0; frame: {{0, 0}, {60, 60}}; icon: <SBApplicationIcon: 0x280120d20; nodeID: com.Monph.SharedHome; bundleID: com.Monph.SharedHome>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO>\n | | | | | | | <SBFolderIconView: 0x1500e5240; frame: {{224.33333333333334, 18}, {60, 74}}; icon: <SBFolderIcon: 0x28072f2c0; nodeID: folder:45838D1B-EE7D-41C2-A3B2-398D3178353B> Folder: <SBFolder: 0x281055b80, \u5176\u4ed6\u9879\u76ee>; location: home; contentType: default> Folder: <SBFolder: 0x281055b80, \u5176\u4ed6\u9879\u76ee>\n | | | | | | | | <SBIconLegibilityLabelView: 0x1500e7d00; baseClass = _UILegibilityView; frame = (3.66667 61.3333; 54 22); userInteractionEnabled = NO; layer = <CALayer: 0x283fd26a0>>\n | | | | | | | | | <_UILegibilityImageView: 0x150118f80; frame = (-12 -12; 78 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fc85c0>>\n | | | | | | | | | <_UILegibilityImageView: 0x1501183d0; frame = (0 0; 54 22); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fc8ce0>>\n | | | | | | | | <SBFolderIconImageView: 0x1500e68e0; frame: {{0, 0}, {60, 60}}; icon: <SBFolderIcon: 0x28072f2c0; nodeID: folder:45838D1B-EE7D-41C2-A3B2-398D3178353B> Folder: <SBFolder: 0x281055b80, \u5176\u4ed6\u9879\u76ee>; brightness: 0.000000; isPaused: NO; showsSquareCorners: NO; animating: NO>\n | | | | | | | | | <SBFolderIconBackgroundView: 0x1500e6b80; frame = (0 0; 60 60); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x283fb96c0>>\n | | | | | | | | | <UIView: 0x1500e86c0; frame = (0 0; 60 60); clipsToBounds = YES; layer = <CALayer: 0x283fb9840>>\n | | | | | | | | | <UIView: 0x1500e8080; frame = (7.66667 7.66667; 45 45); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x283fb9720>>\n | | | | | | | | | | <_SBIconGridWrapperView: 0x1500e8260; baseClass = UIImageView; frame = (0 0; 45 45); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fb9780>>\n | | | | | | | | | | <_SBIconGridWrapperView: 0x1500e8490; baseClass = UIImageView; frame = (51 0; 45 45); userInteractionEnabled = NO; layer = <CALayer: 0x283fb97e0>>\n | | | | | | <SBSearchScrollView: 0x14c11be00; baseClass = UIScrollView; frame = (0 0; 0 136); clipsToBounds = YES; hidden = YES; gestureRecognizers = <NSArray: 0x2830c6ac0>; layer = <CALayer: 0x283e43900>; contentOffset: {0, 94}; contentSize: {0, 230}; adjustedContentInset: {0, 0, 0, 0}>\n | | | | | | | <UIImageView: 0x1502101b0; frame = (-41.3333 224.667; 36 2.33333); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x283fc4400>>\n | | | | | <SBIconListPageControl: 0x150034780; baseClass = UIPageControl; frame = (0 614; 414 37); autoresize = W; animations = { <_UIParallaxMotionEffect: 0x281ddb750>=<CAAnimationGroup: 0x28386da00>; }; layer = <CALayer: 0x283e48f80>>\n | | | | | | <_UILegibilityView: 0x150123e60; frame = (171.667 15; 7 7); layer = <CALayer: 0x283fcb7a0>>\n | | | | | | | <_UILegibilityImageView: 0x1501242b0; frame = (-12 -12; 31 31); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fcb180>>\n | | | | | | | <_UILegibilityImageView: 0x150124080; frame = (0 0; 7 7); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fcb280>>\n | | | | | | <_UILegibilityView: 0x1502103e0; frame = (187.667 15; 7 7); layer = <CALayer: 0x283fc42a0>>\n | | | | | | | <_UILegibilityImageView: 0x150210830; frame = (-12 -12; 31 31); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fc41a0>>\n | | | | | | | <_UILegibilityImageView: 0x150210600; frame = (0 0; 7 7); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fc4260>>\n | | | | | | <_UILegibilityView: 0x150210a60; frame = (203.667 15; 7 7); layer = <CALayer: 0x283fc4060>>\n | | | | | | | <_UILegibilityImageView: 0x150210eb0; frame = (-12 -12; 31 31); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fc4780>>\n | | | | | | | <_UILegibilityImageView: 0x150210c80; frame = (0 0; 7 7); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fc4020>>\n | | | | | | <_UILegibilityView: 0x1502110e0; frame = (219.667 15; 7 7); layer = <CALayer: 0x283fc4940>>\n | | | | | | | <_UILegibilityImageView: 0x150211530; frame = (-12 -12; 31 31); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fc47e0>>\n | | | | | | | <_UILegibilityImageView: 0x150211300; frame = (0 0; 7 7); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fc4760>>\n | | | | | | <_UILegibilityView: 0x150211760; frame = (235.667 15; 7 7); layer = <CALayer: 0x283fc4620>>\n | | | | | | | <_UILegibilityImageView: 0x150211bb0; frame = (-12 -12; 31 31); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fc4600>>\n | | | | | | | <_UILegibilityImageView: 0x150211980; frame = (0 0; 7 7); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283fc4860>>\n | | | | <_SBRootFolderLayoutWrapperView: 0x15015de60; frame: {{0, 0}, {414, 736}}; statusBarHeightAdjustment: 0.000000; headerOffset: 76.333333; extendedSize: {0, 76.333333333333343}; wrappedView: <_SBMultiplexingView: 0x15007a260; frame = (0 -76.3333; 414 812.333); alpha = 0; autoresize = W+H; layer = <CALayer: 0x283e5fd20>>>\n | | | | | <_SBMultiplexingView: 0x15007a260; frame = (0 -76.3333; 414 812.333); alpha = 0; autoresize = W+H; layer = <CALayer: 0x283e5fd20>>\n | | | | | | <_SBMultiplexedHostView: 0x15007a5c0; frame = (0 0; 414 812.333); autoresize = W+H; layer = <CALayer: 0x283e13800>>\n | <SBHomeScreenBackdropDarkTintView: 0x14bdf8300; frame = (0 0; 414 736); opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x283ef11a0>>\n | | <UIView: 0x14bde2030; frame = (0 0; 414 736); alpha = 0; hidden = YES; autoresize = W+H; layer = <CALayer: 0x283ef0f20>>"
-
- 找到三个视图对象
- SBIconParallaxBadgeView: 0x15009ce70
- SBIconParallaxBadgeView: 0x1500bbe50
- SBIconParallaxBadgeView: 0x1500c10a0
- 设置其中一个隐藏,那么即可判断出当前对象是否为我们要找的目标
- 找到三个视图对象
cy# #0x15009ce70.hidden=YES
true
-
- 这个时候发现,“设置”功能上的角标被隐藏了.因此,SBIconParallaxBadgeView 就是我们要找的视图目标
- 这个时候,回到SpringBoard的头文件中,找到 SBIconParallaxBadgeView.h
#import "SBIconBadgeView.h"
#import "_UISettingsKeyObserver-Protocol.h"
@class NSString, SBFParallaxSettings;
@interface SBIconParallaxBadgeView : SBIconBadgeView <_UISettingsKeyObserver>
{
SBFParallaxSettings *_parallaxSettings;
}
- (void).cxx_destruct;
- (void)_applyParallaxSettings;
- (void)dealloc;
- (id)init;
- (void)settings:(id)arg1 changedValueForKey:(id)arg2;
...
@end
- 由头文件看来,我们只需要对init方法进行破坏,即可隐藏红点气泡
3.3 终端搭建Tweak插件
因为前面我们已经细细讲解过、所以这一步快快跳过
- 使用 nic.pl --> 17 ,创建iphone/tweak插件
- 在Makefile文件中,增加IP和端口
THEOS_DEVICE_IP=192.168.124.12
THEOS_DEVICE_PORT=22
- 打开Tweak.xm文件,写入以下代码
%hook SBIconParallaxBadgeView
- (id)init {
return nil;
}
%end
- 编译、打包、安装插件
cd readbadges
make
make package
make install
- Tweak插件安装成功,角标数量全部消失
3.4 MonkeyDev搭建Tweak插件
使用MonkeyDev搭建Tweak插件之前,先把上一步安装的 readbadges 插件删除, Cydia --> 已安装 --> readbadges --> 卸载
- 用MonkeyDev创建Tweak插件,选择Logos Tweak
- 查看当前项目结构
-
- ReadBadgesDemo.xm: 编写的破解代码
- control: 配置信息,版本号,作者名称等
- ReadBadgesDemo.plist: 要附加应用的BundleID
- 在Build Settings中,搜索Monkey,找到Tweak的相关设置
-
- MonkeyDevBuildPackageOnAnyBuild:每次编译时打包
-
- MonkeyDevClearUiCacheOnInstall:安装时清除缓存
-
- MonkeyDevCopyOnBuild:编译时拷贝包到目录
-
- MonkeyDevDeviceIP:设备IP
-
- MonkeyDevDevicePassword:设备密码
-
- MonkeyDevDevicePort:设备端口
-
- MonkeyDevInstallOnAnyBuild:每次编译时安装
-
- MonkeyDevkillProcessOnInstall:安装成功后杀掉的进程
- 打开ReadBadgesDemo.xm,写入代码
%hook SBIconParallaxBadgeView
- (id)init {
return nil;
}
%end
- Build Settings 中,搜索sign, 设置签名
-
- Code Signing Identity: 设置为iOS Developer
- Q1: 编译项目时,如果遇到CydiaSubstrate.tbd的built for iOS Simulator和for architecture arm64问题,按目录找到CydiaSubstrate.tbd文件,删除里面的i386和x86_64
- Q2: 编译报错
Preparing to run Xcode Build Phase...
use default localhost
Signing /Users/chenxi/Library/Developer/Xcode/DerivedData/ReadBadgesDemo-bdfvhnnuwqvwwkhdxlykpbnbwmgj/Build/Products/Debug-iphoneos/ReadBadgesDemo.dylib with codesign... Done.
Failed to locate sshpass. Is sshpass installed? If not, brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb
Command PhaseScriptExecution failed with a nonzero exit code
-
- 通过brew install sshpass和 brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb 均失败
- 采用下载安装的方式操作成功
- 进入https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb 连接下,看看其中内容
- 关键参数 ./configure , make install, sshpass
- 下载安装包: Non-interactive ssh password auth download | SourceForge.net
- 解压并进入安装包目录下
- 执行 ./configure 发现是在检查环境
- 进入https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb 连接下,看看其中内容
./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... ./install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
....
-
-
- 执行make && make install 安装
-
make && make install
/Applications/Xcode.app/Contents/Developer/usr/bin/make all-am
gcc -DHAVE_CONFIG_H -I. -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c
mv -f .deps/main.Tpo .deps/main.Po
gcc -g -O2 -o sshpass main.o
./install-sh -c -d '/usr/local/bin'
/usr/bin/install -c sshpass '/usr/local/bin'
./install-sh -c -d '/usr/local/share/man/man1'
/usr/bin/install -c -m 644 sshpass.1 '/usr/local/share/man/man1'
-
-
- 执行 sshpass 校验
-
sshpass
Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
-f filename Take password to use from file
-d number Use number as file descriptor for getting password
-p password Provide password as argument (security unwise)
-e Password is passed as env-var "SSHPASS"
With no parameters - password will be taken from stdin
-P prompt Which string should sshpass search for to detect a password prompt
-v Be verbose about what you're doing
-h Show help (this screen)
-V Print version information
At most one of -f, -d, -p or -e should be used
- 再次运行项目完毕后,成功安装Tweak插件,SpringBoard重启后红色角标气泡全部隐藏.
四、总结
4.1 Reveal
- iOS安装插件
- Mac安装App
- 将动态库导入iPhone
4.2 USB启动debugserver
- 终端附加
- 手机,使用debugserver 主机名称:端口 -a 进程id
- Mac电脑,启动lldb,使用process connect connect://主机名称:端口
- USB端口映射
4.3 Xcode 附加程序
- 打开工程
- 选择设备
- 附加进程
4.4 debugserver权限问题
- 导出权限文件,查看文件
- ldid -e debugserver > debugserver.entitlements
- 删除权限
- seatbelt-profiles
- com.apple.security.network.server
- com.apple.security.network.client
- 添加权限
- task_for_pid-allow设置为YES
- get-task-allow设置为YES
- platform-application设置为YES
- run-unsigned-code设置为YES
- 设置权限
- ldid -Sdebugserver.entitlements debugserver
4.5 class-dump
- class-dump -S -s -H MachO文件路径 -o 头文件路径
- MonkeyDev中,可以快速使用class-dump
4.6 lldb手动砸壳
- memory read命令
- 通过--outfile参数,导出文件。lldb的环境在Mac端
- 通过--count参数,指定导出的大小
- dd命令
- 写入源文件
- seek指定偏移,也就是跳过多少开始写入
- conv保留没有替换的部分
4.7 Tweak修改系统行为
- Reveal无法使用,在手机设置页的Reveal选项中,没有SpringBoard应用
- Cycript可以使用,但定位UI不直观
- Xcode 的 lldb可以Attach to Process,确定UI
4.8 MonkeyDev搭建Tweak插件
- 在 Build Settings中,配置参数
- 设置签名
- 编译项目并安装插件