将git commit SHA添加到iOS应用程序

时间:2012-09-12 12:49:06

标签: iphone objective-c ios xcode git

我想显示我的应用程序中构建项目时的当前git SHA。在iOS项目中以最小的努力这样做的好方法是什么?

6 个答案:

答案 0 :(得分:22)

  

版本2.17。建立a85b242。

如果您想添加如上所述的漂亮版本,请按以下步骤操作:

  1. Xcode
  2. 中打开Build Phases
  3. Add Build Phase
  4. Add Run Script Build Phase。您可以在顶部菜单编辑器中找到它。将脚本行拖到Target Dependencies之后的位置。
  5. 外壳行设置为/bin/sh
  6. 将下面的脚本设置为脚本字段。不要忘记将来源更改为您的路径到文件,其中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
    
  7. GitVersion.h文件导入 Xcode 项目

  8. 粘贴以下行:

    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);
    
  9.   

    可以找到完整记录的图像答案和描述的优势here

答案 1 :(得分:7)

您可以在计划中执行此操作。打开您的方案(编辑),展开您的方案中的Build,单击Pre-Actions,单击+按钮,选择New Run Script Action并编写一些获取SHA的脚本并修改一些头文件,您可以在其中放置SHA(最简单的方法是#define GIT_SHA @"...")并在您的应用中使用GIT_SHA,以便您可以展示它。

答案 2 :(得分:0)

对于Swift

enter image description here

其他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

  1. 添加构建脚本“运行脚本”

    #/ 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

  2. 将运行脚本移动/拖动到“编译源”上方

  3. 现在构建您的项目,它将在项目的根文件夹中创建一个文件AppInfo.swift
  4. 将一个AppInfo.swift拖放到Xcode项目导航器中。
  5. 使用如下

    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

这是一篇有关相对路径的好文章:

Relative paths on Xcode scripts

答案 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