有没有办法为 "UIApplication.shared "添加 "if (iOSApplicationExtension) "条件。

问题描述 投票:1回答:1

我正在寻找一种方法来添加一个条件来检查 是一个扩展目标 在框架中 不是主程序)。是否可以依靠 #available(iOSApplicationExtension, *) 与一些参数调整?

@objc public extension UIView {
    var isAccessibilityCategory: Bool {
        if #available(iOSApplicationExtension, *) {
            return self.traitCollection.preferredContentSizeCategory.isAccessibilityCategory
        } else {
            return UIApplication.shared.preferredContentSizeCategory.isAccessibilityCategory
        }
    }
}

如何检测代码是在Main App还是App Extension Target中运行? - 不行,因为框架不知道扩展目标的情况

ios swift ios-extensions
1个回答
1
投票

为了解决这个问题,我创建了一个枚举器与我创建的所有应用程序,当用户启动应用程序,我检查与捆绑标识符,我在哪个应用程序,我把它保存在appManager中,所以我可以执行一些变化后,基于应用程序的类型也在框架中。

这是我的Enum。

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
           }
       }
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.