我想显示我的项目在我的应用程序中构建时的当前 git SHA。在 iOS 项目中以最少的努力做到这一点的好方法是什么?
6 回答
2.17 版。构建 a85b242。
如果你想像上面那样添加漂亮的版本控制,只需按照以下步骤操作:
Build Phases
在Xcode中打开- 按
Add Build Phase
- 按
Add Run Script Build Phase
。您可以在顶部菜单Editor中找到它。将脚本行拖到 . 之后的位置Target Dependencies
。 - 将壳线设置为
/bin/sh
将下面的脚本设置为Script 字段。不要忘记将Sources更改为您的文件路径,
GitVersion.h
应该在哪里。例如: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);
可以在此处找到带有图像和描述的优点的完整记录的答案。
你可以在方案中做到这一点。打开您的方案(编辑),在您的方案中展开构建,单击 Pre-Actions,单击 + 按钮,选择 New Run Script Action 并编写一些脚本来获取 SHA 并修改一些可以放置 SHA 的头文件(最简单的方法是#define GIT_SHA @"..."
) 并GIT_SHA
在您的应用程序中可以显示它的地方使用。
对于斯威夫特
运行脚本
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
对于 Swift 项目
来源:https ://github.com/ankushkushwaha/AppVersionInXcode
添加构建脚本运行脚本
#/bin/sh
版本=$(git rev-parse --verify HEAD | cut -c 1-7)
fileContent="// 请勿编辑,// 这是机器生成的文件
// AppInfo.swift // 导入 Foundation 类 AppInfo { let version: String let build: String let gitCommitSHA: String = \"$version\" init?() { guard let version = Bundle.main.infoDictionary?[\"CFBundleShortVersionString \“] 作为?字符串,让 build = Bundle.main.infoDictionary?[\"CFBundleVersion\"] as? String else { return nil } self.version = version self.build = build } }" echo "$fileContent" > AppInfo.swift
在“编译源”上方移动/拖动运行脚本
- 现在构建您的项目,它将在项目的根文件夹中创建一个文件 AppInfo.swift
- 将一个拖放 AppInfo.swift 文件拖放到您的 Xcode 项目导航器中。
如下使用
守卫让 info = AppInfo() else { return } let infoText = "AppVersion: (info.version) \nBuild: (info.build) \nGit hash: (info.gitCommitSHA)" print(infoText)
很晚的答案,但对于那些需要得到的人来说Git Commit SHA
,这是一个简单的解决方案:
选择您想要获取的目标Git Commit SHA
。然后转到Build Phase
.
1- 通过按 + 按钮创建一个新的运行脚本阶段并添加以下脚本:
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 设置为此属性。
GIT_VERSION
4-从Info.plist
代码中读取。
灵感来源:这篇文章
此链接适用于我的情况,但我只想补充一点,添加项目路径和放置此自动生成的类的文件夹是一件好事。所以在我的情况下是:
echo "$fileContent" > ${SRCROOT}/MyProject/Models/AppInfo.swift
这是一篇关于相对路径的好帖子: