【问题标题】:Module not found inside 'Framework' -Swift.h file在“框架”-Swift.h 文件中找不到模块
【发布时间】:2021-11-27 20:49:50
【问题描述】:

我创建了这个示例 Swift 框架,其中包含通过 Cocoapods 集成的 GoogleMobileAds。我有一个类NativeAdView,它继承自GADNativeAdView

import GoogleMobileAds

@objc public class NativeAdView: GADNativeAdView {
    
}

我还有一个示例目标,它是一个 Objective-C 应用程序。我在我的 AppDelegate.m 中导入如下框架标题。

#import <SampleFramework/SampleFramework-Swift.h>

现在,当我运行 Objective-C 目标时,它会在文件 SampleFramework-Swift.h

中引发错误
@import GoogleMobileAds; -------- Module 'GoogleMobileAds' not found.

但是,如果我将 NativeAdView 的父类更改为 Google 广告类以外的任何其他内容,错误就会消失,并且构建会成功编译并运行。

@import GoogleMobileAds; 行也从 SampleFramework-Swift.h 文件中消失

我不知道发生了什么。

Github 链接 - https://github.com/rishabdutta/FrameworkSample

【问题讨论】:

    标签: ios swift objective-c ios-frameworks google-ad-manager


    【解决方案1】:

    首先,将目标 SampleFramework、SampleSwift、SampleObjc 的包标识符更新为不同。

    尝试如下更新 Podfile。 Cocoapods 以这种方式工作,在您的设置中,您必须为使用它的每个目标指定“Google-Mobile-Ads-SDK”,但为了避免复制该行,您可以使用abstract_target,因此依赖项会自动添加到所有目标里面:

    use_frameworks!
    
    abstract_target 'Common' do
      pod 'Google-Mobile-Ads-SDK'
    
      target 'SampleFramework' do
      end
    
      target 'SampleObjc' do
      end
    
      target 'SampleSwift' do
      end
    end
    

    但是这样你会面临一个运行时警告“Class APMAdExposureReporter isimplemented in both ...”,但应用程序会工作,警告不会引起真正的问题 - it's discussed here,但我个人不知道如何处理它的最佳实践。

    【讨论】:

      猜你喜欢
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多