Ios 从具有多个目标且具有编译条件的工作区中排除AdMob

Ios 从具有多个目标且具有编译条件的工作区中排除AdMob,ios,admob,Ios,Admob,我已经能够用几个不同的目标建立一个工作区。他们中只有少数人运行广告。使用谷歌AdMob,我想确保AdMob代码只出现在包含广告的目标中 在Xcode 11、swift 5中——使用Cocoapods——我已经正确设置了pod文件,以便“Google移动广告SDK”只包含在正确的目标中 我的实现在Build Settings>Swift编译器自定义标记一个标记的定义“-DADS_ON”,然后使用活动编译条件(#if ADS_ON)来包括广告服务代码。例如: #if ADS_ON @IBOu

我已经能够用几个不同的目标建立一个工作区。他们中只有少数人运行广告。使用谷歌AdMob,我想确保AdMob代码只出现在包含广告的目标中

在Xcode 11、swift 5中——使用Cocoapods——我已经正确设置了pod文件,以便“Google移动广告SDK”只包含在正确的目标中

我的实现在Build Settings>Swift编译器自定义标记一个标记的定义“-DADS_ON”,然后使用活动编译条件(#if ADS_ON)来包括广告服务代码。例如:

 #if ADS_ON
   @IBOutlet weak var bannerView: GADBannerView!
 #else
   @IBOutlet weak var bannerView: UIView!
 #endif

通过包含/排除来自不同目标的某些文件,我能够确保这对于有SDK或没有SDK的目标都能正常工作

我已经创建了一个空的GADBannerView

@objc(GADBannerView) class GADBannerView : UIView {
// no code here
}
这样,没有广告的目标也可以有相同的故事板


我的问题:这看起来既笨拙又脆弱,是否有更好的方法将依赖SDK的代码从目标中排除

您可以创建一个2文件,而不是一个。第一个文件是针对SDK的,第二个文件是针对无SDK文件的。所有这些文件都有相同的名称,但目标不同。创建两个文件并将其包含在不同的目标中可能会起作用,但会带来更大的代码管理成本——我更喜欢使用#if编译条件。
@objc(GADBannerView) class GADBannerView : UIView {
// no code here
}