iOS 9中的新警告:“所有位码都将被丢弃”


387

我在我的应用中收到有关Google框架的新警告:

(空):紧急:由于'/ Users / myname / Library / Mobile Documents / com〜apple〜CloudDocs / foldername / appname / GoogleMobileAds.framework / GoogleMobileAds(GADSlot + AdEvents.o)'均不包含位码,因此将删除所有位码。您必须在启用位码(Xcode设置ENABLE_BITCODE)的情况下重建它,从供应商处获取更新的库,或禁用此目标的位码。注意:将来会出现错误。

Xcode 7给了我大约204条关于同一概念的警告,而我对此一无所知。另外,从我的应用程序访问网络时遇到问题。这是来自调试区域的错误:

-canOpenURL:URL失败:“ kindle:// home”-错误:“此应用程序不允许查询方案点燃”

所有这些问题在iOS 8中都不存在。


因此,您已在Xcode目标中启用了位码?
Droppy 2015年

对不起,我是新来的,你能告诉我如何吗?
C.Farrugia 2015年

我从来没有做过,但它似乎是您必须要设置的。您似乎已经做到了。
Droppy 2015年

4
@Droppy AFAIK默认情况下已启用该设置,但是您可以随时在项目设置中将其禁用。
HAS

我关闭了它们,所有警告都消失了。我进行了一些研究,Google需要更新其框架以消除此错误,直到现在将其关闭才可以工作。有谁知道-canOpenURL:URL失败:“ kindle:// home”-错误:“此应用程序不允许查询方案点燃”?我不知道Xcode在说什么
C.Farrugia 2015年

Answers:


1023

您的库在编译时没有位码,但是在项目设置中启用了位码选项。说NOEnable Bitcode在你的目标生成设置和库生成设置删除警告。

对于那些想知道是否需要启用位码的人:

对于iOS应用,位码是默认值,但是可选的。对于watchOS和tvOS应用程序,需要位码。如果提供位码,则应用程序捆绑包中的所有应用程序和框架(项目中的所有目标)都需要包含位码。

https://help.apple.com/xcode/mac/current/#/devbbdc5ce4f


@Centurion不推荐使用以前的Google Analytics(分析)库,也不使用xcode 7 / ios9进行编译
zonabi 2015年

1
@goelv是的,您应该能够提交禁用了位码的应用程序。现在是可选的。将来可能会需要它。
zonabi

2
没有为我存档。XCODE 7之前的项目运行良好,即使将Enable Bitcode设置为NO,现在也无法存档。这是针对AWS库的。
ort11 2015年

1
在所有目标上禁用位码后仍然出现错误。
datWooWoo 2015年

110

在Xcode 7之后,默认情况下将启用bitcode选项。如果您的库是在没有位码的情况下编译的,但是在项目设置中启用了位码选项,则可以:

  1. 用位代码更新您的库,
  2. 说不启用位码在您的目标构建设置

在此处输入图片说明

和库构建设置以删除警告。

有关更多信息,请转到开发人员库中的位码文档

以及WWDC 2015大会102:“国际电联平台”

在此处输入图片说明


42

就我而言,避免该问题:

  1. 确保您正在使用Xcode 7而非较低版本。在较低版本中,此标志不存在。

  2. 设置:项目>构建设置>所有>构建选项>启用位码= NO

在此处输入图片说明


2
因此,您将必须使用XCode7并将EnableBitcode设置为YES重新编译项目中包含的库。如果您正在与3rd party .a librarires一起工作,则非常复杂。
哈维尔·卡拉特拉瓦·拉维里亚

15

方法canOpenUrl已在iOS 9中更改(由于隐私),并且不能随意使用。您的横幅广告提供商会检查已安装的应用程序,以便它们不会显示已安装的应用程序的横幅广告。

这给出了所有的日志语句,例如

-canOpenURL:URL失败:“ kindle:// home”-错误:“此应用程序不允许查询方案点燃”

提供者应为此更新其逻辑。

如果需要查询已安装的应用程序/可用方案,则需要将它们添加到info.plist文件中。

将键“ LSApplicationQueriesSchemes”作为数组添加到您的plist中。然后在该数组中添加字符串,例如“ kindle”。

当然,横幅广告并不是真正的选择(因为它们是动态的),但是您仍然可以通过这种方式查询自己的应用程序或特定的其他应用程序,例如Twitter和Facebook。

canOpenUrl:方法 canOpenUrl的文档:

有关LSApplicationQueriesSchemes密钥的文档


假设静态库将检查父应用程序深层链接,那么如何在静态库中使用异常“ LSApplicationQueriesSchemes”?通常,您没有为此的Info.plist。
loretoparisi 2015年

我不太确定,如果一个库需要检查其父目录之外的应用程序,则父目录应在info.plist中定义URL(因此请为框架记录文档)。如果canOpenUrl也返回no,那么父应用程序将无法处理它,那么您(我认为)还应将其包含在info.plist中
Saren Inden 2015年

13

如果您使用的是CocoaPods,并且要禁用所有库的位码,请在Podfile中使用以下命令

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ENABLE_BITCODE'] = 'NO'
        end
    end
end

8

免责声明:适用于那些支持需要自动化流程的持续集成工作流的人员。如果不这样做,请按照Javier的答案中所述使用Xcode 。

这对我来说可以ENABLE_BITCODE = NO通过命令行进行设置:

find . -name *project.pbxproj | xargs sed -i -e 's/\(GCC_VERSION = "";\)/\1\ ENABLE_BITCODE = NO;/g'

注意,这在Xcode版本之间可能很不稳定。它已通过Xcode 7.0.1进行了测试,并且是Cordova 4.0项目的一部分。



-2

Google已于2010年11月修复了此问题,请参阅https://code.google.com/p/analytics-issues/issues/detail?id=671。但是请注意,作为一个好的解决方案,它会带来更多错误:)

您还必须遵循此处列出的初始化方法:https : //developers.google.com/analytics/devguides/collection/ios/v2

最新的说明将使您头疼,因为它引用了Pod中未包含的实用程序。下面将失败与cocoapod

// Configure tracker from GoogleService-Info.plist.
NSError *configureError;
[[GGLContext sharedInstance] configureWithError:&configureError];
NSAssert(!configureError, @"Error configuring Google services: %@", configureError);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.