上一篇 Xcode工程管理 中,我们大致了解了WorkSpace、Project、Configuration、Target、Scheme、依赖、环境变量和Shell脚本等,本篇简单介绍几个应用场景
1、读取编译产物.hmap文件
- 使用了 终端配置工具DumpHeaderMap,配置方法参考下边
1.1、简单介绍终端配置
- 无论是 下载的终端工具 还是
自建命令行工具,最后要给终端使用,让终端能调用到命令,需要将它们的可执行文件放入一个文件夹,然后 将这个文件夹路径配置给PATH变量
1.1.1、Shell路径查看
-
PATH:当前Shell配置的路径,可执行文件只有在这些路径中才能在终端中调用命令 -
执行
% echo $PATH,多个路径间用冒号(:)分隔
1.1.2、Shell路径配置
-
% echo $0:查看Shell是zsh还是bash的 -
% vim ~/.zshrc:根据类型进入文件 -
将可执行文件路径拼接进 PATH变量
-
这样终端就能调用到工具中的方法
1.2、读取.hmap文件
-
在
Intermediates.noindex中间文件文件夹中,有很多.hmap文件生成 -
编写脚本遍历读取文件,执行
DumpHeaderMap 文件名输出// 将 `~/.bashrc` 中的Shell内容导入到当前Shell source ~/.bashrc // Shell的for循环 for i in 集合; do 操作;done
2、自制命令行工具
- 自制命令行工具,并接受参数和环境变量
- 进入 main.m 文件的 main函数
argc:main函数参数个数argv:main函数参数数组env:当前Shell的环境变量,是个隐藏参数,项目默认是不显示的
2.1、Scheme设置向Main函数传递参数
-
Edit Scheme --> Run --> Arguments --> Arguments Passed On Launch,增加main函数中的参数
-
lldb中通过
parray 读取变量数 变量名命令读取main函数参数组- 可以看到
第1个参数是可执行文件路径 - 第2、3个参数为Scheme添加内容
- 可以看到
2.2、Scheme设置自定义环境变量
-
Environment Variables 中 定义Shell环境之外的环境变量
-
使用
getenv(const char *)获取自定义的环境变量的值
小结
3、拷贝-Swift.h文件到指定目录
- 当project中有Swift文件,且
继承于OC,并且是public的时,会产生-Swift.h文件,它的作用是将Swift文件转成OC能读懂的形式
-
创建1个静态库project(LZStaticLibrary)
-
创建Swift文件会自动产生桥接文件:
Target名-Bridging-Header.h(LZFile.swift) -
LZFile.swift文件中定义一个继承于NSObject的类
import Foundation @objc public class LZFile: NSObject { } -
Xcode会自动生成
Target名-Swift.h文件,用于OC调用Swift文件内容(OC调用Swift文件内容需要导入该头文件)- 因为是编译过程中产生,因此 -Swift.h 文件会放到 中间产物目录
- 因为是编译过程中产生,因此 -Swift.h 文件会放到 中间产物目录
-
在OC文件中使用Swift内容,需要导入 -Swift.h头文件
#import "LZStaticLibrary.h" // 导入-Swift.h头文件 #import "LZStaticLibrary-Swift.h" @implementation LZStaticLibrary - (instancetype)init { self = [super init]; if (self) { LZFile *file = [LZFile new]; } return self; } @end -
编写脚本将 -Swift.h文件 copy 到project同级文件夹下
// 将原始文件copy到目标位置 ditto 文件原始位置 目标位置 -
-Swift.h文件 被copy到project路径并包裹一层文件夹,方便分享给其他开发者