12

我在 iOS 应用中使用 Dropbox Core API 已经有一段时间了。更新到 Xcode 7 后,当我尝试编译我的项目时收到以下错误:

ld: '.../Frameworks/Dropbox/iOS/DropboxSDK.framework/DropboxSDK' does not contain bitcode. 
You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated 
library from the vendor, or disable bitcode for this target. 

我知道 Bitcode 是什么以及它有什么用处。只需在目标构建设置中将Enable Bitcode选项设置为即可解决该错误。No在此之后,一切都编译没有任何错误,应用程序运行没有任何问题。

到目前为止一切顺利,但这是“正确”的解决方案吗?我检查了 Dropbox 页面以获取 SDK 的更新版本,但我已经使用了最新版本。

该项目包含一些其他不使用 Dropbox SDK 的 App Widget、Watch Extension 等目标。Enable Bitcode应该在这里使用什么选项?(出于某种原因)是否更好地No对所有目标使用相同的值(在我的情况下)?如果主应用程序目标不使用 Bitcode,那么为 Watch 和 Widget 目标启用 Bitcode 是否有意义?

这里的最佳做法是什么?

4

2 回答 2

5

似乎他们还没有发布支持位码的 API。这是官方 Dropbox 论坛上的主题链接,其中包括来自 Dropbox 的支持人员在此上下文中回复其他开发人员的问题。

以下是 Dropbox 支持人员的相关回复:

哦,太好了!我们还没有发布带有位码的 iOS Core SDK 更新,但是如果您需要 Core SDK 的位码支持,您可以直接添加源代码,因为它是开源的。这里有一个关于核心 SDK 的线程: https ://www.dropboxforum.com/hc/en-us/community/posts/204352929-Need-Bitcode-Framework

于 2015-09-22T21:20:19.297 回答
2

因为我问了这个问题,所以我只是在 Widget 和 Apple Watch 目标中使用时将选项设置Enable BitcodeNo在目标中。那工作得很好,我没有注意到任何问题或限制。Build SettingsYes

Include Bitcode现在,我尝试将我的应用程序的新版本发布到 App Store,并且在将应用程序文件上传到 Apple 时发现了一个复选框。启用此复选框后,我收到以下错误:

无效的匹配 O 格式。Match-O 包“MyApp.app/PlugIns/MyApp WatchKit Extension.appex”与主包中的 Match-O 不一致。

主包 Match-O 包含 armv7(机器码)和 arm64(机器码),而嵌套包 Match-O 包含 armv7(位码和机器码)和 arm64(位码和机器码)。

验证平台的所有目标是否具有一致的 ENABLE_BITCODE 构建设置值。

我不知道为什么现在这是一个问题,而我去年上传的所有其他版本都没有任何问题。但是,通过取消选中复选框可以轻松解决该问题Include Bitcode。然后上传被接受,没有任何问题。

但有一个更好的解决方案:正如 Greg 指出的,Dropbox 终于发布了支持 Bitcode 的 SDK 版本!

下载新的 SDK 1.3.14,将其包含在您的项目中并设置ENABLE_BITCODEYes所有目标,您就完成了。至少在 Apple 找到一种新方法来扰乱您的发布工作流程之前 :-)

于 2016-06-16T08:14:38.120 回答