【问题标题】:Using static library in both App and Cocoa Touch Framework targets在 App 和 Cocoa Touch Framework 目标中使用静态库
【发布时间】:2015-06-18 04:29:14
【问题描述】:

我在名为 MyApp 的 iPad 项目中创建了一个名为 MyAppCore 的新“Cocoa Touch 框架”目标,目的是在其中放置一些通用代码。总的来说,它工作得很好,但是,我在添加 Google Analytics 提供的静态库时遇到了问题。

我希望不仅能够在 MyApp 目标中使用 Google Analytics,还希望能够在 MyAppCore 目标内部使用。为了构建两个目标,我必须将两个目标与 libGoogleAnalyticsServices.a 链接。这似乎可行,但是当我运行该应用程序时,日志会被以下消息轰炸:

Class GAI is implemented in both /path/to/MyAppCore.framework/MyAppCore 
and /path/to/MyApp.app/MyApp.
One of the two will be used. Which one is undefined.

如何在两个目标之间成功共享 Google Analytics?

【问题讨论】:

  • 你找到解决办法了吗?

标签: objective-c cocoa-touch google-analytics frameworks static-libraries


【解决方案1】:

我设法通过在 MyAppCore 目标中为 Google Analytics(无论如何拥有它非常方便)创建一个包装类来解决这个问题。所有对谷歌分析的访问都将通过这个包装器。这样一来,直接使用 Google Analytics 的唯一目标是 MyAppCore,因此我只需将该目标与 Google Analytics 相关联。

这并不能解决在我的应用程序目标和 Cocoa Touch 框架之间共享静态库的根本问题,但为此目的它也可以正常工作。

【讨论】:

    【解决方案2】:

    即使您的静态库依赖于外部静态库,也不要链接到它。您的主应用程序将链接到您的库和第 3 方库。静态库是一堆已构建的代码,因此您拥有所有按照您现在的方式做事的所有内容的两个副本。

    您应该仍然能够引用第 3 方库的标头,并且应该在您的静态库上编译,而不会出现任何警告。

    在我的应用程序中,我有两个静态库。 “Wraith”依赖于“PhilosophersStone”,应用程序依赖于两者。 (构建阶段的目标依赖)

    “Wraith”不链接到“PhilosophersStone”,主应用程序链接到两者。 (在构建阶段将二进制文件与库链接)

    【讨论】:

    • 感谢您的精彩回答。这在我的情况下不起作用,可能是因为 MyAppCore 不是静态库(如您示例中的 Wraith)。 MyAppCore 是一个动态框架,XCode 称之为“Cocoa Touch 框架”。不是“Cocoa Touch 静态库”。
    猜你喜欢
    • 1970-01-01
    • 2016-02-12
    • 2019-02-21
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    相关资源
    最近更新 更多