Ios 在Swift项目中包含基于方案的某些Objective-C文件

Ios 在Swift项目中包含基于方案的某些Objective-C文件,ios,objective-c,xcode,swift,Ios,Objective C,Xcode,Swift,我正在使用来更改模拟器中的状态栏。我不能在非屏幕截图构建中包含这一点,因为代码在设备上不起作用,并且使用私有API,从而限制了向应用商店的提交。项目文件直接包含在项目中,无需使用框架,因为应用程序的目标是iOS 7 在Objective-C桥接标题中,我有: #ifdef SNAPSHOT #import "SDStatusBarManager.h" #endif 然后,我有一个单独的发布名称“snapshot”,它具有以下值: Preprocessor Macros: SNAPSHOT=1

我正在使用来更改模拟器中的状态栏。我不能在非屏幕截图构建中包含这一点,因为代码在设备上不起作用,并且使用私有API,从而限制了向应用商店的提交。项目文件直接包含在项目中,无需使用框架,因为应用程序的目标是iOS 7

在Objective-C桥接标题中,我有:

#ifdef SNAPSHOT
#import "SDStatusBarManager.h"
#endif
然后,我有一个单独的发布名称“snapshot”,它具有以下值:

Preprocessor Macros: SNAPSHOT=1
Other Swift Flags: -D SNAPSHOT
在我的应用程序代理中,我有:

#if SNAPSHOT
SDStatusBarManager.sharedInstance().enableOverrides()
#endif

我(错误地)认为这将允许我提交到应用商店,因为代码不会被编译,但我错了。有没有办法只将此代码包含在快照构建中?

我的猜测是,即使在使用“快照”标志构建时只调用库,库二进制文件仍与应用程序链接,因此被苹果拒绝

SimulatorStatusMagic的自述文件说,只有在调试模式下才能将其添加到项目中,以避免出现这种情况,并且您的Podfile设置也应该反映出这一点

pod'SimulatorStatusMagic',:configurations=>['Debug']


参考资料:

我没有使用CocoaPods或Carthage,因为该应用程序的目标是iOS 7.0。我应该在问题中说明这一点!哎呀!对不起,约瑟夫。原因可能是相同的,不过,您只需要弄清楚在构建发布版时如何不链接SimulatorStatusMagic。例如,您可以在SimulatorStatusMagic的源文件中添加
#ifdef DEBUG
。试试看,告诉我它是否有效,我会修正我的答案:)我肯定这会有效,但我想避免修改项目的文件,因为项目添加了一个git子模块,如果我确实做了更改,那么如果不手动覆盖我的更改,然后添加
#ifdef SNAPSHOT
,则不会应用任何未来的更新。如果没有其他解决方案,我会接受这个答案。@JosephDuffy,你是如何构建/链接到SimulatorStatusMagic的?退房尝试将其设置为仅在特定配置上链接或包含源文件。