I had this problem because FlurryAds 5.0.0 uses ZipArchive internally, but we also use ZipArchive (via Cocoapods) in our own app. It could be caused by using any of the same zip-related libraries that Flurry uses.
If you are using ZipArchive and its dependencies anywhere in your app then there is a conflict because your copy of ZipArchive and FlurryAds's copy of ZipArchives are both defining the same symbols.
This is an Objective-C problem, because Objective-C doesn't support namespacing, which would let the two copies live together.
You can blame Flurry, also, because they are distributing a binary library without prefixing their dependencies (i.e. FlurryZipArchive
, prefixing would be an alternative to namespacing).
The imperfect solution for now is to remove ZipArchive.m
, ioapi.c
, mztools.c
, unzip.c
, and zip.c
from your target.
You can still import ZipArchive.h
and use it, but it is somewhat dangerous because we don't know which version of ZipArchive FlurryAds is using (or if they might have modified it), so we can't be sure that our header file is compatible with the symbols they are defining in the library.
It's probably fine, Flurry probably is using the latest version and didn't modify it.
However, we should ask Flurry to either make ZipArchive an explicit external dependency (so we can share one installation and one header for ZipArchive) or to prefix ZipArchive so that it doesn't affect other dependencies.