XCode 6.4 破坏了依赖 zipzap 的项目

XCode 6.4 breaks Project with zipzap dependency

在我升级​​到 XCode 6.4 之前,项目运行良好,但升级后我将构建失败归结为 zipzap。

Using CocoaPod 0.37.2

pod 'zipzap', '~> 8.0'

Linked Frameworks and Libraries = libz.1.2.5.dylib

Targeting iOS 7.0 +

构建失败

Undefined symbols for architecture arm64:
  "___cxa_begin_catch", referenced from:
      ___clang_call_terminate in libPods-Ally-zipzap.a(ZZArchive.o)
  "std::terminate()", referenced from:
      ___clang_call_terminate in libPods-Ally-zipzap.a(ZZArchive.o)
  "___gxx_personality_v0", referenced from:
      +[ZZArchive archiveWithURL:error:] in libPods-Ally-zipzap.a(ZZArchive.o)
      +[ZZArchive archiveWithData:error:] in libPods-Ally-zipzap.a(ZZArchive.o)
      -[ZZArchive initWithURL:options:error:] in libPods-Ally-zipzap.a(ZZArchive.o)
      -[ZZArchive initWithData:options:error:] in libPods-Ally-zipzap.a(ZZArchive.o)
      -[ZZArchive initWithChannel:options:error:] in libPods-Ally-zipzap.a(ZZArchive.o)
      -[ZZArchive loadCanMiss:error:] in libPods-Ally-zipzap.a(ZZArchive.o)
      -[ZZArchive updateEntries:error:] in libPods-Ally-zipzap.a(ZZArchive.o)
      ...
ld: symbol(s) not found for architecture arm64

到目前为止我所做的事情

  1. 对于项目和 Pods 项目:构建设置 > C++ 标准库 = libstdc++(最初是 libc++)
  2. 几次 pod deintegrate && rm *.lock && pod install

我也遇到过这个问题 - ZipZap podspec 已更新,在此过程中丢失了许多编译器标志:

https://github.com/pixelglow/ZipZap/commit/0e4e6aa885196640ca86462c6748e68a50c66ee9

我在我的项目中解决这个问题的方法是恢复编译器标志(在更新之前存在)如下:

  • 导航到工作区中的 Pods 项目
  • Select Pods-zipzap 目标
  • Select 构建阶段选项卡
  • 展开编译源部分
  • Select 所有 Objective-C++ 文件(扩展名为 .mm)- 按住 CMD 键到 select 多个文件
  • 添加编译器标志:-fno-objc-exceptions -fno-exceptions -std=c++11 -stdlib=libc++ -DOS_OBJECT_USE_OBJC=0
  • Select 所有 Objective-C 文件 (.m) 除了 Pods-zipzap-dummy.m
  • 添加编译器标志:-fno-objc-exceptions -std=c99 -DOS_OBJECT_USE_OBJC=0
  • Select 一个 C++ 文件 (.cpp)
  • 添加编译器标志:-fno-exceptions -std=c++11 -stdlib=libc++ -DOS_OBJECT_USE_OBJC=0

如果您有测试目标,您可能也需要在其中添加相同的标志。一切顺利,您现在应该可以重新构建了。

[更新]:将 Cocoapods 升级到版本 0.38.0 也将解决这些错误,但可能会导致当前 ZipZap 8.0.4 出现编译错误 - 请参阅 https://github.com/pixelglow/ZipZap/issues/105

或者,您可以在 Podfile 中回滚到 ZipZap 8.0.3。