安装IPA会导致错误“已添加,修改或删除已签名的资源”

时间:2013-10-03 10:28:36

标签: iphone ios objective-c xcode ipa

我最近偶然发现Xcode存在一个相当奇怪的问题,当我构建IPA并尝试安装它时,我尝试使用Xcode,iTunes和iPhone Config Utility安装,所有这些都会产生同样的错误< / p>

A signed resource has been added, modified, or deleted.

我可以使用XCode在手机上成功调试应用程序,只有当我尝试安装IPA时才会看到错误。

我尝试解压缩IPA并运行代码签名验证工具,该工具会引发以下响应:

a sealed resource is missing or invalid In architecture: armv7
resource missing:
/Users/dev1/Documents/PoleTester.app/Settings.bundle/._Root.plist

这让我看看了Settings.bundle文件并确保它包含在构建中,它就是这样。有趣的是,如果我删除了Settings.bundle文件,构建一个IPA并尝试在我的iPhone上安装它,安装成功,但这没用,因为我需要使用该应用程序安装的Settings.bundle文件。

我之前的一些XCode项目的进一步调查表明,我可以构建一个包含Settings.bundle文件的IPA,并成功安装它。但是,如果我对Settings.bundle文件进行了简单的更改,例如添加或删除行,则构建IPA,然后尝试安装它,我得到了

"A signed resource has been added, modified, or deleted" error.

我对导致此错误的原因以及为什么Settings.bundle文件导致安装失败感到有点失落。

之前有没有人看到过这个错误,或者可能会对导致它的原因有所了解?

我正在使用 Xcode 4.6.3 iPhone 4 运行 iOS 6.1.3。

5 个答案:

答案 0 :(得分:21)

Clean Build Folder(⌘⌥⇧-K)已经为我解决了3次中的3次。

答案 1 :(得分:3)

我刚刚使用Xcode 6 beta 6安装到我的运行iOS 8 beta 5的iPhone 5时遇到了这个问题。我正在构建的应用程序使用Today扩展(aka widget)。

问题似乎源于我没有正确设置依赖项。我将第三方框架(Alamofire)设置为项目的一部分,作为整个项目的依赖项,但不作为今天小部件的依赖项。我可以很好地构建,但是当安装到设备时,我会得到这个“签名资源已经...”错误。

通过添加Alamofire作为Today小部件的依赖,这解决了这个问题。

答案 2 :(得分:2)

现在有点晚了,但今天我遇到了与Xcode 5.0.1完全相同的问题。

根据https://developer.apple.com/library/ios/technotes/tn2318/index.html ,“资源缺失:my.app /..*”错误可能由以下原因引起:

  

前缀为“._”的文件被视为AppleDouble文件,可能是因为将未压缩的Xcode项目文件夹复制到非HFS +格式的磁盘上。必须使用'dot_clean'命令删除AppleDouble文件。 Xcode项目文件夹是dot_clean的参数,如下所示。

我采取了解决此问题的步骤:

  1. 关闭Xcode
  2. 在终端
  3. 中运行“dot_clean / path / to / My_Xcode_Project”
  4. 再次打开Xcode并进行新构建
  5. 奇怪的是,大多数这些_ *文件似乎没有引起任何问题,除了那些在Settings.bundle内部(我的目录中几乎每个文件都有一个,但只有在我添加了Settings.bundle后,IPA无法安装)

答案 3 :(得分:1)

我也面临同样的问题,这篇文章解决了我的问题:

http://code-ninja.org/blog/2012/04/17/signed-resource-has-been-added-modified-or-deleted/

  

事实证明问题是由产品名称中的特殊字符引起的 - 在我的情况下,是?删除?从产品名称修复问题。

答案 4 :(得分:1)

就我而言,有助于在构建阶段添加bash脚本(就在“编译源代码”之前):

find ~/Library/Developer/Xcode/DerivedData -name "YouAppName.appex" | xargs -I % find % -type f -maxdepth 1 | xargs rm

这个脚本的作用是清除项目的appex目录(例如资产)中的文件,但保留子目录(例如编译的故事板)。实际上,在构建时使用此脚本比完整项目清理要快得多。