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 文件,知道这个原理之后,才能正确的理解命令的使用方法。

命令支持更多的方式:使用手册

  1. 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
  1. 项目名称中包含任何内容("")的最新 Swift 项目
  2. 从传递的 SourceKitten 文档输出中解析并显示图形
  3. 从 Swift AST 转储输出解析并显示图形
  4. 项目名称以“PR”开头的最新项目依赖项
  5. 从目标文件
  6. 从多个目录中的目标文件
  7. 来自名为“X”的项目的特定目标“T”
  8. 来自名为“X”的项目的特定目标“T1”和“T2”
  9. 来自项目名称为“X”的特定子项目“S1”和“S2”
  1. 下载脚本文件
  2. 执行生成图谱脚本
    1. 通过 .o(object) 文件生成依赖图谱

    2. 通过编译目录

    3. 通过源码目录