Xcode工程管理-应用

540 阅读3分钟

上一篇 Xcode工程管理 中,我们大致了解了WorkSpace、Project、Configuration、Target、Scheme、依赖、环境变量和Shell脚本等,本篇简单介绍几个应用场景

1、读取编译产物.hmap文件

  • 使用了 终端配置工具DumpHeaderMap,配置方法参考下边

1.1、简单介绍终端配置

  • 无论是 下载的终端工具 还是自建命令行工具,最后要给终端使用,让终端能调用到命令,需要将它们的可执行文件放入一个文件夹,然后 将这个文件夹路径配置给PATH变量
1.1.1、Shell路径查看
  • PATH:当前Shell配置的路径,可执行文件只有在这些路径中才能在终端中调用命令

  • 执行% echo $PATH,多个路径间用冒号(:)分隔 image.png

1.1.2、Shell路径配置
  1. % echo $0:查看Shell是zsh还是bashimage.png

  2. % vim ~/.zshrc:根据类型进入文件 image.png

  3. 将可执行文件路径拼接进 PATH变量 image.png

  4. 这样终端就能调用到工具中的方法

1.2、读取.hmap文件

  1. Intermediates.noindex中间文件文件夹中,有很多.hmap文件生成 image.png

  2. 编写脚本遍历读取文件,执行DumpHeaderMap 文件名输出 image.png

    // 将 `~/.bashrc` 中的Shell内容导入到当前Shell
    source ~/.bashrc
    
    // Shell的for循环
    for i in 集合; do 操作;done
    

2、自制命令行工具

  • 自制命令行工具,并接受参数和环境变量
  • 进入 main.m 文件的 main函数 image.png
    • argc:main函数参数个数
    • argv:main函数参数数组
    • env当前Shell的环境变量,是个隐藏参数,项目默认是不显示的

2.1、Scheme设置向Main函数传递参数

  1. Edit Scheme --> Run --> Arguments --> Arguments Passed On Launch,增加main函数中的参数 image.png

  2. lldb中通过parray 读取变量数 变量名命令读取main函数参数组 image.png

    • 可以看到第1个参数是可执行文件路径
    • 第2、3个参数为Scheme添加内容

2.2、Scheme设置自定义环境变量

  1. Environment Variables定义Shell环境之外的环境变量 image.png

  2. 使用getenv(const char *)获取自定义的环境变量的值 image.png

小结

image.png

3、拷贝-Swift.h文件到指定目录

  • 当project中有Swift文件,且继承于OC并且是public的时,会产生-Swift.h文件,它的作用是将Swift文件转成OC能读懂的形式
  1. 创建1个静态库project(LZStaticLibrary

  2. 创建Swift文件会自动产生桥接文件:Target名-Bridging-Header.h(LZFile.swift) image.png image.png

  3. LZFile.swift文件中定义一个继承于NSObject的类

    import Foundation
    
    @objc
    public class LZFile: NSObject {
    
    }
    
  4. Xcode会自动生成Target名-Swift.h文件,用于OC调用Swift文件内容(OC调用Swift文件内容需要导入该头文件

    • 因为是编译过程中产生,因此 -Swift.h 文件会放到 中间产物目录 image.png
  5. 在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
    
  6. 编写脚本将 -Swift.h文件 copy 到project同级文件夹下 image.png

    // 将原始文件copy到目标位置 
    ditto 文件原始位置 目标位置
    
  7. -Swift.h文件 被copy到project路径并包裹一层文件夹,方便分享给其他开发者 image.png