有没有办法为`UIApplication.shared`添加`if(iOSApplicationExtension)`条件
Posted
技术标签:
【中文标题】有没有办法为`UIApplication.shared`添加`if(iOSApplicationExtension)`条件【英文标题】:Is there a way to add `if (iOSApplicationExtension)` condition for `UIApplication.shared` 【发布时间】:2020-05-13 10:46:28 【问题描述】:我正在尝试找到一种方法来添加条件以检查 是扩展目标 在框架中(不是主应用程序)。是否可以依靠#available(iosApplicationExtension, *)
进行一些参数调整?
@objc public extension UIView
var isAccessibilityCategory: Bool
if #available(iOSApplicationExtension, *)
return self.traitCollection.preferredContentSizeCategory.isAccessibilityCategory
else
return UIApplication.shared.preferredContentSizeCategory.isAccessibilityCategory
How to detect if code is running in Main App or App Extension Target? - 不起作用,因为框架不知道扩展目标
【问题讨论】:
#available
语句不能用于检测应用程序扩展等目标类型。这只能检测应用程序运行的操作系统和操作系统版本。 #available
的创建是为了让您可以使用仅在比您的最低目标依赖项更新的操作系统版本中可用的系统功能 - 例如在针对 iOS13 的项目中使用 Combine 或 SwiftUI
另外,在您的原件作为副本关闭后,您不应该问完全相同的问题。如果您不同意重复关闭,请编辑您的问题以解释为什么重复的答案不适用于您的问题,并在 cmets 中标记更接近的内容,以便他们在同意的情况下重新打开您的问题。为什么this 特定答案不适用于您的问题?它不需要来自框架的关于运行它的应用程序/扩展的知识。
@DávidPásztor 我需要一个在编译时而不是运行时正确处理 UIApplication.shared
的条件
你找到办法了吗?
【参考方案1】:
为了解决这个问题,我用我创建的所有应用程序创建了一个枚举器,当用户启动应用程序时,我检查我所在的应用程序的捆绑标识符并将其保存在 appManager 中,这样我就可以执行一些更改也基于框架中的应用类型。
这是我的枚举:
public enum MyApp: Int, CaseIterable
case sysReserved = 0
case app1 = 1
public var applicationId : [String]
switch self
case .sysReserved:
return [""]
case .parametersEditor:
return ["com.team.app1"]
这是我的 AppManager
class AppManager: UIApplication
var CURRENT_APP: MyApp = .sysReserved
override init()
super.init()
getCurrentApplicationInfo()
internal func getCurrentApplicationInfo()
CURRENT_VERSION_NUM = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
CURRENT_BUILD_NUM = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String
let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleIdentifier") as! String
CURRENT_APP = .sysReserved
for app in Application.allCases
if app.applicationId.contains(appName)
CURRENT_APP = app
【讨论】:
以上是关于有没有办法为`UIApplication.shared`添加`if(iOSApplicationExtension)`条件的主要内容,如果未能解决你的问题,请参考以下文章