User Script Sandboxing作用 及 在iOS项目中获取GitCommitHash

ops/2024/12/27 7:14:45/

User Script Sandboxing 设置为 NO 。这个设置控制了 Xcode 脚本的沙盒限制,默认情况下,Xcode 会将脚本放入沙盒环境中,限制其访问文件系统的权限,尤其是对某些目录(例如项目文件夹之外的文件)进行修改时,会出现权限问题。
通过将 User Script Sandboxing 设置为 NO,您可以允许脚本访问文件系统中的任何位置,从而避免 Operation not permitted 的错误。

如何禁用 User Script Sandboxing

  1. 打开 Xcode 项目。
  2. 选择 Xcode 菜单中的 File > Project Settings。
  3. 在项目设置窗口中,找到 Build Settings。
  4. 搜索 User Script Sandboxing,并将其设置为 NO。

这将允许您的脚本在构建过程中访问文件系统中的更多内容,并修改文件。

注意事项:

  1. 安全性: 禁用沙盒模式可能会对您的项目构建过程带来潜在的风险,特别是如果您在脚本中执行了不受信任的操作。在禁用沙盒后,请确保您的脚本和操作安全可靠。
  2. 权限问题: 即使禁用了沙盒,有时系统级的权限(例如 sudo 权限)仍然可能影响文件的读写权限。如果您使用了类似/etc//System/ 这样的系统目录,您可能需要使用管理员权限。

总的来说,禁用沙盒模式是解决您遇到的权限问题的一种方法,但需要确保其他安全措施不受影响。
要实现将 Git 提交版本号和 Git 分支名称写入 Info.plist 并通过代码读取,可以按照以下步骤操作:

步骤 1: 创建或更新 Info.plist

首先,您需要确保 Info.plist 文件中包含 Git 提交版本号和 Git 分支名称这两个字段。您可以在 Info.plist 中手动添加,也可以通过脚本自动化添加。以下是您可以在 Info.plist 文件中添加的内容:

<key>GitCommitHash</key>
<string>your_git_commit_hash_here</string>
<key>GitBranch</key>
<string>your_git_branch_here</string>

其中,your_git_commit_hash_hereyour_git_branch_here 将会在构建过程中被动态替换。

步骤 2: 编写脚本自动写入 Info.plist

为了自动将 Git 提交版本号和 Git 分支名称写入 Info.plist,您可以在 Xcode 的构建过程中使用一个自定义的 Shell 脚本。这个脚本将通过 Git 获取当前的提交哈希值和分支名称,并将它们写入 Info.plist
在 Xcode 项目中添加脚本

  1. 在 Xcode 中,选择您的项目目标。
    2.转到 Build Phases,点击左上角的 + 按钮,选择 New Run Script Phase。
    3.将以下脚本添加到脚本框中:
bash 代码解读复制代码#!/bin/bash# 获取当前 Git 提交的哈希值(短格式)
commit_hash=$(git rev-parse --short HEAD)# 获取当前 Git 分支的名称
branch_name=$(git rev-parse --abbrev-ref HEAD)# 获取 Info.plist 文件路径
plist_path="${PROJECT_DIR}/YourProject/Info.plist"  # 请替换为实际路径# 修改 Info.plist 中的 Git 信息
/usr/libexec/PlistBuddy -c "Set :GitCommitHash $commit_hash" "$plist_path"
/usr/libexec/PlistBuddy -c "Set :GitBranch $branch_name" "$plist_path"
  1. 保存并构建项目。

此脚本将会在每次构建时执行,并将当前 Git 提交哈希和分支名称动态写入 Info.plist 文件中的 GitCommitHash 和 GitBranch 键。

步骤 3: 在代码中读取 Git 信息

在您的代码中,您可以像您提到的那样,通过 Bundle.main.infoDictionary 读取这些值:

swift 代码解读复制代码// MARK: - Git 相关信息/// 获取 Git 提交版本号
static var gitCommitHash: String {guard let commitHash = Bundle.main.infoDictionary?["GitCommitHash"] as? String else {return "未知提交"}return commitHash
}/// 获取 Git 分支名称
static var gitBranch: String {guard let branch = Bundle.main.infoDictionary?["GitBranch"] as? String else {return "未知分支"}return branch
}

小结

  • 步骤 1:确保 Info.plist 包含 GitCommitHash 和 GitBranch 键。
  • 步骤 2:使用自定义脚本获取 Git 信息并将其写入 Info.plist。
  • 步骤 3:通过 Bundle.main.infoDictionary 读取这些信息。

这样,您就能在应用中动态获取到当前的 Git 提交版本号和分支名称,并通过 Info.plist 将其传递给应用。

作者:LGL
链接:https://juejin.cn/post/7439973899334844416
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


http://www.ppmy.cn/ops/145313.html

相关文章

ChatGPT生成接口文档实践案例(一)

生成接口文档的方法有很多&#xff0c;如研发人员手工编写或通过Swagger、Postman、Apiary、ChatGPT自动生成。在此仅针对利用ChatGPT生成接口文档的方法进行介绍&#xff0c;其他两种方法不赘述。 以飞机订票系统的用户注册功能为例&#xff0c;其用户注册的界面如图5-9所示。…

08. 基于docker-compose部署LNMP架构

目录 前言 1、docker 1.1 任务要求 1.2 关闭防火墙 1.3 安装docker 1.4 配置镜像加速下载 2、Nginx 2.1 建立工作目录并进行相关操作 2.2 准备 nginx.conf 配置文件 3、Mysql 3.1 建立工作目录并进行相关操作 3.2 编写 my.cnf 配置文件 4、PHP 4.1 建立工作目录并…

Electron -- ipcMain 和 ipcRenderer的 区别(五)

ipcMain 和 ipcRenderer 是 Electron 中用于进程间通信&#xff08;IPC&#xff09;的两个不同的模块&#xff0c;它们分别运行在不同的进程中&#xff0c;并且有不同的用途&#xff1a; ipcMain ipcMain 是在主进程中使用的模块。它用于监听渲染进程&#xff08;或其他主进程…

【c语言】一维数组与二维数组

数组 数组名代表的是数组在内存中的起始位置&#xff0c;即首元素的地址&#xff0c;而下表表示的则是该元素相对数组起始位置的偏移量 一维数组 1.定义 类型名 数组名[数组长度] int a[100]; //整型数组长度为101&#xff0c;数组名为a char b[100];//字符型数组长度为101&…

C++设计模式:享元模式 (附文字处理系统中的字符对象案例)

什么是享元模式&#xff1f; 享元模式是一个非常实用的结构型设计模式&#xff0c;它的主要目的是节省内存&#xff0c;尤其在需要创建大量相似对象时。 通俗解释&#xff1a; 想象我们在写一本书&#xff0c;每个字母都需要表示出来。如果每个字母都单独用对象表示&#xff…

在Nginx部署Web应用,如何保障后端API的安全

1. 使用HTTPS和http2.0 参考&#xff1a;Nginx配置HTTP2.0_nginx 支持 2.0-CSDN博客 2. 设置严格的CORS策略 通过add_header指令设置CORS头。 只允许来自https://frontend.yourdomain.com的请求访问API location /api/ {if ($http_origin ~* (https://frontend\.yourdomai…

存储块的删除与状态查询

目录 存储块的删除 设计实现 存储块的删除 仅需删除任务列表的所有任务&#xff0c;无需在意空闲存储块。 设计实现 存储块的删除&#xff08;清空过程中可能有任务就绪&#xff0c;需执行一次调度&#xff09;存储块的状态查询&#xff08;当前存储块的计数、允许的最大计数、…

报表工具DevExpress Reporting v24.2亮点 - AI功能进一步强化

DevExpress Reporting是.NET Framework下功能完善的报表平台&#xff0c;它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集&#xff0c;包括数据透视表、图表&#xff0c;因此您可以构建无与伦比、信息清晰的报表。 报表工具DevExpress Reporting v24.2将于近期发…