【问题标题】:Google Protobufs in iOS app crashing at GPBDescriptoriOS 应用程序中的 Google Protobufs 在 GPBDescriptor 处崩溃
【发布时间】:2021-03-26 18:32:51
【问题描述】:

这个真是让人头疼……

第一部分

我们有一个快速的 iOS 应用程序,具有不同的开发和生产目标(普通的东西)。

我们已将 Google Protobufs 纳入其中,以实现我们的一项最新功能。这是使用 Google 的 J2ObjC 库和 pod 'Protobuf', '= 3.11.4' pod 完成的。 (我们的.proto 文件是使用 v3.11.4 制作的)。

运行我们的 Dev 目标可以正常工作(主要见第二部分)。运行我们的 Prod 目标在任何 GPBMessage 对象的构造函数中崩溃。

它在我们的消息对象的pbobc.m 文件的+ (GPBDescriptor *)descriptor 函数内崩溃...最终在GPBDescriptor.m 中出现此错误

行:

enumHandling_.enumDescriptor_ = coreDesc->dataTypeSpecific.enumDescFunc();

错误:

(lldb) po coreDesc->dataTpeSpecific
error: <user expression 2>:1:11: no member named 'dataTpeSpecific' in 'GPBMessageFieldDescription'
coreDesc->dataTpeSpecific
~~~~~~~~  ^

奇怪的是这会在 Prod 而不是 Dev 中崩溃。梳理两个目标的构建设置...它们相同。构建阶段相同,构建规则相同,Plists 基本相同......

我不知道还要检查什么。

第二部分

在我们的 Dev 和 Prod 目标中,有一条 GPB 消息在初始化时崩溃。 (我们可以在没有它的情况下运行,所以我在开发过程中将其注释掉了。) 此消息与其他消息之间的区别在于,此消息是枚举列表。 它在同一条线上崩溃。 ¯\(ツ)

提前非常感谢! :D

【问题讨论】:

    标签: ios swift objective-c protocol-buffers


    【解决方案1】:

    当然,在我发布问题后我会立即找到答案...... Google protocol buffers on iOS

    需要将-fno-objc-arc 添加到Build PhasesCompile Sources 中的每个...pbobjc.m 文件中。 我已经为 Dev 中的一些文件完成了此操作,因此存在(非常细微的!)差异。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-26
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 2017-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多