我为我的 iOS 应用程序创建了一个库,但收到警告 linking against a dylib which is not safe for use in application extensions
.
我知道这是因为我没有启用 Allow app extension API only
为我的图书馆。因此,当我启用该设置时,我的库会在我使用 UIApplication.shared
的地方出现错误.
我知道我不能使用 shared
在我的扩展程序中,实际上并不需要,但是我的应用程序和我的扩展程序都使用了这个库。
所以问题是,我怎样才能在 UIApplication.shared
附近编译带有守卫的库?
我已经使用了这个:
#if !IS_EXTENSION
// Cancel the background task
UIApplication.shared.endBackgroundTask(bgTask)
#endif
并设置IS_EXTENSION
对于 Active Compilation Conditions
在我的扩展目标中,还有 IS_EXTENSION=1
对于 Preprocessor Macros
在我的应用程序扩展中,但是库仍然在这些行上给我警告。
最佳答案
第一个解决方案
我建议你在你的库中使用 UIApplication 注入(inject)。可以这样实现。
您的 lib 实例可能类似于以下内容:
class DarrenLib {
static var shared = DarrenLib()
// User application instance everywhere where needed in your lib.
private var application: UIApplication?
func setup(_ app: UIApplication) {
self.application = app
}
}
作为示例注入(inject)可以在完成启动功能中完成:func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
DarrenLib.shared.setup(application)
return true
}
我不建议使用预处理器宏,因为它取决于无法完成的附加设置要求抛出源代码。第二种解决方案
同样,您当前正在使用应用程序和扩展程序目标。您可以创建这些框架:
DJApp 将嵌入 DJSwiftCommonHelpers 和 DJSwiftAppHelpers 框架。
DJNotificationExtension 将嵌入 DJSwiftCommonHelpers 和 DJSwiftExtensionHelpers 框架。
关于ios - 支持应用程序和扩展程序的 Swift 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64699041/