应用安装失败。未找到代码签名。

22

我最近升级到Xcode 10并开始更新我们的应用程序以切换4.2。在重建第三方框架并添加各种问题的解决方法后的一天左右,我能够在新的模拟器上运行我们的应用程序。

然而,当我尝试在我的个人手机(运行iOS 12.0 GM)上运行时,我遇到了一个安装应用程序时出现的错误,如标题所述。

我知道SO和互联网上有很多关于这个主题的已经回答的问题(lot of already answered questions),但是我无法使它们中的任何一个工作。

这已经阻碍了我大约一天半时间,所以我想知道是否有人对如何减轻这种情况有任何见解。

以下是我迄今为止采取的未能奏效的步骤(也许它们将来会对其他人有用!):

  1. 清除派生数据
  2. 删除并重新下载我的电脑上的所有供应配置文件
  3. 清理构建目录(cmd + k & cmd + shft + k)
  4. 从我的手机中删除原始应用程序
  5. 重新启动Xcode(版本10.0(10A254a)[GM版本])
  6. 重新启动我的Mac(运行macOS High Sierra的Macbook Pro 2018)
  7. 重新启动我的设备(运行iOS 12.0 GM的iPhone X)
  8. 尝试多种以上组合,包括同时尝试
  9. 在developer.apple.com上重新生成应用程序的配置文件(我们使用手动签名)
  10. 删除并重新创建应用程序在developer.apple.com上的配置文件
  11. 向Tim Cook献祭了一只山羊
  12. 确保签名证书与配置文件匹配
  13. 从计算机中删除旧版本的Xcode,并确认命令行工具是xcode 10.0 gm版本
  14. 删除并重新安装Xcode 10.0 GM
  15. 确保所有复制的框架都选中了 code sign on copy
  16. 通过Carthage使用Swift 4.2编译器重建所有框架(请记住,它在模拟器上都可以正常工作)。
  17. 确保在SDKSettings.plist中设置所需的代码签名为YES
  18. 删除我电脑上所有旧的签名证书
  19. 在developer.apple.com上删除并重新创建证书
  20. 从developer.apple.com中删除并重新添加我的设备
  21. 将代码签名从手动更改为自动
  22. 确保签名证书是 Developer 而不是 Distribution
  23. 任何帮助将不胜感激 :)

    更新: 我试着重新下载和重新构建一个全新的机器,但是出现了同样的问题。有趣的是,我可以很好地归档和验证应用程序。

    还尝试使用相同的绑定标识符对空项目进行签名,并且一切正常。因此,问题要么在于我们的第三方框架,要么在于从Xcode 9.4转换时启用的某些奇怪设置。将逐个删除第三方框架,直到能够编译为止。

    更新2: 仍然没有运气。尝试清除大多数框架,但仍然无济于事。以下是设备日志,想知道Skipping a profile because of error 0xe8008012是否与此有关:

    https://gist.github.com/joshuawright11/6889ce1a0872262df77f97d63830baa5

    更新3: 所以,我通过在构建阶段中注释掉carthage copy-frameworks脚本(并在这样做后清理/删除派生数据)来使其安装。当然,这意味着在引导时崩溃,因为它缺少这些框架,但这确实意味着问题要么在于carthage,要么在于其中一个链接的carthage框架。不是我们的签名证书、配置文件或代码库。将逐个删除这些框架,并在此处更新。

    最终更新终于弄清楚了。解决方案非常专业(见下文),但希望这个问题能成为互联网上与此问题相关的所有解决方案的汇编。


1
您可以创建新项目,设置其中您的破损项目的Bundle ID并配置您的签名标识,然后尝试在设备上运行它。如果它能够运行 - 问题很可能在框架中。顺便问一下,您是否尝试在另一台机器上克隆您的存储库? - lobstah
好的主意,我会尝试并在几天内汇报。 - Josh
1
@lobstah,你有什么想法可以让我看到是哪个框架导致了这个问题吗? - Josh
1
首先,我建议你在另一台机器上尝试启动应用程序 - 这是找出问题所在(是项目本身还是环境)最简单的方法。这将节省您很多时间。如果它可以在另一台机器上运行,则问题在于环境。在这种情况下,请检查您的依赖管理器(Carthage)- 清除其缓存,更新Carthage,在您的项目中除了Cartfile之外删除所有内容,并执行carthage update。如果问题在项目本身中 - 您需要审查您的框架。如果仅仅审查框架没有带来好运 - 请删除它们并尝试运行该项目。 - lobstah
1
@Josh,我找到了导致问题的原因,但仍然不确定为什么会出现错误。在嵌入式框架之后,我在构建阶段中运行了这个脚本:http://ikennd.ac/blog/2015/02/stripping-unwanted-architectures-from-dynamic-libraries-in-xcode/ 如果我删除该脚本,则可以在设备上安装。 - mihai1990
显示剩余8条评论
9个回答

8

弄清楚了:

我遇到了使用carthage时的问题:https://github.com/Carthage/Carthage/issues/2472,并采用了他们建议的解决方案,在将东西转移到xcode 10时设置EXPANDED_CODE_SIGN_IDENTITY=''。

显然,这行代码是导致carthage在复制框架时出现错误的原因。我下载了最新版本的carthage来解决问题,然后删除了 EXPANDED_CODE_SIGN_IDENTITY='' 行,一切正常。真是浪费时间。


6
我不确定这是否也是您的情况,但最近在尝试在iPhone上运行React Native应用程序时,我也遇到了这个错误。这是在我集成Lottie库用于React Native之后开始发生的。
问题是由Build Phases中添加的此Run Script引起的: http://ikennd.ac/blog/2015/02/stripping-unwanted-architectures-from-dynamic-libraries-in-xcode/。该脚本无法从Lottie.framework中提取体系结构,导致出现"输入文件(.../Lottie.framework/Lottie)必须是一个fat文件,当指定-extract选项时
为了解决这个问题,我在脚本中添加了一个验证来跳过非fat文件:
# ...
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"

if lipo -info "$FRAMEWORK_EXECUTABLE_PATH" | grep -iq "Non-fat file"
then
echo "This is a non-fat file, skipping"
continue
fi

EXTRACTED_ARCHS=()
# ...

感谢@mihai1990的回复;我们不使用React Native,但我怀疑它与我们一直在使用的第三方库有关。最终花了一整天的时间将所有内容还原回Xcode 9.4,并暂时使用该版本;在周末期间,我会深入研究Xcode 10构建,并查看是否有任何第三方库中的构建脚本出现问题。我会在这里发布结果。 - Josh
@Josh 自那时以来,你有结果了吗? - Louis CAD
是的,@LouisCAD,事实证明我使用的是自定义的Carthage构建脚本,请参见下面选择的答案。 - Josh

5

对我来说,问题出现在我的迦太基框架代码签名上。 我通过设置它们如下图所示来解决它:

enter image description here


3

我遇到了与xcode 10.0 (10A255)相同的问题。

无效签名 - 缺少或无效的密封资源。路径为[xxxx.app/xxxxx]的文件未正确签名。

xcode 9.4.1 (9F2000)一直能够顺利提交应用程序,但是在xcode 10.0 (10A255)中出现了问题。

我通过删除所有支持文件(txt、json、rtf、html、ttf等),然后再添加它们来解决了这个问题。

我建议您先提交没有这些文件的构建版本。如果可以正常工作,则可以逐步添加它们。


嗯,好主意,但不行。已删除所有字体和资源,但仍然出现相同的错误。 - Josh

2
在我的情况下,我既有一个无效的iPhoneXS条款,又有一个捆绑标识符冲突。在Xcode升级和新手机连接后,我尝试了该项目。在完成上述步骤(完全重新创建密钥链和配置文件,删除持久文件夹等...)之后。
在目标项目设置中:
  1. 将捆绑标识符从com.proj.app更改为其他任何内容,例如:com.proj.app2
  2. 将产品名称从Product更改为Product123
我非常确定只有捆绑标识符冲突才会阻止我的设备正常进入已准备好的设备列表。
  1. 如果需要,将标识符更改回正常状态

1

我尝试了这个帖子中的所有方法,但都没有起作用。所以我重新安装了Xcode,突然间一切都正常了。


1

如果还有人感兴趣:我刚刚发现另一个情况,新的Xcode 14会出现此错误。我的应用程序处于开发状态,只有图标链接;我进行了一些磁盘清理,将图标移动到新文件夹中。当我尝试重新构建/运行时,就会出现此错误。


0
在项目目标的构建阶段/Carthage中,将carthage命令放置如下所示:
EXPANDED_CODE_SIGN_IDENTITY='' carthage copy-frameworks
这只是一个临时解决方案,等到获取环境变量问题解决后就不需要了。

0

摘要:

问题解决了,只需要等待一晚上并且什么都不做。

详细信息:

应用程序安装失败。找不到代码签名 昨天下午折磨了我整整一个下午,

我尝试了每种方法: “构建设置、框架设置、缓存目录、签名设置、清理、重新初始化、重新 git 克隆、cocoapods 清理等”

但它们都被证明是完全无效/不起作用的

所以,我下班回家了。经过一个美好的睡眠,第二天早上一切正常。

我猜,我的问题与开发者 Bundle-identifier 注册中的异常延迟有关。

但最终,事情仍然会出现问题,也没有明确的原因。

-- 更新 --

我在另一个项目中再次遇到了这个问题。

通过将所有导入的框架包含为当前项目的目标,而不是将外部框架作为子项目导入,快速解决了它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接