在 Xcode 中强制刷新代码签名

2024-01-09

在我们的环境中,我们跨多个项目和平台共享资源。为 iPhone 进行构建时,仅需要这些资源的子集。由于该子集仍然相当大,因此我们有一个清单文件列出了其中的内容,这限制了副本。我们有自己的 Python 脚本来执行复制,仅刷新已更改的文件。

我已经在 Xcode 中创建了一个运行脚本阶段来调用该脚本,但我遇到了一些与代码签名阶段相关的问题。

由于我们使用单独的清单文件,因此我的运行脚本阶段无法在 Xcode GUI 中指定任何输入/输出文件:它根据当时目录中包含的内容而变化。这样做的副作用是 Xcode 并不严格知道哪些文件将被复制(可以说,事情发生在“幕后”)。

我遇到的问题是,如果我只在构建之间修改资源文件,重建我的应用程序将正确调用我的脚本,该脚本复制相应的文件,只有 Xcode 不会重新运行代码签名步骤,并且不会重新复制我的应用程序到我的设备。

我发现这很奇怪,考虑到我的资源文件确实列在<app_bundle>/_CodeSignature/CodeResources文件,但看起来 Xcode 确定独立于该文件的重建要求(可能只有项目文件中列出的文件),这是可以理解的。

我尝试通过触摸应用程序包的目录或应用程序的二进制文件本身来玩弄花招,但它不太有效。触摸应用程序的包目录似乎没有做任何事情,而触摸二进制文件将起作用,但不适用于当前构建,仅适用于后续构建(因为没有输入文件需要重新编译,Xcode 推断不会生成新的二进制文件,但下一个构建会起作用)时间,它确实会检测到二进制文件已被触及,并重做代码签名和开启)。

尽管如此,这仍然是一个相当不完美的解决方法,因为:

  • 必须构建两次很容易出错
  • 我的 dSYM 文件将不必要地重新生成

有谁知道有什么方法可以在 Xcode 中强制执行代码签名步骤(从运行脚本或其他地方)?


您可以直接从命令行或 shell 脚本调用 codesign,例如

codesign -f -s "iPhone Distribution" --entitlements Entitlements.xcent -vv location/MyApp.app/MyApp

Run man codesign以了解其用法。

您可以通过查看 Xcode 中的详细构建输出来发现运行的所有内部命令。选择“构建”选项卡,然后单击该窗格左下角的小图标 - 看起来像文本的图标(位于警告图标旁边)。这将在 Xcode 的新窗格中显示完整的构建输出。

我创建了一个直接调用 codesign 的 shell 脚本,这样我就可以使用新的证书和配置文件重新签署现有的二进制文件(例如,在更新二进制文件中的一些图形之后)。

事实证明这非常复杂,因为 Xcode 在其内部构建过程中做了一些微妙的事情(一个例子:Xcode 将配置文件嵌入到生成的应用程序二进制文件中,但在此过程中更改了它的一些值,例如 get-task - 允许设置)。这意味着我必须编写一个工具来从配置文件中生成适当的 .xcent 文件,具体取决于是否正在完成开发/分发/应用商店构建。希望这些都不会影响你......

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

在 Xcode 中强制刷新代码签名 的相关文章

随机推荐

  • Angular 4 Reactive Forms FormControl 错误为 null

    如果我通过 Tab 键浏览文本输入而不输入任何内容 则会显示错误消息 div 指示所需的验证器已正确触发 但是 如果我在其中一个字段中输入任何内容 控制台会立即抛出此错误 Cannot read property required of n
  • Tkinter Entry 小部件之后的事件回调

    从这里的第一个答案 堆栈溢出 6548837 https stackoverflow com questions 6548837 how do i get an event callback when a tkinter entry wid
  • 为什么按钮点击触发与setTimeout()触发不同?

    考虑以下几乎相同的两个片段 区别在于 第一个使用setTimeout 触发事件 第二个在单击按钮时触发事件 如果您检查控制台 您将看到代码段 1 中的最后两行是 App rendering 1 folder s Observed js 片段
  • 为什么 vector::clear 不从向量中删除元素?

    当我使用clear on a std vector 它应该摧毁里面的所有元素vector 但事实并非如此 示例代码 vector
  • 在公式中显示字符串,而不是在 lm fit 中显示为变量

    我无法解决当lm sformula 执行后 它不显示分配给的字符串sformula 我有一种感觉 这是 R 处理函数参数的通用方式 而不是特定于线性回归 下面通过例子来说明这个问题 示例 1 有不受欢迎的 output lm formula
  • 如何更改 Atom 键绑定

    我正在寻找更改 Atom 文本编辑器的键绑定 我熟悉Android Studio Atom 是否允许我们自定义按键绑定 您必须转到 编辑 gt 首选项 gt 按键绑定 在此选项卡中 您可以看到实际的绑定 如果您想更改它 您可以访问键盘映射文
  • Apache Nifi解压

    我是 Apache NIFI 的新手 正在尝试构建一个 POC 流程 我也需要你的指导 我有一个名为 sample gz 的压缩 gz 文件 其中包含一个名为 sample file 的文件 我需要解压缩sample gz 文件并将 sam
  • ggplot2,如何在函数内使用访问数据框元素?

    我正在尝试使用 ggplot2 创建绘图来标准化许多类似绘图的创建 假设您可以使用 theme stat 或 geom 以及 运算符来堆叠大量选项 那么如何将其包装在函数中呢 我想创建一个函数来绘制数据框的各个部分 例如 library g
  • 使用 new 关键字创建的 Spring bean (@Component) 中的自动装配

    我有两颗春豆 如下 Component A Scope prototype public class A extends TimerTask Autowired private CampaignDao campaignDao Autowir
  • 当单元格背景颜色发生变化时,是否可以在 Excel 中触发事件?

    正如标题所说 我试图在单元格更改背景颜色时发生一些事情 比如说从红色变为绿色 但是只有当用户更改单元格中的值时才会触发工作表的更改事件 是否有解决方法来完成我想做的事情 或者这是一项不可能完成的任务 No 如 这是不可能的 VBA 中没有可
  • 将 SFINAE 与通用 lambda 结合使用

    泛型 lambda 可以利用 替换失败不是错误 规则 例子 auto gL auto func auto param1 auto params gt enable if t lt is integral lt std decay t
  • Listview数据绑定导致formview数据丢失

    在我的代码中 通过 Formview 研究后 我需要调用 listview databind 这使得无法获取 Formview 数据 即使它们仍然出现在屏幕中 这是我的代码 protected void DemandeSearchFormV
  • 如何从 pandas 数据框中的每一列创建子图

    我有一个包含 36 列的数据框 df 这些列绘制在单个绘图图表上 并使用下面的代码以 html 格式显示 import plotly offline as py import plotly io as pio pio write html
  • Servlet 3.0 的构造函数依赖注入?

    从 Servlet 3 0 开始 可以通过编程方式注册 Servlet 实例javax servlet ServletContext addServlet 这个类还有一个createServlet分析一些注释并执行依赖注入的方法 我想如果我
  • 如何枚举 ui-router 中的注册状态?

    我想知道是否有办法在使用时列出所有注册状态用户界面路由器 https github com angular ui ui router 如果您查看文档 state get 对于最新版本的 ui router 您会注意到 不向函数传递任何参数应
  • 为什么 javascript typeof 总是返回“object”

    我哪里做错了 我会等待 Class 作为此代码的结果 但它不会 这是来自对象函数 Typeof 不是这样工作的 它只返回内置类型 你可以尝试 this constructor name Class 它将一直检查原型链 看看是否this或任何
  • Safari不派冰候选人

    在 Safari 中不起作用的示例 https github com Kurento kurento tutorial node tree master kurento one2many call https github com Kure
  • Common lisp、CFFI 和实例化 C 结构

    我已经在谷歌上搜索了大约 哦 三个小时 寻找这个 问题 的解决方案 我试图弄清楚如何使用 CFFI 在 lisp 中实例化 C 结构 我在 c 中有一个结构 struct cpVect cpFloat x y 简单吧 我已经自动生成了到此结
  • Python json.dumps() 将我的所有数据输出到一行中,但我希望每个条目都有一个新行

    我正在使用 Python 和一些 json 数据 我正在循环访问我的数据 都是字典 当我将循环值打印到控制台时 我每行得到 1 个字典 但是 当我使用 json dumps 执行同一行代码将对象转换为能够输出的字符串时 我会在字典中得到多行
  • 在 Xcode 中强制刷新代码签名

    在我们的环境中 我们跨多个项目和平台共享资源 为 iPhone 进行构建时 仅需要这些资源的子集 由于该子集仍然相当大 因此我们有一个清单文件列出了其中的内容 这限制了副本 我们有自己的 Python 脚本来执行复制 仅刷新已更改的文件 我