Xcode中的Bitcode签名失败

11

我将Xcode更新到最新版本,现在当我尝试编译项目时出现错误“无效的比特码签名”,然而,我的项目的比特码已禁用。我该如何解决?我应该更改什么来正确签署我的比特码?

我的Podfile:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!

target 'MyProjectName' do

pod 'Realm'
pod 'CorePlot'
pod 'GoogleMaps'

end

我已经检查过了,一切都没问题。


清理派生数据。 - shallowThought
我首先尝试了,但不起作用。 - Alexandr Kolesnik
我们需要更多的信息。我怀疑其中一个使用的依赖项可能是导致问题的原因。 - shallowThought
寻求调试帮助时,您需要提供Podfile.lock而不是Podfile。最好还要提供确切的Xcode版本。 - Cœur
16个回答

32

我不确定你是否和我遇到了相同的问题。当我试图在iPhone设备上进行测试时,我才会出现这个问题。原因是调试配置中的Build Active Architecture Only选项被设置为NO。当我将其设置为YES后,我就可以在我的iPhone上进行测试。

enter image description here

1
谢谢!我一直在为XCode 8.3和8.3.1的“无效的位码签名”问题苦恼,直到我做了以下更改。 - Josh
谢谢,我已经试了好长时间才搞定 - 我关闭了 bitcode,但直到将 Build Active Architecture 设为 YES 后,该错误仍然出现。 - wheeliebin
我的救星!没有帽子的英雄! - Teofilo Israel Vizcaino Rodrig
当你将应用程序存档以供发布时,为什么没有出现相同的错误?在发布模式下,“仅构建活动架构”仍然为“否”。 - Sébastien

8
我遇到了这个错误,但它只在构建iOS 10.3版iPad时发生(尽管在iOS 10.3版iPhone和iOS 11.0版iPad上以及所有的iOS 10.3和11.0模拟器上都能正常工作)。通过痛苦的排除过程(并从头开始创建一个新项目),我发现我的Cocoapods没有问题,代码签名设置也没有问题,我的AppExtension、测试以及“仅为活动架构进行构建”设置、与“位码”相关的任何构建设置也没有问题。
在我的设置中,我在主要的Swift/iOS Xcode项目中嵌套了一个C++ Xcode项目。因为它从未专门为iOS使用,所以“iOS部署目标”从未设定过(保持默认状态)。当明确将其设置为10.3版本后,它能够正常工作而没有任何投诉。
嵌套C++应用程序的项目设置(将iOS部署目标设置为您支持的最低iOS版本):

Nested C++ app's project settings

嵌套的 C++ 应用程序目标设置(供参考):

Nested C++ app's target settings


1
太棒了,尝试了所有的方法终于搞定了。非常感谢。 - Jas_meet
@Jas_meet 很高兴我能够帮助其他人摆脱这种困境!这是我曾经追踪过的最难的错误之一(特别是考虑到构建时间有多慢)。 - Jamie Birch
1
我曾经遇到过同样的问题...项目在iOS 10.2的iPhone上可以运行,但在10.3.3上却不能。谢谢! - stephenspann
1
非常感谢,这个帮了我大忙。我甚至没有意识到我正在开发的应用程序有一个嵌套项目 - 它是一个 Cordova 应用程序。 - elRobbo

3
如果您使用pod,请检查所有库的版本,某些库可能不支持新版本,您需要更新该库的pod文件。

3
在我的情况下,我试图为一个iOS版本低于部署目标的设备构建应用程序。

3

当我将一个新的静态库项目链接到我的工作区时,出现了这种问题。为了解决它,我尝试将库的“仅构建活动架构”和“位码”设置为NO,但没有成功。然后我发现该库的部署目标被设置为11.0,因为Xcode将最新值设置为所有新项目。将设置修复为5.0后,问题得到解决。


2
我的问题是由于我使用一个第三方静态库,这个库有针对不同架构的文件,导致出现了问题。 我解决了这个问题,删除了不合法架构的二进制文件。我添加了一个支持多架构的FAT二进制文件来代替第三方静态库。 希望这能够帮到你。

1
在我的情况下,项目中包含的小部件导致了位码错误。
我将我的 pod 文件从这个改为了:
target "App" do
    pod 'A'
    pod 'B'
end

target "App Widget" do
    pod 'A'
end

转换为:

target "App" do
    pod 'A'
    pod 'B'

    target "App Widget" do
        pod 'A'
    end
end

1
我发现我的问题与使用“模块”有关。 只需关闭模块(必须更新一些头文件),但这解决了我的问题。 在设置中启用模块

1
不知道你的具体情况,但禁用模块并不是一个好主意。 - accfews

1
为了解决这个问题,大多数建议采用一种变通方法,即清理您的Xcode工作区/项目,关闭Xcode,删除您的Derived Data文件夹(默认情况下位于项目的根目录下),然后重新打开项目。但是,以上步骤可能对您无效。这表明您的项目结构存在错误。当 iOS 9.0 发布了项目的位码中间表示时,它是基于这样一个规定的:您的整个项目(包括依赖项)必须完全同意使用位码或不使用。从我的经验来看,重要的是要逐个处理所有Pods和包含的Libraries/Frameworks,并确保它们都使用相同的设置;无论是Yes还是No。默认情况下,此选择为Yes。如果单个依赖项与预期的位码设置不匹配,则可能会引发此错误。在检查依赖项和总体项目的健全性时,重要的是要注意:项目目标设置都有一个Use Bitcode设置,因此请确保检查构建设置的两个方面。

1
对于我的情况,解决方案是删除一个C++库。

可能只需设置 iOS 部署目标,而不是完全删除 C++ 库就可以解决问题:https://dev59.com/gFgQ5IYBdhLWcg3wLg45#46864401 - Jamie Birch

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