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

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 文件中添加的内容:

xml 复制代码
<key>GitCommitHash</key>
<string>your_git_commit_hash_here</string>
<key>GitBranch</key>
<string>your_git_branch_here</string>

其中,your_git_commit_hash_here 和 your_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"

  2. 保存并构建项目。

此脚本将会在每次构建时执行,并将当前 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

来源:稀土掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关推荐
传奇开心果编程7 小时前
【SwiftUI娓娓道来】第3课:让界面活起来——交互与动画指南
学习·macos·ui·ios·swiftui·swift
可乐鸡翅yeah_8 小时前
新手梳理:M3U8 线上问题,哪些是前端锅,哪些是后端锅
前端·ios·音视频·实时音视频·m3u8·音视频在线播放
西部驯兽师8 小时前
制造企业的信息化选型课题(一)
职场和发展
天真小巫10 小时前
2026.9.28总结
职场和发展
我命由我1234510 小时前
经纪人的职业定义
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
hqyjzsb12 小时前
法律 Prompt 干货:搭建合同审查提示词要包含哪些要素
开发语言·人工智能·python·职场和发展·数据分析·prompt·业界资讯
00后程序员张13 小时前
苹果App Store上架指南:费用、原理与步骤详解
android·ios·小程序·https·uni-app·iphone·webview
黑科技iOS上架14 小时前
Unity3D游戏过审App Store4.3机审实战
ios·审核·ios混淆·执行程序差异化
用户380341658829716 小时前
控制中心一键后台录音:我被自己的 Spike 骗了两次
ios·swift
Crazy_MT16 小时前
App 可能不再是入口:从 iOS 27 快捷指令看苹果的 AI Agent 野心
人工智能·ios·apple