写点什么

在 iOS App 中显示 Build 时间和 git 分支名和 commit 哈希

用户头像
疯清扬
关注
发布于: 2020 年 11 月 01 日
在 iOS App 中显示 Build 时间和 git 分支名和 commit 哈希

前言

无论测试包还是线上包,如果能在 App 里显示(直接显示或隐藏入口中显示) Build 时间和 git 分支名和 commit 哈希, 将有利于我们复现和定位 bug。那如何在 App 里将以上信息优雅地显示出来呢?做了一番搜索后,现将实现方法总结到本文章中。

显示 Build 时间

获取 Build 时间:

NSString *buildTime = [NSString stringWithFormat: @"Build: %s %s", __DATE__, __TIME__];NSLog(@"%@", buildTime);
//输出结果格式为://Build: Nov 1 2020 21:26:32
复制代码

如果需要,可以对日期格式进行格式化:

NSDateFormatter *formatter = [NSDateFormatter new];[formatter setLocale: [[NSLocale alloc] initWithLocaleIdentifier: @"en_US_POSIX"]];[formatter setDateFormat:@"MMddyyyy"];NSDate *date = [formatter dateFromString: [NSString stringWithFormat: @"%s", __DATE__]];
formatter = [NSDateFormatter new];formatter.dateFormat = @"yyyy-MM-dd";
NSString *buildTime = [NSString stringWithFormat: @"Build: %@ %s", [formatter stringFromDate: date], __TIME__];NSLog(@"%@", buildTime);
//输出结果格式为://Build: 2020-11-01 21:26:32
复制代码

获取到 Build 时间之后,可以将其显示在 App 的设置页面底部;或者默认隐藏,当用户触发某些机关(如连续点击“关于”文字 5 次)之后再显示出来。

显示 git 分支名和 commit 哈希

为了说明这个问题,首先常见一个示例工程 GitInfoDemo,并使用 git init 初始化 git 仓库,并创建一个 commit。


  1. 创建 BuildInfo.plist 文件:

打开工程,在 Info.plist 文件所在目录新建一个 plist 文件,命名为 BuildInfo.plist。并在 BuildInfo.plist 中增加一个 String 类型的字段 GIT_INFO,该字段的值为空,这一步是必需的。




  1. 创建脚本代码


选中工程 -> 选中 Target -> 选中 Build Phases,

点击红圈中的“+”按钮,

在弹出框中选择“New Run Script Phase”,

如下图所示,将脚本代码拷贝进代码区:

#Update git info to BuildInfo.plistgit_branch=$(git branch --show-current)git_commit=$(git log -1 --format="%h")info_plist="${SRCROOT}/${PROJECT_NAME}/BuildInfo.plist"/usr/libexec/PlistBuddy -c "Set GIT_INFO '${git_branch}-${git_commit}'" "${info_plist}"
复制代码



  1. 使用如下代码读取 BuildInfo.plist 中的数据:

NSString *path = [[NSBundle mainBundle] pathForResource: @"BuildInfo" ofType: @"plist"];NSString *version = [NSDictionary dictionaryWithContentsOfFile: path][@"GIT_INFO"];NSLog(@"%@", version);//输出示例如下://master-60236ba
复制代码
  1. 注意事项:切换分支或更新 commit 号之后的首次编译或运行将不能得到正确的输出,因为 git 信息更新后,要等第一次编译结束 Shell 脚本才能更新 BuildInfo.plist 文件。在实际项目中,这个瑕疵一般是不影响输出结果的,因为我们可以在 Archive 正式包前,可以至少 Build 或 Run 一次工程来规避此问题。


  1. BuildInfo.plist 初始版本文件是必要的,但不需要使用 git 跟踪此文件的更改。我们可以在 BuildInfo.plist 文件被添加到 git 仓库后,使用 git update-index --no-assume-unchanged BuildInfo.plist 命令来停止跟踪此文件的更新。

总结

当 bug 发生时,如果知道 bug 发生的包所对用的代码状态,将有利于我们快速定位并修改 bug。本文介绍了在 App 中显示编译时间和 git 信息的方法,使用本方法,将一劳永逸地解决掉 bug 和代码版本难以对应的问题。


下图是 Demo 运行结果的样子:


发布于: 2020 年 11 月 01 日阅读数: 46
用户头像

疯清扬

关注

生于忧患,死于安乐。 2017.10.30 加入

为自由人生而奔波的程序员。

评论

发布
暂无评论
在 iOS App 中显示 Build 时间和 git 分支名和 commit 哈希