【注意】最后更新于 November 23, 2021,文中内容可能已过时,请谨慎使用。
A1:追问和反思经验
在梳理项目中老模块时,发现代码维护经手人不同的编码风格,出现功能和代码目录结构无法匹配,在缺少文档情况下,想着手整理项目结构,需要做哪些努力?目前方案是按MVC基础模型来整理目录结构,将控制器,视图,模型,整合在一起,让功能和代码更加清晰可见。如何做到代码整合,需要知道代码之间的依赖关系,即类之间通过import相互引用的关系,通过这套关系整理类结构的以来。想到的是获取类之间的以来关系,
I: 分析和整理信息知识点
通过objc工具生成类似管理卡片的工具
A2:内化应用知识,谱写愿景
在实际开发项目中,通过objc工具统计代码设计的合理性,有助于复盘开发设计。
要事第一,制定下一步行动
objc-dependency-visualizer
Drafter
样例:Objc-dependency-visualizer
objc生成类依赖关系图的操作步骤:
是否支持workspace 管理下的项目。
如何对一个目录下的类生成类依赖图谱
帮助命令
通过帮助命令,理解支持的功能和生成依赖所需的资源。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| $ ./generate-objc-dependencies-to-json.rb -h
Usage: objc_dependency_tree_generator [options]
General options:
-p, --path PATH Path to directory where are your .o files were placed by the compiler
-D DERIVED_DATA Path to directory where DerivedData is
-s PROJECT_NAME Search project .o files by specified project name
-t, --target TARGET_NAME Target of project
-e PREFIXES Prefixes of classes those will be exсluded from visualization.
NS|UI
UI|CA|MF
-d, --use-dwarf-info Use DWARF Information also
-w, --swift-dependencies Generate swift project dependencies
-k FILENAME Generate dependencies from source kitten output (json)
--ast-file FILENAME Generate dependencies from the swift ast dump output (ast)
--ast-show-parsed-tree Show ast parsing info (for swift ast parser only)
--inheritance-only Show only inheritance dependencies
-f FORMAT Output format. json by default. Possible values are [dot|json-pretty|json|json-var|yaml]
-o, --output OUTPUT_FILE target of output
Common options:
-h Prints this help
|
脚本依赖 .o
文件,在生成类图依赖时,需要先编译源码,生成 .o 文件。
脚本默认先从 -D 指向的Xcode编译的DeriveData 目录中,查找build 的项目的 .o
文件。
在特殊的情况下,可以通过 -p
指向特殊的 .o
目录位置,然后生成依赖。
即生成类图依赖图主要依赖 .o
文件,知道这个原理之后,才能正确的理解命令的使用方法。
命令支持更多的方式:使用手册
project
名称:("")表示匹配任何字符串的最新项目
1
| ./generate-objc-dependencies-to-json.rb -d -s "" > origin.js ; open index.html
|
在不指明生成哪个项目时,如 -s ""
,脚本默认对Xcode最后一次编译的项目作用。
例如,如下生成命令,和输入日志:
1
2
3
4
5
6
7
8
9
| ./generate-objc-dependencies-to-json.rb -d -s ""
日志输入:
find: /Users/boyer/Library/Caches/appCode*/DerivedData: No such file or directory
There were 208 directories found
Last modifications were in
/Users/boyer/Library/Developer/Xcode/DerivedData/ObjcDepVisuTest-xxxxxtn/Build/Intermediates.noindex/ObjcDepVisuTest.build/Debug-iphonesimulator/ObjcDepVisuTest.build/Objects-normal/x86_64
directory at
2021-11-04 17:01:43 +0800
|
- 项目名称中包含任何内容("")的最新 Swift 项目
- 从传递的 SourceKitten 文档输出中解析并显示图形
- 从 Swift AST 转储输出解析并显示图形
- 项目名称以“PR”开头的最新项目依赖项
- 从目标文件
- 从多个目录中的目标文件
- 来自名为“X”的项目的特定目标“T”
- 来自名为“X”的项目的特定目标“T1”和“T2”
- 来自项目名称为“X”的特定子项目“S1”和“S2”
- 下载脚本文件
- 执行生成图谱脚本
通过 .o(object)
文件生成依赖图谱
通过编译目录
通过源码目录