XCode:diff组装前&;更改源代码后

XCode:diff组装前&;更改源代码后,xcode,assembly,build,diff,compare,Xcode,Assembly,Build,Diff,Compare,我希望能够对Xcode项目进行更改(更改源代码、在文件系统上移动文件、添加依赖项或库等),然后构建它,并在进行更改之前将构建产品与构建产品进行比较,以确认它们是相同的。我该怎么做 分散构建产品不起作用;他们每次都不一样 我尝试了两种不同的产品,它们在不同的时间以相同的方式制造,它们是不同的。嗯?隐马尔可夫模型。。构建时间必须影响构建产品。以下是我所做的: 在Xcode中,构建产品(Command+B)后,按Command+7以显示日志导航器。然后,在导航器中单击“Build${PRODUCT_N

我希望能够对Xcode项目进行更改(更改源代码、在文件系统上移动文件、添加依赖项或库等),然后构建它,并在进行更改之前将构建产品与构建产品进行比较,以确认它们是相同的。我该怎么做

分散构建产品不起作用;他们每次都不一样 我尝试了两种不同的产品,它们在不同的时间以相同的方式制造,它们是不同的。嗯?隐马尔可夫模型。。构建时间必须影响构建产品。以下是我所做的:

在Xcode中,构建产品(
Command+B
)后,按
Command+7
以显示日志导航器。然后,在导航器中单击“Build${PRODUCT_NAME}”。然后,在编辑器底部,单击右侧的气泡,展开“触摸…”文本。复制成绩单中的最后一个目录路径。它应该是这样的:
/Users/${USER}/Library/Developer/Xcode/DerivedData/${PRODUCT_NAME}-abomilaxrsffqkeasoiwbfisjghq/Build/Products/Debug iphonesimulator/${PRODUCT_NAME}.app
这是构建产品的路径。然后,打开终端,执行如下操作:

# Change to the build product's directory.
cd /Users/${USER}/Library/Developer/Xcode/DerivedData/${PRODUCT_NAME}-abomilaxrsffqkeasoiwbfisjghq/Build/Products/Debug-iphonesimulator/

# Copy the build product to another directory, like your Desktop.
open .                               # if you prefer Finder
cp -R ${PRODUCT_NAME}.app ~/Desktop/ # or use Terminal

# Confirm the bundles are identical.
diff -r ${PRODUCT_NAME}.app ~/Desktop/${PRODUCT_NAME}.app
现在,在Xcode中执行
Command+Shift+K
以进行清理。然后,再次构建并运行上面相同的diff。他们不一样

如何获取由Xcode生成的程序集? 那么,有没有一种方法来区分组件,看看它们是否不同?我在一个问题的回答中看到了一种方法,但我忘了它在哪里,我找不到它


如果装配相同,这是否意味着构建产品也相同?我不这么认为,因为我认为某些构建设置会影响程序集编译成机器代码的方式。如果是,哪些生成设置会影响程序集编译为机器代码的方式。这样,我就可以确认它们在前后是相同的,并且确信产品是相同的(除了它们的构建时间戳)。

使用diff不是直接比较二进制文件的好工具

整个二进制文件的汇编 在你的Product.app里面应该有一个文件,可能只是名为“Product”。这才是真正的可执行文件。您可以通过右键单击
产品
组中的
Product.app
文件并选择“在查找器中显示”来找到它。示例位置是:
~/Library/Developer/Xcode/DerivedData/Product DQCWCDQVRXHCFZDKOOVRAMLGGZZZG/Build/Products/Debug iphoneos/Product.app/Product

  $ file Product.app/Product
  Mach-O executable arm
现在你想拆开它。您可以使用Mach-O对象工具,
otool

 $ xcrun -sdk iphoneos otool -tv Product.app/Product
这将转储整个二进制文件的反汇编。将其保存到一个文件中,您可以将其与其他重新编译进行比较。这是整个二进制的

单个文件的程序集 如果您只关心几个文件,它们应该存在于
~/Library/Developer/Xcode/DerivedData/Product hdomilaxrhfpqkeanoiwbrirngqq/Build/Intermediates/Product.Build/Debug iphoneos/Product.Build/Objects normal/
armv7
中的某个位置。C和Obj-C文件应该有一个
.o
文件版本,您可以使用与上面相同的命令分别分解这些文件。例如:

 $ xcrun -sdk iphoneos otool -tv AppDelegate.o

据我所知,Xcode不会留下中间程序集文件,尽管可能会有一个标志强制它生成它们。

使用diff不是直接比较二进制文件的好工具

整个二进制文件的汇编 在你的Product.app里面应该有一个文件,可能只是名为“Product”。这才是真正的可执行文件。您可以通过右键单击
产品
组中的
Product.app
文件并选择“在查找器中显示”来找到它。示例位置是:
~/Library/Developer/Xcode/DerivedData/Product DQCWCDQVRXHCFZDKOOVRAMLGGZZZG/Build/Products/Debug iphoneos/Product.app/Product

  $ file Product.app/Product
  Mach-O executable arm
现在你想拆开它。您可以使用Mach-O对象工具,
otool

 $ xcrun -sdk iphoneos otool -tv Product.app/Product
这将转储整个二进制文件的反汇编。将其保存到一个文件中,您可以将其与其他重新编译进行比较。这是整个二进制的

单个文件的程序集 如果您只关心几个文件,它们应该存在于
~/Library/Developer/Xcode/DerivedData/Product hdomilaxrhfpqkeanoiwbrirngqq/Build/Intermediates/Product.Build/Debug iphoneos/Product.Build/Objects normal/
armv7
中的某个位置。C和Obj-C文件应该有一个
.o
文件版本,您可以使用与上面相同的命令分别分解这些文件。例如:

 $ xcrun -sdk iphoneos otool -tv AppDelegate.o

据我所知,Xcode不会留下中间程序集文件,尽管可能在某个地方有一个标志来强制它生成它们。

可能是Xcode以某种方式将生成日期嵌入到二进制文件中了吗?可能是Xcode以某种方式将生成日期嵌入到二进制文件中了吗?这在我编译相同的源代码时起作用。谢谢然而,当我做了一个简单的更改(将内联值分配给局部变量)时,diff返回了一大堆差异(这些差异似乎主要与内存地址有关)。奇怪的我认为编译器会自动压缩所有不必要的局部变量。当我编译相同的源代码时,这是有效的。谢谢然而,当我做了一个简单的更改(将内联值分配给局部变量)时,diff返回了一大堆差异(这些差异似乎主要与内存地址有关)。奇怪的我认为编译器会自动压缩所有不必要的局部变量。