有没有一种方法可以为UIApplication.shared添加if(iOSApplicationExtension)条件

时间:2020-05-13 10:46:28

标签: ios swift ios-extensions

我正在尝试找到一种添加条件的方法,以检查是否是扩展目标 (在框架中)(不是主应用)。是否可以依靠#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?-不起作用,因为框架不知道扩展目标

1 个答案:

答案 0 :(得分:-2)

为解决此问题,我用我创建的所有应用程序创建了一个枚举器,当用户启动该应用程序时,我使用捆绑标识符进行检查,并将其保存在appManager中,然后将其保存在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
           }
       }
   }
}