【问题标题】:iOS Framework issue: Class is implemented in bothiOS 框架问题:类在两者中都实现
【发布时间】:2016-10-20 05:21:33
【问题描述】:

我正在开发一个使用第三方框架类的 iOS 框架项目,因此我在 Linked frameworks and libraries 部分下添加了第三方框架。

当我在 iOS 应用项目中添加自定义框架时,每个类都会收到此警告

objc[3139]:类 'class_name' 在两者中都实现 /private/var/containers/Bundle/Application/C131AF0F-7CF8-4360-8716-3E8A595169D6/'app_name'.app/Frameworks/'framework_name'.framework/'framework_name' 和 /var/containers/Bundle/Application/C131AF0F-7CF8-4360-8716-3E8A595169D6/'app_name'.app/'app_name'。 将使用两者之一。哪一个是未定义的。

iOS 应用项目也与该第三方框架相关联。所以我认为遇到这个问题是因为我的框架还包含第三方框架的编译版本。

我没有找到任何合适的解决方案。谁能告诉我如何摆脱这个?

有什么办法可以让它工作吗?

【问题讨论】:

  • 这可能在框架中,而不是您的应用中
  • 在应用层面不链接第三方框架会怎样?
  • 如果我不在应用程序级别链接第 3 方框架,我在我的框架中导入的第 3 方框架的类会抛出错误
  • 你有和框架中的类同名的类名吗?
  • 不,我已经检查过了。我框架的所有类都有不同的前缀。

标签: ios objective-c xcode7


【解决方案1】:

tl;dr 不要在应用程序目标的构建阶段中链接第三方框架。请改用Link Frameworks Automatically


为了更清楚一点,让我举个例子。有一个名为 CrashReporter.framework 的第三方框架。自定义框架称为 HockeySDK.framework(链接到 CrashReporter.framework)。然后我有一个名为 WeatherApp 的应用程序(链接到 HockeySDK.framework)。

CrashReporter.framework  <---
    ^                        |
    |                        |
    |                      X X X   NO! DONT'T LINK THIS!
HockeySDK.framework          |
    ^                        |
    |                        |
    |                        |
WeatherApp  -----------------

在 WeatherApp 目标的 Build PhasesLink Binary With Libraries 部分中链接 CrashReporter.framework(即使 Weather 应用需要 CrashReproter.framework 来构建)。我转到 WeatherApp 目标的 Build Settings 并确保将 Link Frameworks Automatically(如果在 iOS 上则为 Enable Modules (C and Objective-C))设置为 Yes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-24
    • 2016-01-12
    • 2021-03-13
    • 2015-05-30
    • 2015-08-15
    相关资源
    最近更新 更多