ShadowCoel 分析之2: APP 中的依赖结构分析
本文最后更新于 2021年4月4日 晚上
上一篇分析文章中已经罗列了工程中的所有依赖库的作用, 这篇文章的重点就是看 APP 中这些依赖库的结构.
在 Xcode 中可以看到 ShadowCoel
Project 中有如下图所示的 Target 列表:
下面就分别来看这些 Target 及其作用.
ShadowCoel Target
ShadowCoel
: APP Target, 即 iOS APP 的实现.
在 APP Target 中 Embedded Binaries
如下图所示:
在 APP Target 中 Linked Framework and Libraries
如下图所示:
PacketTunnel Target
PacketTunnel
: 可执行的 APP Extension. 它的主要作用就是和 Network Extension framework
进行交互.
其中依赖如下所示:
可以在这个 Target 的 info.plist 中找到相关的配置:
NSExtensionPrincipalClass
: 即实现 APP Extension 的主视图的类名称, 这里的值是 PacketTunnelProvider
.
NSExtensionPointIdentifier
: 这里的值是 com.apple.networkextension.packet-tunnel
, 表示的是这个 APP Extension 是一个 Packet Tunnel Provider Extension, 这样它就可以对诸如系统的 HTTP 代理等进行配置, 详见苹果官方文档.
关于 APP Extension 的更多信息详见苹果 APP Extension 的官方文档.
PacketTunnelProvider
声明如下所示:
1 |
|
功能的实现主要是重写父类的如下方法:
1 |
|
之后会专门开一个文章对这个 Extension 的实现进行专门分析.
TodayWidget
可执行的 APP Extension, 在它的 info.plist 中有如下配置:
NSExtensionPointIdentifier
键的值是 com.apple.widget-extension
, 表明这个 Extension 是一个 Today Extension, 如下表所示:
通过这个 APP Extension, 就具备了在 Today 中显示相关 Widget 视图的能力.
ShadowCoelLibrary
这个 Target 的主要功能是提供和代理功能相关的一些辅助功能. 之后会专门进行分析.
PacketProcessor
数据包处理器, 里面依赖了一个 tun2socks-iOS
.
PacketProcessor 提供了如下接口:
1 |
|
之后会专门进行分析.
ShadowCoelModel
在其中建立了 APP 中的核心数据结构, 比如:
1 |
|
详细的内容之后再分析.
ShadowCoelBase
提供其他辅助功能:
1 |
|
比如 ShadowCoel
类提供的功能如下:
1 |
|
详细的内容之后再分析.
阶段性总结
从上面两篇文章的分析, 可以看到, APP target 仅提供一个设置入口, 实际的代理配置主要通过 PacketTunnel 这个 APP Extension 来完成. 在其中启动 ss-local. 并通过进程间消息传递和 APP target, Today Extension 进行通信.
从下一篇文章开始, 将会介绍整个模仿实现的过程(开始会介绍整体需求获取和分析的过程).