【问题标题】:Add git commit SHA to iOS application将 git commit SHA 添加到 iOS 应用程序
【发布时间】:2012-09-05 11:53:48
【问题描述】:

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

【问题讨论】:

    标签: iphone objective-c ios xcode git


    【解决方案1】:

    2.17 版。构建 a85b242。

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

    1. Xcode 中打开 Build Phases
    2. Add Build Phase
    3. Add Run Script Build Phase。您可以在顶部菜单编辑器中找到它。将脚本行拖到Target Dependencies之后的位置。
    4. Shell行设置为/bin/sh
    5. 将下面的脚本设置为脚本字段。不要忘记将 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);
      

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

    【讨论】:

    • 然后你每次都提交这个文件?
    【解决方案2】:

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

    【讨论】:

    • “写一些脚本”部分是重要的部分。你的答案基本上是 “我如何让 Xcode 在编译时做某事”,而问题本质上是 “我如何让 Xcode 在编译时获取当前的 Git SHA 并使其可访问Objective-C/Swift 代码”.
    【解决方案3】:

    对于斯威夫特

    Git log format link

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

    【讨论】:

      【解决方案4】:

      对于 Swift 项目

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

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

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

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

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

        guard 让 info = AppInfo() else { 返回 } let infoText = "AppVersion: (info.version) \nBuild: (info.build) \nGit hash: (info.gitCommitSHA)" 打印(信息文本)

      【讨论】:

        【解决方案5】:

        答案很晚,但对于那些需要得到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

        【讨论】:

          【解决方案6】:

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

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

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

          Relative paths on Xcode scripts

          【讨论】:

            猜你喜欢
            • 2016-01-06
            • 2017-01-01
            • 2014-08-14
            • 2014-02-10
            • 1970-01-01
            • 1970-01-01
            • 2020-02-14
            • 2013-02-16
            • 1970-01-01
            相关资源
            最近更新 更多