Xcode:在每次构建之前运行直接修改源代码的脚本

2024-03-28

我做了什么:

我有一个脚本

  1. 阅读一些配置文件来生成源代码片段
  2. 找到相关的 Objective-C 源文件并
  3. 将源代码的某些部分替换为步骤 1 中生成的代码。

和一个 Makefile,它有一个特殊的时间戳文件作为 make 目标,配置文件作为目标源:

SRC = $(shell find ../config -iname "*.txt")
STAMP = $(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME).stamp
$(STAMP): $(SRC)
    python inject.py
    touch $(STAMP)

我将此 Makefile 添加为项目目标的构建阶段堆栈顶部的“运行脚本构建阶段”。

发生了什么:

脚本构建阶段在编译源代码之前运行。

但是,由于脚本在执行过程中修改了源代码,因此我需要构建twice获取构建产品的最新版本。这是我想象中会发生的事情:

  1. 第一次运行:Xcode 收集依赖信息 ---> 没有变化
  2. 第一次运行:Xcode 运行“运行脚本构建阶段”---> 源代码在 Xcode 背后被更改
  3. 第一次运行:Xcode 完成构建,认为不需要更新任何内容
  4. 第二次运行:Xcode 收集依赖信息 ---> 源已更改,需要重建!
  5. 第二次运行:Xcode 运行“运行脚本构建阶段”---> 一切都是最新的
  6. 第二次运行:Xcode 继续编译

看完之后有关构建阶段的 Xcode 文档 http://gemma.apple.com/DOCUMENTATION/DeveloperTools/Conceptual/XcodeBuildSystem/200-Build_Phases/bs_build_phases.html,我尝试添加一个源文件,该文件每次作为“运行脚本构建阶段”的输出运行时都会更新,但没有任何变化。由于我的项目中配置文件的数量可能有所不同,因此我不想指定每个输入和输出文件。

问题:

如何让 Xcode 了解“运行脚本构建阶段”期间所做的源文件更改?

Edit:

  • 补充说我将脚本构建阶段放在其他构建阶段之前

到目前为止提到的每一种技术都是矫枉过正的。繁殖史蒂夫·金 https://stackoverflow.com/users/637441/steve-kim的可见性评论:

在构建阶段选项卡中,只需将“运行脚本”步骤拖到更高的位置(例如“编译源”之前)。

在 Xcode 6 上测试

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xcode:在每次构建之前运行直接修改源代码的脚本 的相关文章

随机推荐

  • 为协作者使用 git 存储库的最佳方式是什么?

    一般来说 为协作者使用存储库的最佳方式是什么 我们应该只从主存储库中推送和拉取 还是为每个协作者创建一个分支 然后在适当的时候进行合并 如果这是一个愚蠢 基本的问题 我深表歉意 git noob 在这里 谢谢 Git 支持许多不同的工作流程
  • 无法将搜索栏拖动到滚动视图内

    如果这个问题在其他地方得到了回答 我深表歉意 我找不到任何有同样问题的人 我将 SeekBar 添加到位于嵌套 ScrollView 内的relativelayout 但是 我无法拖动搜索栏的拇指 我可以沿着其路径单击来更改其值 但无法拖动
  • 模板类的模板成员函数的类外定义的语法

    template
  • 无法计算表达式,因为代码已优化或本机框架位于调用堆栈顶部

    我正在开发一个网站 用户可以在该网站上提交一些信息 提交信息后 我尝试同时发送两封邮件 一封发送给我的销售团队 一封发送给我网站上的访问者 在发送邮件时 我在使用重定向到另一个页面时收到以下错误Response Redirect http
  • 在 Windows 10 中使用 PS 将程序(带参数)固定到任务栏

    我可以使用下面的代码将程序固定到 Windows 10 任务栏 感谢this https stackoverflow com questions 31720595 pin program to taskbar using ps in win
  • 在 SQLAlchemy 中使用 Postgres/PostGIS 视图

    两个问题 我想在我的 PostGIS DB 中生成一个视图 如何将此视图添加到我的 Geometry columns 表中 我必须做什么 才能将视图与 SQLAlchemy 一起使用 SQLAlchemy 的表和视图之间有区别吗 或者我可以
  • AuthenticationHeaderValue 与 NetworkCredential

    我正在尝试使用 HttpClient 为 HTTP Post 或 HTTP Get 编写客户端 当谷歌搜索时 我遇到了这些在 HttpClient 对象中设置这些身份验证的方法 一个使用 NetworkCredential 另一个使用 Au
  • Log4net keepLo​​gFileNameExtension 不起作用

    这是我的 log4net 配置 滚动日志文件创建的扩展名错误 第一个文件使用 log debug txt 名称创建 滚动文件使用 log debug txt 1 创建 但理想情况下它应该是 log debug 1 txt 我使用preser
  • 用于商业应用程序的本机 .NET 版本的 Rsync 可用吗?

    目前我们正在评估是否可以提供rsync http en wikipedia org wiki Rsync对我们销售的应用程序的支持 我用谷歌搜索并找到了一些参考资料 rsync 的本机 Window 版本 http www backupce
  • 当 docker 使用 `/bin/sh -c` 运行节点脚本时,SIGTERM 无法到达节点脚本

    当我的 Dockerfile 结尾时 CMD node docker 使用以下命令运行该容器 bin sh c node 而不是简单地node 我知道 我可以这样做CMD node 我认为这种行为实际上很好 因为这意味着在容器内部PID1
  • Xamarin Forms iOS 错误任务图标

    我认为有一个非常简单的问题 但我不太确定我是否做错了什么或者这是否是 Xamarin 问题 我有一个 iOS Xamarin Forms 项目 在该项目中 我无法设置按两次主页按钮时显示在 任务 视图中的 任务 图标 它始终显示 xamar
  • 对字符串不变性的困惑

    我有以下代码 public class StaticImplementer private static String str ABC public static void main String args str str XYZ 问题 这
  • C++ 类对象的引用和非引用返回 - 为什么输出相同?

    考虑以下代码 class Test public int data Test data 9 Test myfunction void print cout lt lt data lt
  • Symfony 应用程序 - 如何将计算字段添加到 Propel 对象?

    处理 Propel 对象的计算字段的最佳方式是什么 假设我有一个对象 Customer 它有一个相应的表 customers 并且每一列对应于我的对象的一个 属性 我想做的是 在视图 A 上使用它时 向我的对象添加一个计算属性 已完成订单数
  • 将 ncurses 窗口保持在前台

    我的应用程序正在使用 ncurses 并且有几个正在不断更新的窗口 在该应用程序中 当用户点击 q 时 我有一个充当 消息框 例如对话框 的窗口 询问他们是否要关闭 在其他窗口更新之前 这一切正常 此时 其他窗口将绘制在对话框上 使其 部分
  • 如何使用 id 获取 JavaFx 中的元素?

    我是 FXML 新手 我正在尝试使用以下命令为所有按钮单击创建一个处理程序switch 然而 为了做到这一点 我需要使用 和 id 获取元素 我已经尝试了以下方法 但由于某种原因 也许是因为我是在控制器类中而不是在主类中执行此操作 我收到了
  • DataOutputStream#writeBytes(String) 与 BufferedWriter#write(String)

    我想为我的报告创建一个 HTML 文件 报告中的内容可以通过使用创建BufferedWriter write String File f new File source htm BufferedWriter bw new BufferedW
  • 计算 Matplotlib 文本旋转[重复]

    这个问题在这里已经有答案了 我试图弄清楚如何在 matplotlib 中旋转文本以与图中的曲线对齐 但我还没有弄清楚什么转换可以为旋转文本提供正确的坐标系以匹配数据坐标中的特定斜率 这是绘制一条线并尝试沿其对齐一些文本的最小示例 Make
  • 如何设置AlertDialog中正负按钮的顺序?

    为什么我要这样做完全是另一个讨论 但我需要找出使我的所有警报对话框在右侧都有肯定按钮的最佳方法 请注意 在 3 0 及更低版本中 按钮通常显示为 确定 取消 而在 4 0 及更高版本中 按钮通常显示为 取消 确定 我想强制我的应用程序以最简
  • Xcode:在每次构建之前运行直接修改源代码的脚本

    我做了什么 我有一个脚本 阅读一些配置文件来生成源代码片段 找到相关的 Objective C 源文件并 将源代码的某些部分替换为步骤 1 中生成的代码 和一个 Makefile 它有一个特殊的时间戳文件作为 make 目标 配置文件作为目