gpt4 book ai didi

iphone - 在 Xcode 中强制刷新代码签名

转载 作者:行者123 更新时间:2023-12-03 19:25:52 26 4
gpt4 key购买 nike

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

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

由于我们使用单独的 list 文件,因此我的运行脚本阶段无法在 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

运行man codesign以了解用法。

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

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

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

关于iphone - 在 Xcode 中强制刷新代码签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1689035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com