12

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

4

6 回答 6

24

2.17 版。构建 a85b242。

如果你想像上面那样添加漂亮的版本控制,只需按照以下步骤操作:

  1. Build PhasesXcode中打开
  2. Add Build Phase
  3. Add Run Script Build Phase。您可以在顶部菜单Editor中找到它。将脚本行拖到 . 之后的位置Target Dependencies
  4. 线设置为/bin/sh
  5. 将下面的脚本设置为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
    
  6. GitVersion.h将文件导入Xcode项目

  7. 粘贴这些行:

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

可以在此处找到带有图像和描述的优点的完整记录的答案。

于 2013-10-28T13:06:26.810 回答
5

你可以在方案中做到这一点。打开您的方案(编辑),在您的方案中展开构建,单击 Pre-Actions,单击 + 按钮,选择 New Run Script Action 并编写一些脚本来获取 SHA 并修改一些可以放置 SHA 的头文件(最简单的方法是#define GIT_SHA @"...") 并GIT_SHA在您的应用程序中可以显示它的地方使用。

于 2012-09-12T13:17:48.407 回答
1

对于斯威夫特

Git 日志格式链接

其他 Swift 标志 在此处输入图像描述

运行脚本

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
于 2018-06-19T04:34:32.867 回答
1

对于 Swift 项目

来源:https ://github.com/ankushkushwaha/AppVersionInXcode

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

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

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

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

    守卫让 info = AppInfo() else { return } let infoText = "AppVersion: (info.version) \nBuild: (info.build) \nGit hash: (info.gitCommitSHA)" print(infoText)

于 2018-07-06T09:36:38.980 回答
1

很晚的答案,但对于那些需要得到的人来说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_VERSION4-从Info.plist代码中读取。

灵感来源:这篇文章

于 2020-04-27T09:15:13.287 回答
0

此链接适用于我的情况,但我只想补充一点,添加项目路径和放置此自动生成的类的文件夹是一件好事。所以在我的情况下是:

echo "$fileContent" > ${SRCROOT}/MyProject/Models/AppInfo.swift

这是一篇关于相对路径的好帖子:

Xcode 脚本上的相对路径

于 2018-12-25T10:28:25.310 回答