【发布时间】:2012-09-05 11:53:48
【问题描述】:
我想显示我的项目在我的应用程序中构建时的当前 git SHA。在 iOS 项目中以最少的努力做到这一点的好方法是什么?
【问题讨论】:
标签: iphone objective-c ios xcode git
我想显示我的项目在我的应用程序中构建时的当前 git SHA。在 iOS 项目中以最少的努力做到这一点的好方法是什么?
【问题讨论】:
标签: iphone objective-c ios xcode git
2.17 版。构建 a85b242。
如果您想像上面这样添加漂亮的版本控制,只需按照以下步骤操作:
Build Phases
Add Build Phase
Add Run Script Build Phase。您可以在顶部菜单编辑器中找到它。将脚本行拖到Target Dependencies之后的位置。/bin/sh
将下面的脚本设置为脚本字段。不要忘记将 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);
可以在here 找到带有图像和描述优势的完整记录答案。
【讨论】:
您可以在 Schemes 中执行此操作。打开您的方案(编辑),在您的方案中展开构建,单击 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
version=$(git rev-parse --verify HEAD | cut -c 1-7)
fileContent="// 不要编辑, // 这是机器生成的文件
// AppInfo.swift // 进口基金会 类 AppInfo { 让版本:字符串 让构建:字符串 让 gitCommitSHA: String = \"$version\" 在里面?() { 让版本 = Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as?细绳, 让 build = Bundle.main.infoDictionary?[\"CFBundleVersion\"] as?其他字符串 { 返回零 } self.version = 版本 self.build = 构建 } }" echo "$fileContent" > AppInfo.swift
在“编译源”上方移动/拖动运行脚本
如下使用
guard 让 info = AppInfo() else { 返回 } let infoText = "AppVersion: (info.version) \nBuild: (info.build) \nGit hash: (info.gitCommitSHA)" 打印(信息文本)
【讨论】:
答案很晚,但对于那些需要得到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 设置为此属性。
4- 在代码中从Info.plist 读取GIT_VERSION。
灵感来自:this post
【讨论】:
此链接适用于我的情况,但我只想补充一点,添加项目路径和放置此自动生成的类的文件夹是一件好事。所以在我的情况下是:
echo "$fileContent" > ${SRCROOT}/MyProject/Models/AppInfo.swift
这是一篇关于相对路径的好文章:
【讨论】: