ios 如何在Xcode中包含git提交哈希值?

c9qzyr3d  于 2023-01-27  发布在  iOS
关注(0)|答案(4)|浏览(113)

我有一个应用程序,人们可以直接从它报告bug,但我希望用户能够提交应用程序构建所基于的git哈希。Xcode是否公开了一个包含此信息的#define,或者我必须将其包含在一些自定义构建脚本中?

os8fio9y

os8fio9y1#

我已经根据gagarwal的回答编写了一个实现,在编译阶段之前,我在构建阶段添加了这个构建脚本:

/usr/libexec/PlistBuddy -c "Set :GIT_COMMIT_HASH `git rev-parse HEAD`" "${TARGET_BUILD_DIR}"/"${INFOPLIST_PATH}"

在我的代码中,我通过调用以下函数来引用它:

[[NSBundle mainBundle] infoDictionary][@"GIT_COMMIT_HASH"];

瞧,您最后一次提交的哈希值在运行时可用!

tsm1rwdh

tsm1rwdh2#

Xcode 12+解决方案

  • 注意:* 您可以避免手动修改Info.plist,只需执行以下步骤:

1.相加New run script phase
1.插入脚本:

INFO_PLIST="${TARGET_BUILD_DIR}"/"${INFOPLIST_PATH}"

# Query and save the value; suppress any error message, if key not found.
value=$(/usr/libexec/PlistBuddy -c 'print :GitCommitHash' "${INFO_PLIST}" 2>/dev/null)

# Check if value is empty
if [ -z "$value" ] 
then
   /usr/libexec/PlistBuddy -c "Add :GitCommitHash string" "${INFO_PLIST}"
fi

/usr/libexec/PlistBuddy -c "Set :GitCommitHash `git rev-parse --short HEAD`" "${INFO_PLIST}"

1.将$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH$TARGET_BUILD_DIR/$INFOPLIST_PATH添加到Input Files属性(重要信息!
1.确保相位在Copy Bundle Resources相位之后
现在你可以访问提交哈希了:

extension Bundle {
  var commitHash: String? {
    infoDictionary?["GitCommitHash"] as? String
  }
}

print(Bundle.main.commitHash ?? "undefined")

cqoc49vn

cqoc49vn3#

这在Xcode 12上不起作用。在将GIT_COMMIT_HASH放入Info.plist文件后,我将以下内容放入上面提到的Build Phases步骤:

COMMIT_HASH=`git rev-parse --short HEAD`
/usr/libexec/PlistBuddy -c "Set :GIT_COMMIT_HASH $COMMIT_HASH" "${INFOPLIST_FILE}"

然后,您可以通过以下方式在Swift中访问它:

Bundle.main.object(forInfoDictionaryKey: "GIT_COMMIT_HASH")
nimxete2

nimxete24#

1.添加目标的信息。plist GIT_COMMIT_HASH密钥x1c 0d1x
1.编译阶段之前的构建阶段:
/usr/libexec/PlistBuddy -c“设置:GIT提交哈希'git rev-parse --short HEAD'““${项目目录}/${信息列表文件}”

相关问题