可能使用"iOS必需原因API"的扫描器
基于文本的扫描器
这种扫描非常基础,基于字符串比较,但对于初步分析非常有帮助。
用法:
sh required_reason_api_text_scanner.sh {目录名}
示例输出:
在'./ViewController.swift'中发现潜在的必需原因API使用'UserDefaults' 行号:28
基于ripgrep的更快文本扫描器
这种扫描应该产生与基于文本的扫描器类似的结果,但使用ripgrep
以获得更快的结果,特别适用于中型到大型仓库 - 文本扫描器可能需要几分钟才能完成,而这个扫描器应该能在几秒钟内完成。
用法:
安装ripgrep
后,例如brew install ripgrep
,
sh ripgrep_required_reason_api_text_scanner.sh {目录名}
输出以grep
的标准格式显示。
基于二进制的扫描器
这个扫描器使用nm
在DerivedData文件夹中的二进制文件中查找符号。
它将查找.app
、.framework
和.a
二进制文件。
请记住,在应用程序(.app
)中找到的符号将与静态库.a
中找到的符号重复,因为它们是静态链接的。
用法:
sh required_reason_api_binary_scanner.sh {目录}
示例输出:
sh required_reason_api_binary_scanner.sh \
~/Library/Developer/Xcode/DerivedData/DemoSymbols-aymfeypsyhqwfuaieijkrqdeohcd/Build/Products/Debug-iphonesimulator
> 分析二进制文件:./DemoSymbols.app/DemoSymbols
> ---
> 二进制文件./DemoSymbols.app/DemoSymbols中使用的符号:activeInputModes, fgetattrlist, fstat, fstatat, fstatfs, fstatvfs, getattrlist, getattrlistat, getattrlistbulk, lstat, mach_absolute_time, NSFileCreationDate, NSFileModificationDate, NSFileSystemFreeSize, NSFileSystemSize, NSURLContentModificationDateKey, NSURLCreationDateKey, NSURLVolumeAvailableCapacityForImportantUsageKey, NSURLVolumeAvailableCapacityForOpportunisticUsageKey, NSURLVolumeAvailableCapacityKey, NSURLVolumeTotalCapacityKey, NSUserDefaults, stat, statfs, statvfs, systemUptime
示例项目
在DemoSymbols
目录中,你会找到一个使用了所有Apple要求提供必需原因的代码的项目。
它用于测试这些扫描器。