我想显示我的应用程序中构建项目时的当前git SHA。在iOS项目中以最小的努力这样做的好方法是什么?
答案 0 :(得分:22)
版本2.17。建立a85b242。
如果您想添加如上所述的漂亮版本,请按以下步骤操作:
Build Phases
Add Build Phase
Add Run Script Build Phase
。您可以在顶部菜单编辑器中找到它。将脚本行拖到Target Dependencies
之后的位置。/bin/sh
将下面的脚本设置为脚本字段。不要忘记将来源更改为您的路径到文件,其中GitVersion.h
应该是。{1}}。例如:
version=$(git rev-parse --verify HEAD | cut -c 1-7)
curdate=$(date +"%d.%m.%y")
filesource="//\n// GitVersion.h\n//\n// Created by sig on $curdate.\n//\n\n#ifndef GitVersion_h\n#define GitVersion_h\n\n#define GIT_SHA_VERSION @\"$version\"\n\n#endif"
cd ${SOURCE_ROOT}/${PROJECT_NAME}
echo -e "$filesource" > Sources/GitVersion.h
touch Sources/GitVersion.h
将GitVersion.h
文件导入 Xcode 项目
粘贴以下行:
NSDictionary *info = [[NSBundle mainBundle] infoDictionary];
NSString *version = [info objectForKey:@"CFBundleShortVersionString"];
NSString *app_version = [NSString stringWithFormat:@"Version %@. Build %@.", version, GIT_SHA_VERSION];
NSLog(@"app_version : %@", app_version);
可以找到完整记录的图像答案和描述的优势here。
答案 1 :(得分:7)
您可以在计划中执行此操作。打开您的方案(编辑),展开您的方案中的Build,单击Pre-Actions,单击+按钮,选择New Run Script Action并编写一些获取SHA的脚本并修改一些头文件,您可以在其中放置SHA(最简单的方法是#define GIT_SHA @"..."
)并在您的应用中使用GIT_SHA
,以便您可以展示它。
答案 2 :(得分:0)
对于Swift
其他Swift Flags {{3}}
运行脚本
version=$(git rev-parse --verify HEAD | cut -c 1-10)
commitDate=$(git log -n 1 HEAD --pretty=format:"%h - %cd" | cut -c 12-)
filesource="//\n// GitVersion.swift\n//\n// Commit Date:$commitDate\n//\n\n#if DEBUG\nlet gitVersion = \"$version\"\n#endif"
cd ${SOURCE_ROOT}/${PROJECT_NAME}
echo -e "$filesource" > GitVersion.swift
touch GitVersion.swift
<强> GitVersion.swift 强>
//
// GitVersion.swift
//
// Commit Date: Tue Jun 19 11:09:55 2018 +0900
//
#if DEBUG
let gitVersion = "2fd2f0315d"
#endif
答案 3 :(得分:0)
对于Swift项目
来源:https://github.com/ankushkushwaha/AppVersionInXcode
添加构建脚本“运行脚本”
#/ bin / sh
version = $(git rev-parse --verify HEAD | cut -c 1-7)
fileContent =“ //请勿编辑, //这是机器生成的文件
// AppInfo.swift // 进口基金会 类AppInfo { let版本:字符串 让我们建立:字符串 让gitCommitSHA:字符串= \“ $ version \” 在里面?() { 警卫让版本= Bundle.main.infoDictionary?[\“ CFBundleShortVersionString \”]为?串, 让build = Bundle.main.infoDictionary?[\“ CFBundleVersion \”]表示为?其他字符串{ 返回零 } self.version =版本 self.build =构建 } }” echo“ $ fileContent”> AppInfo.swift
将运行脚本移动/拖动到“编译源”上方
使用如下
guard let info = AppInfo()else { 返回 } let infoText =“ AppVersion:(info.version)\ nBuild:(info.build)\ nGit哈希:(info.gitCommitSHA)” print(infoText)
答案 4 :(得分:0)
此链接适用于我的情况,但我要补充一点,添加项目路径和此自动生成的类所在的文件夹是一件好事。因此,以我为例:
echo "$fileContent" > ${SRCROOT}/MyProject/Models/AppInfo.swift
这是一篇有关相对路径的好文章:
答案 5 :(得分:0)
答案很晚,但是对于需要获得Git Commit SHA
的人来说,这是一个简单的解决方案:
选择要为其获取Git Commit SHA
的目标。然后转到Build Phase
。
1-通过按+按钮并添加以下脚本来创建新的运行Scrip阶段:
git_version=$(git log -1 --format="%h")
info_plist="${SRCROOT}/{THE_PATH_TO_PLIST_FILE}/Info.plist"
/usr/libexec/PlistBuddy -c "Set :GIT_VERSION '${git_version}'" "${info_plist}"
请记住将{THE_PATH_TO_PLIST_FILE}
替换为plist文件的真实路径。
3-现在,转到相同目标的Info.plist
并添加一个名为GIT_VERSION
的新属性。该脚本会将GitVersion设置为此属性。
4-用代码从GIT_VERSION
中读取Info.plist
。
灵感来自:this post