--- /dev/null
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 56;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 18C6B3F32D228F630094EC31 /* HsFileAgentSdk.h in Headers */ = {isa = PBXBuildFile; fileRef = 18C6B3F22D228F630094EC31 /* HsFileAgentSdk.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 18C6B3FA2D228F870094EC31 /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18C6B3F92D228F870094EC31 /* Test.swift */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 18C6B3EF2D228F630094EC31 /* HsFileAgentSdk.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = HsFileAgentSdk.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 18C6B3F22D228F630094EC31 /* HsFileAgentSdk.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HsFileAgentSdk.h; sourceTree = "<group>"; };
+ 18C6B3F92D228F870094EC31 /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 18C6B3EC2D228F630094EC31 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 18C6B3E52D228F630094EC31 = {
+ isa = PBXGroup;
+ children = (
+ 18C6B3F12D228F630094EC31 /* HsFileAgentSdk */,
+ 18C6B3F02D228F630094EC31 /* Products */,
+ );
+ sourceTree = "<group>";
+ };
+ 18C6B3F02D228F630094EC31 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 18C6B3EF2D228F630094EC31 /* HsFileAgentSdk.framework */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 18C6B3F12D228F630094EC31 /* HsFileAgentSdk */ = {
+ isa = PBXGroup;
+ children = (
+ 18C6B3F22D228F630094EC31 /* HsFileAgentSdk.h */,
+ 18C6B3F92D228F870094EC31 /* Test.swift */,
+ );
+ path = HsFileAgentSdk;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ 18C6B3EA2D228F630094EC31 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 18C6B3F32D228F630094EC31 /* HsFileAgentSdk.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ 18C6B3EE2D228F630094EC31 /* HsFileAgentSdk */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 18C6B3F62D228F630094EC31 /* Build configuration list for PBXNativeTarget "HsFileAgentSdk" */;
+ buildPhases = (
+ 18C6B3EA2D228F630094EC31 /* Headers */,
+ 18C6B3EB2D228F630094EC31 /* Sources */,
+ 18C6B3EC2D228F630094EC31 /* Frameworks */,
+ 18C6B3ED2D228F630094EC31 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = HsFileAgentSdk;
+ productName = HsFileAgentSdk;
+ productReference = 18C6B3EF2D228F630094EC31 /* HsFileAgentSdk.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 18C6B3E62D228F630094EC31 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = 1;
+ LastUpgradeCheck = 1520;
+ TargetAttributes = {
+ 18C6B3EE2D228F630094EC31 = {
+ CreatedOnToolsVersion = 15.2;
+ LastSwiftMigration = 1520;
+ };
+ };
+ };
+ buildConfigurationList = 18C6B3E92D228F630094EC31 /* Build configuration list for PBXProject "HsFileAgentSdk" */;
+ compatibilityVersion = "Xcode 14.0";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 18C6B3E52D228F630094EC31;
+ productRefGroup = 18C6B3F02D228F630094EC31 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 18C6B3EE2D228F630094EC31 /* HsFileAgentSdk */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 18C6B3ED2D228F630094EC31 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 18C6B3EB2D228F630094EC31 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 18C6B3FA2D228F870094EC31 /* Test.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 18C6B3F42D228F630094EC31 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ CURRENT_PROJECT_VERSION = 1;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 17.2;
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 18C6B3F52D228F630094EC31 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ CURRENT_PROJECT_VERSION = 1;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 17.2;
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
+ SDKROOT = iphoneos;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ VALIDATE_PRODUCT = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 18C6B3F72D228F630094EC31 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DEVELOPMENT_TEAM = M33X987285;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MARKETING_VERSION = 1.0;
+ MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
+ PRODUCT_BUNDLE_IDENTIFIER = sort.HsFileAgentSdk;
+ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
+ SKIP_INSTALL = YES;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 18C6B3F82D228F630094EC31 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DEVELOPMENT_TEAM = M33X987285;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MARKETING_VERSION = 1.0;
+ MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
+ PRODUCT_BUNDLE_IDENTIFIER = sort.HsFileAgentSdk;
+ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
+ SKIP_INSTALL = YES;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 18C6B3E92D228F630094EC31 /* Build configuration list for PBXProject "HsFileAgentSdk" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 18C6B3F42D228F630094EC31 /* Debug */,
+ 18C6B3F52D228F630094EC31 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 18C6B3F62D228F630094EC31 /* Build configuration list for PBXNativeTarget "HsFileAgentSdk" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 18C6B3F72D228F630094EC31 /* Debug */,
+ 18C6B3F82D228F630094EC31 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 18C6B3E62D228F630094EC31 /* Project object */;
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+ version = "1.0">
+ <FileRef
+ location = "self:">
+ </FileRef>
+</Workspace>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>IDEDidComputeMac32BitWarning</key>
+ <true/>
+</dict>
+</plist>
--- /dev/null
+//
+// HsFileAgentSdk.h
+// HsFileAgentSdk
+//
+// Created by incar on 2024/12/30.
+//
+
+#import <Foundation/Foundation.h>
+
+//! Project version number for HsFileAgentSdk.
+FOUNDATION_EXPORT double HsFileAgentSdkVersionNumber;
+
+//! Project version string for HsFileAgentSdk.
+FOUNDATION_EXPORT const unsigned char HsFileAgentSdkVersionString[];
+
+// In this header, you should import all the public headers of your framework using statements like #import <HsFileAgentSdk/PublicHeader.h>
+
+
--- /dev/null
+//
+// Test.swift
+// HsFileAgentSdk
+//
+// Created by incar on 2024/12/30.
+//
+
+import Foundation
+
+public class Test {
+ public func add(){
+ print("11111111111111")
+ }
+}
--- /dev/null
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 56;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 18C6B3D22D228E7C0094EC31 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18C6B3D12D228E7C0094EC31 /* AppDelegate.swift */; };
+ 18C6B3D42D228E7C0094EC31 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18C6B3D32D228E7C0094EC31 /* SceneDelegate.swift */; };
+ 18C6B3D62D228E7C0094EC31 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18C6B3D52D228E7C0094EC31 /* ViewController.swift */; };
+ 18C6B3D92D228E7C0094EC31 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 18C6B3D72D228E7C0094EC31 /* Main.storyboard */; };
+ 18C6B3DB2D228E7F0094EC31 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 18C6B3DA2D228E7F0094EC31 /* Assets.xcassets */; };
+ 18C6B3DE2D228E7F0094EC31 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 18C6B3DC2D228E7F0094EC31 /* LaunchScreen.storyboard */; };
+ 18C6B4012D2291010094EC31 /* HsFileAgentSdk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18C6B4002D2290260094EC31 /* HsFileAgentSdk.framework */; };
+ 203EB93A49CB737E4F45D1E3 /* Pods_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6DD67AA5911CF764742E2BF /* Pods_Example.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 18C6B3FF2D2290260094EC31 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 18C6B3FB2D2290250094EC31 /* HsFileAgentSdk.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 18C6B3EF2D228F630094EC31;
+ remoteInfo = HsFileAgentSdk;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 18C6B3CE2D228E7C0094EC31 /* Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 18C6B3D12D228E7C0094EC31 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
+ 18C6B3D32D228E7C0094EC31 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
+ 18C6B3D52D228E7C0094EC31 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
+ 18C6B3D82D228E7C0094EC31 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
+ 18C6B3DA2D228E7F0094EC31 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
+ 18C6B3DD2D228E7F0094EC31 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
+ 18C6B3DF2D228E7F0094EC31 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+ 18C6B3FB2D2290250094EC31 /* HsFileAgentSdk.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = HsFileAgentSdk.xcodeproj; path = ../HsFileAgentSdk/HsFileAgentSdk.xcodeproj; sourceTree = "<group>"; };
+ 4FE93AC269F1698C0AFF07F6 /* Pods-Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.release.xcconfig"; path = "Target Support Files/Pods-Example/Pods-Example.release.xcconfig"; sourceTree = "<group>"; };
+ D6DD67AA5911CF764742E2BF /* Pods_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ F60A132AAB6BA45E7A788407 /* Pods-Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.debug.xcconfig"; path = "Target Support Files/Pods-Example/Pods-Example.debug.xcconfig"; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 18C6B3CB2D228E7C0094EC31 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 18C6B4012D2291010094EC31 /* HsFileAgentSdk.framework in Frameworks */,
+ 203EB93A49CB737E4F45D1E3 /* Pods_Example.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 0933187D506D377F0154D70A /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ D6DD67AA5911CF764742E2BF /* Pods_Example.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+ 18C6B3C52D228E7C0094EC31 = {
+ isa = PBXGroup;
+ children = (
+ 18C6B3FB2D2290250094EC31 /* HsFileAgentSdk.xcodeproj */,
+ 18C6B3D02D228E7C0094EC31 /* Example */,
+ 18C6B3CF2D228E7C0094EC31 /* Products */,
+ 9FF8AAF12CB0A95F5ACFF820 /* Pods */,
+ 0933187D506D377F0154D70A /* Frameworks */,
+ );
+ sourceTree = "<group>";
+ };
+ 18C6B3CF2D228E7C0094EC31 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 18C6B3CE2D228E7C0094EC31 /* Example.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 18C6B3D02D228E7C0094EC31 /* Example */ = {
+ isa = PBXGroup;
+ children = (
+ 18C6B3D12D228E7C0094EC31 /* AppDelegate.swift */,
+ 18C6B3D32D228E7C0094EC31 /* SceneDelegate.swift */,
+ 18C6B3D52D228E7C0094EC31 /* ViewController.swift */,
+ 18C6B3D72D228E7C0094EC31 /* Main.storyboard */,
+ 18C6B3DA2D228E7F0094EC31 /* Assets.xcassets */,
+ 18C6B3DC2D228E7F0094EC31 /* LaunchScreen.storyboard */,
+ 18C6B3DF2D228E7F0094EC31 /* Info.plist */,
+ );
+ path = Example;
+ sourceTree = "<group>";
+ };
+ 18C6B3FC2D2290250094EC31 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 18C6B4002D2290260094EC31 /* HsFileAgentSdk.framework */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 9FF8AAF12CB0A95F5ACFF820 /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ F60A132AAB6BA45E7A788407 /* Pods-Example.debug.xcconfig */,
+ 4FE93AC269F1698C0AFF07F6 /* Pods-Example.release.xcconfig */,
+ );
+ name = Pods;
+ path = ../Pods;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 18C6B3CD2D228E7C0094EC31 /* Example */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 18C6B3E22D228E7F0094EC31 /* Build configuration list for PBXNativeTarget "Example" */;
+ buildPhases = (
+ 232C44D5DDB62E8C65EB7081 /* [CP] Check Pods Manifest.lock */,
+ 18C6B3CA2D228E7C0094EC31 /* Sources */,
+ 18C6B3CB2D228E7C0094EC31 /* Frameworks */,
+ 18C6B3CC2D228E7C0094EC31 /* Resources */,
+ 65FE16E826B648BE8A1DB8BA /* [CP] Embed Pods Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Example;
+ productName = Example;
+ productReference = 18C6B3CE2D228E7C0094EC31 /* Example.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 18C6B3C62D228E7C0094EC31 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = 1;
+ LastSwiftUpdateCheck = 1520;
+ LastUpgradeCheck = 1520;
+ TargetAttributes = {
+ 18C6B3CD2D228E7C0094EC31 = {
+ CreatedOnToolsVersion = 15.2;
+ };
+ };
+ };
+ buildConfigurationList = 18C6B3C92D228E7C0094EC31 /* Build configuration list for PBXProject "Example" */;
+ compatibilityVersion = "Xcode 14.0";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 18C6B3C52D228E7C0094EC31;
+ productRefGroup = 18C6B3CF2D228E7C0094EC31 /* Products */;
+ projectDirPath = "";
+ projectReferences = (
+ {
+ ProductGroup = 18C6B3FC2D2290250094EC31 /* Products */;
+ ProjectRef = 18C6B3FB2D2290250094EC31 /* HsFileAgentSdk.xcodeproj */;
+ },
+ );
+ projectRoot = "";
+ targets = (
+ 18C6B3CD2D228E7C0094EC31 /* Example */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXReferenceProxy section */
+ 18C6B4002D2290260094EC31 /* HsFileAgentSdk.framework */ = {
+ isa = PBXReferenceProxy;
+ fileType = wrapper.framework;
+ path = HsFileAgentSdk.framework;
+ remoteRef = 18C6B3FF2D2290260094EC31 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+/* End PBXReferenceProxy section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 18C6B3CC2D228E7C0094EC31 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 18C6B3DE2D228E7F0094EC31 /* LaunchScreen.storyboard in Resources */,
+ 18C6B3DB2D228E7F0094EC31 /* Assets.xcassets in Resources */,
+ 18C6B3D92D228E7C0094EC31 /* Main.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 232C44D5DDB62E8C65EB7081 /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-Example-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 65FE16E826B648BE8A1DB8BA /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 18C6B3CA2D228E7C0094EC31 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 18C6B3D62D228E7C0094EC31 /* ViewController.swift in Sources */,
+ 18C6B3D22D228E7C0094EC31 /* AppDelegate.swift in Sources */,
+ 18C6B3D42D228E7C0094EC31 /* SceneDelegate.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 18C6B3D72D228E7C0094EC31 /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 18C6B3D82D228E7C0094EC31 /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "<group>";
+ };
+ 18C6B3DC2D228E7F0094EC31 /* LaunchScreen.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 18C6B3DD2D228E7F0094EC31 /* Base */,
+ );
+ name = LaunchScreen.storyboard;
+ sourceTree = "<group>";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 18C6B3E02D228E7F0094EC31 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 17.2;
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ };
+ name = Debug;
+ };
+ 18C6B3E12D228E7F0094EC31 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 17.2;
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
+ SDKROOT = iphoneos;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 18C6B3E32D228E7F0094EC31 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = F60A132AAB6BA45E7A788407 /* Pods-Example.debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = M33X987285;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = Example/Info.plist;
+ INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
+ INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
+ INFOPLIST_KEY_UIMainStoryboardFile = Main;
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = sort.Example;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 18C6B3E42D228E7F0094EC31 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 4FE93AC269F1698C0AFF07F6 /* Pods-Example.release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = M33X987285;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = Example/Info.plist;
+ INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
+ INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
+ INFOPLIST_KEY_UIMainStoryboardFile = Main;
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = sort.Example;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 18C6B3C92D228E7C0094EC31 /* Build configuration list for PBXProject "Example" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 18C6B3E02D228E7F0094EC31 /* Debug */,
+ 18C6B3E12D228E7F0094EC31 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 18C6B3E22D228E7F0094EC31 /* Build configuration list for PBXNativeTarget "Example" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 18C6B3E32D228E7F0094EC31 /* Debug */,
+ 18C6B3E42D228E7F0094EC31 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 18C6B3C62D228E7C0094EC31 /* Project object */;
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+ version = "1.0">
+ <FileRef
+ location = "self:">
+ </FileRef>
+</Workspace>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>IDEDidComputeMac32BitWarning</key>
+ <true/>
+</dict>
+</plist>
--- /dev/null
+//
+// AppDelegate.swift
+// Example
+//
+// Created by incar on 2024/12/30.
+//
+
+import UIKit
+
+@main
+class AppDelegate: UIResponder, UIApplicationDelegate {
+
+
+
+ func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
+ // Override point for customization after application launch.
+ return true
+ }
+
+ // MARK: UISceneSession Lifecycle
+
+ func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
+ // Called when a new scene session is being created.
+ // Use this method to select a configuration to create the new scene with.
+ return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
+ }
+
+ func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
+ // Called when the user discards a scene session.
+ // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
+ // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
+ }
+
+
+}
+
--- /dev/null
+{
+ "colors" : [
+ {
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
--- /dev/null
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
--- /dev/null
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
+ <dependencies>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
+ <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+ <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+ </dependencies>
+ <scenes>
+ <!--View Controller-->
+ <scene sceneID="EHf-IW-A2E">
+ <objects>
+ <viewController id="01J-lp-oVM" sceneMemberID="viewController">
+ <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
+ <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
+ </view>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="53" y="375"/>
+ </scene>
+ </scenes>
+</document>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
+ <dependencies>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
+ <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+ <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+ </dependencies>
+ <scenes>
+ <!--View Controller-->
+ <scene sceneID="tne-QT-ifu">
+ <objects>
+ <viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="target" sceneMemberID="viewController">
+ <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
+ <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
+ </view>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
+ </objects>
+ </scene>
+ </scenes>
+</document>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>UIApplicationSceneManifest</key>
+ <dict>
+ <key>UIApplicationSupportsMultipleScenes</key>
+ <false/>
+ <key>UISceneConfigurations</key>
+ <dict>
+ <key>UIWindowSceneSessionRoleApplication</key>
+ <array>
+ <dict>
+ <key>UISceneConfigurationName</key>
+ <string>Default Configuration</string>
+ <key>UISceneDelegateClassName</key>
+ <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
+ <key>UISceneStoryboardFile</key>
+ <string>Main</string>
+ </dict>
+ </array>
+ </dict>
+ </dict>
+</dict>
+</plist>
--- /dev/null
+//
+// SceneDelegate.swift
+// Example
+//
+// Created by incar on 2024/12/30.
+//
+
+import UIKit
+
+class SceneDelegate: UIResponder, UIWindowSceneDelegate {
+
+ var window: UIWindow?
+
+
+ func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
+ // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
+ // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
+ // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
+ guard let _ = (scene as? UIWindowScene) else { return }
+ }
+
+ func sceneDidDisconnect(_ scene: UIScene) {
+ // Called as the scene is being released by the system.
+ // This occurs shortly after the scene enters the background, or when its session is discarded.
+ // Release any resources associated with this scene that can be re-created the next time the scene connects.
+ // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).
+ }
+
+ func sceneDidBecomeActive(_ scene: UIScene) {
+ // Called when the scene has moved from an inactive state to an active state.
+ // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
+ }
+
+ func sceneWillResignActive(_ scene: UIScene) {
+ // Called when the scene will move from an active state to an inactive state.
+ // This may occur due to temporary interruptions (ex. an incoming phone call).
+ }
+
+ func sceneWillEnterForeground(_ scene: UIScene) {
+ // Called as the scene transitions from the background to the foreground.
+ // Use this method to undo the changes made on entering the background.
+ }
+
+ func sceneDidEnterBackground(_ scene: UIScene) {
+ // Called as the scene transitions from the foreground to the background.
+ // Use this method to save data, release shared resources, and store enough scene-specific state information
+ // to restore the scene back to its current state.
+ }
+
+
+}
+
--- /dev/null
+//
+// ViewController.swift
+// Example
+//
+// Created by incar on 2024/12/30.
+//
+
+import UIKit
+import HsFileAgentSdk
+
+class ViewController: UIViewController {
+
+ override func viewDidLoad() {
+ super.viewDidLoad()
+ // Do any additional setup after loading the view.
+
+ view.backgroundColor = .red
+ }
+
+ override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
+ Test.add()
+ }
+}
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+ version = "1.0">
+ <FileRef
+ location = "group:Example/Example.xcodeproj">
+ </FileRef>
+ <FileRef
+ location = "group:Pods/Pods.xcodeproj">
+ </FileRef>
+</Workspace>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>IDEDidComputeMac32BitWarning</key>
+ <true/>
+</dict>
+</plist>
--- /dev/null
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 56;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 18C6B3F32D228F630094EC31 /* HsFileAgentSdk.h in Headers */ = {isa = PBXBuildFile; fileRef = 18C6B3F22D228F630094EC31 /* HsFileAgentSdk.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 18C6B3FA2D228F870094EC31 /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18C6B3F92D228F870094EC31 /* Test.swift */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 18C6B3EF2D228F630094EC31 /* HsFileAgentSdk.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = HsFileAgentSdk.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 18C6B3F22D228F630094EC31 /* HsFileAgentSdk.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HsFileAgentSdk.h; sourceTree = "<group>"; };
+ 18C6B3F92D228F870094EC31 /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 18C6B3EC2D228F630094EC31 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 18C6B3E52D228F630094EC31 = {
+ isa = PBXGroup;
+ children = (
+ 18C6B3F12D228F630094EC31 /* HsFileAgentSdk */,
+ 18C6B3F02D228F630094EC31 /* Products */,
+ );
+ sourceTree = "<group>";
+ };
+ 18C6B3F02D228F630094EC31 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 18C6B3EF2D228F630094EC31 /* HsFileAgentSdk.framework */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 18C6B3F12D228F630094EC31 /* HsFileAgentSdk */ = {
+ isa = PBXGroup;
+ children = (
+ 18C6B3F22D228F630094EC31 /* HsFileAgentSdk.h */,
+ 18C6B3F92D228F870094EC31 /* Test.swift */,
+ );
+ path = HsFileAgentSdk;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ 18C6B3EA2D228F630094EC31 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 18C6B3F32D228F630094EC31 /* HsFileAgentSdk.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ 18C6B3EE2D228F630094EC31 /* HsFileAgentSdk */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 18C6B3F62D228F630094EC31 /* Build configuration list for PBXNativeTarget "HsFileAgentSdk" */;
+ buildPhases = (
+ 18C6B3EA2D228F630094EC31 /* Headers */,
+ 18C6B3EB2D228F630094EC31 /* Sources */,
+ 18C6B3EC2D228F630094EC31 /* Frameworks */,
+ 18C6B3ED2D228F630094EC31 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = HsFileAgentSdk;
+ productName = HsFileAgentSdk;
+ productReference = 18C6B3EF2D228F630094EC31 /* HsFileAgentSdk.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 18C6B3E62D228F630094EC31 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = 1;
+ LastUpgradeCheck = 1520;
+ TargetAttributes = {
+ 18C6B3EE2D228F630094EC31 = {
+ CreatedOnToolsVersion = 15.2;
+ LastSwiftMigration = 1520;
+ };
+ };
+ };
+ buildConfigurationList = 18C6B3E92D228F630094EC31 /* Build configuration list for PBXProject "HsFileAgentSdk" */;
+ compatibilityVersion = "Xcode 14.0";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 18C6B3E52D228F630094EC31;
+ productRefGroup = 18C6B3E52D228F630094EC31;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 18C6B3EE2D228F630094EC31 /* HsFileAgentSdk */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 18C6B3ED2D228F630094EC31 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 18C6B3EB2D228F630094EC31 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 18C6B3FA2D228F870094EC31 /* Test.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 18C6B3F42D228F630094EC31 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ CURRENT_PROJECT_VERSION = 1;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 17.2;
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 18C6B3F52D228F630094EC31 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ CURRENT_PROJECT_VERSION = 1;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 17.2;
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
+ SDKROOT = iphoneos;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ VALIDATE_PRODUCT = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 18C6B3F72D228F630094EC31 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DEVELOPMENT_TEAM = M33X987285;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ MARKETING_VERSION = 1.0;
+ MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
+ PRODUCT_BUNDLE_IDENTIFIER = sort.HsFileAgentSdk;
+ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
+ SKIP_INSTALL = YES;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 18C6B3F82D228F630094EC31 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DEVELOPMENT_TEAM = M33X987285;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ MARKETING_VERSION = 1.0;
+ MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
+ PRODUCT_BUNDLE_IDENTIFIER = sort.HsFileAgentSdk;
+ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
+ SKIP_INSTALL = YES;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 18C6B3E92D228F630094EC31 /* Build configuration list for PBXProject "HsFileAgentSdk" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 18C6B3F42D228F630094EC31 /* Debug */,
+ 18C6B3F52D228F630094EC31 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 18C6B3F62D228F630094EC31 /* Build configuration list for PBXNativeTarget "HsFileAgentSdk" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 18C6B3F72D228F630094EC31 /* Debug */,
+ 18C6B3F82D228F630094EC31 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 18C6B3E62D228F630094EC31 /* Project object */;
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+ version = "1.0">
+ <FileRef
+ location = "self:">
+ </FileRef>
+</Workspace>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>IDEDidComputeMac32BitWarning</key>
+ <true/>
+</dict>
+</plist>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+ LastUpgradeVersion = "1520"
+ version = "1.7">
+ <BuildAction
+ parallelizeBuildables = "YES"
+ buildImplicitDependencies = "YES">
+ <BuildActionEntries>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "YES"
+ buildForArchiving = "YES"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "18C6B3EE2D228F630094EC31"
+ BuildableName = "HsFileAgentSdk.framework"
+ BlueprintName = "HsFileAgentSdk"
+ ReferencedContainer = "container:HsFileAgentSdk.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ </BuildActionEntries>
+ </BuildAction>
+ <TestAction
+ buildConfiguration = "Debug"
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ shouldAutocreateTestPlan = "YES">
+ </TestAction>
+ <LaunchAction
+ buildConfiguration = "Release"
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ launchStyle = "0"
+ useCustomWorkingDirectory = "NO"
+ ignoresPersistentStateOnLaunch = "NO"
+ debugDocumentVersioning = "YES"
+ debugServiceExtension = "internal"
+ allowLocationSimulation = "YES">
+ </LaunchAction>
+ <ProfileAction
+ buildConfiguration = "Release"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ savedToolIdentifier = ""
+ useCustomWorkingDirectory = "NO"
+ debugDocumentVersioning = "YES">
+ <MacroExpansion>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "18C6B3EE2D228F630094EC31"
+ BuildableName = "HsFileAgentSdk.framework"
+ BlueprintName = "HsFileAgentSdk"
+ ReferencedContainer = "container:HsFileAgentSdk.xcodeproj">
+ </BuildableReference>
+ </MacroExpansion>
+ </ProfileAction>
+ <AnalyzeAction
+ buildConfiguration = "Debug">
+ </AnalyzeAction>
+ <ArchiveAction
+ buildConfiguration = "Release"
+ revealArchiveInOrganizer = "YES">
+ </ArchiveAction>
+</Scheme>
--- /dev/null
+//
+// HsFileAgentSdk.h
+// HsFileAgentSdk
+//
+// Created by incar on 2024/12/30.
+//
+
+#import <Foundation/Foundation.h>
+
+//! Project version number for HsFileAgentSdk.
+FOUNDATION_EXPORT double HsFileAgentSdkVersionNumber;
+
+//! Project version string for HsFileAgentSdk.
+FOUNDATION_EXPORT const unsigned char HsFileAgentSdkVersionString[];
+
+// In this header, you should import all the public headers of your framework using statements like #import <HsFileAgentSdk/PublicHeader.h>
+
+
--- /dev/null
+//
+// Test.swift
+// HsFileAgentSdk
+//
+// Created by incar on 2024/12/30.
+//
+
+import Foundation
+
+public class Test {
+ public static func add(){
+ print("11111111111111")
+ }
+}
--- /dev/null
+PODS:
+ - SnapKit (5.7.1)
+ - Toast-Swift (5.1.1)
+
+DEPENDENCIES:
+ - SnapKit (~> 5.7.0)
+ - Toast-Swift
+
+SPEC REPOS:
+ https://gitee.com/mirrors/CocoaPods-Specs.git:
+ - SnapKit
+ - Toast-Swift
+
+SPEC CHECKSUMS:
+ SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a
+ Toast-Swift: 7a03a532afe3a560d4044bc7c237e2864d295173
+
+PODFILE CHECKSUM: 3c1d89565ba8550fffe14bd9838f6d055118d357
+
+COCOAPODS: 1.16.2
--- /dev/null
+PODS:
+ - SnapKit (5.7.1)
+ - Toast-Swift (5.1.1)
+
+DEPENDENCIES:
+ - SnapKit (~> 5.7.0)
+ - Toast-Swift
+
+SPEC REPOS:
+ https://gitee.com/mirrors/CocoaPods-Specs.git:
+ - SnapKit
+ - Toast-Swift
+
+SPEC CHECKSUMS:
+ SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a
+ Toast-Swift: 7a03a532afe3a560d4044bc7c237e2864d295173
+
+PODFILE CHECKSUM: 3c1d89565ba8550fffe14bd9838f6d055118d357
+
+COCOAPODS: 1.16.2
--- /dev/null
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 56;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 064D909CD827405E8DCC309DB1B7775A /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 255B874D26371ED2BE6ACBDDA7546F33 /* ConstraintLayoutSupportDSL.swift */; };
+ 070601D9903BE1D11DD6DD1367C3F012 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D3A9FECC1FDAD9F26B079096EFC42AB3 /* Foundation.framework */; };
+ 09E1F569A93FAD4B9149E30B9301F44A /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0008FD3EB68C06705912697A5E2D9FA /* ConstraintPriority.swift */; };
+ 0C7E48CC6391092D8F5B4341E1EE7485 /* Toast-Swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 299A2CDA7C411A3A71A3701130DF2E80 /* Toast-Swift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 0CA7A132ABE7018DE9295456732F38BB /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17CA2E9EA4CA92986174AE1B310D64FC /* ConstraintAttributes.swift */; };
+ 0DE5DB9C6227B3416778D8417DD95EA9 /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68B84AC6A164D8BF678F37A97E4C8AB2 /* ConstraintView+Extensions.swift */; };
+ 1194E62AA3F6F506799B1A43B16942B5 /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = B67D1A3FBEE3E82BB567511B6E07DB91 /* ConstraintDirectionalInsets.swift */; };
+ 147EE3EC632F31F312899DC5602A1B95 /* Pods-Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7825A90E082A1582EB16256B0E722B3F /* Pods-Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 172B6B4E5550420B8131FBD62C975821 /* Toast.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4B00A1CF36D410F8C3C41A4E569E7D5 /* Toast.swift */; };
+ 205EB01AED14BB574DD54EAFE26E4786 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D3A9FECC1FDAD9F26B079096EFC42AB3 /* Foundation.framework */; };
+ 2B2EB369550CE92CEEFCBFD3D32B8A3F /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD2CA5814E643359B4597F01DB63120A /* ConstraintInsetTarget.swift */; };
+ 3577F172FA68CBAE47CFEE6FE25C5404 /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 314E9F32B69677C623496D7652C3D3B6 /* ConstraintOffsetTarget.swift */; };
+ 3D3B646B4988314275B40E97BEB16C7F /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402AABDF3AD059B1625EDD8127D6BC78 /* ConstraintLayoutGuideDSL.swift */; };
+ 43D1DD42DA0158574948295BAE03B996 /* Pods-Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D6D7C498FA339E02BD53ECB8916CEA8E /* Pods-Example-dummy.m */; };
+ 4F4DEB687C0E4834A5B291DEE0651D6A /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D4A60BEE4A7081DD9C29CCDC566B563 /* ConstraintMaker.swift */; };
+ 57C4F6EFB30DDD14E960AC2D6B34F904 /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CEBB3D59C89F023AA9C70C8129288D8 /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 5922A6A0AE7152CF436356B3556F1835 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = E317AFA5F9A70C0F16B929AE1F7F2B27 /* ConstraintItem.swift */; };
+ 59F34874DA4ABB2F5C4E09EA6865936B /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97971E28848746AFB867C42149D07CF1 /* ConstraintLayoutGuide.swift */; };
+ 6E39129FC8643A70C276801FEF4C280D /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60CAFC0670C3DEF7A47313A54F04CB28 /* Constraint.swift */; };
+ 7AF516B98D45391B909D507D0244104C /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D5BD2925A5DA124C2B2706A3A28661A /* ConstraintDescription.swift */; };
+ 7B0BC17748C9775A8299A96D501CE5A8 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44E31BFCE69A3A4BEC13CE3C15C09F41 /* QuartzCore.framework */; };
+ 7D42390CDB4FA147504B03DA2A174A0C /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0870D9465A487351DAEA1766DE821061 /* ConstraintViewDSL.swift */; };
+ 8237ECE64A0CBE709E4FD41623053EBD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D3A9FECC1FDAD9F26B079096EFC42AB3 /* Foundation.framework */; };
+ 868A9F524A7985BDA1EA124D9BF4CA63 /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B02346646C5757ADA90385193489F15 /* ConstraintDSL.swift */; };
+ 86CAB01D950C8BC35EDE0BDC01A2500B /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CA0EABD5D5F167CD00CC988AE6F7616 /* ConstraintView.swift */; };
+ 87E921A1D8B0C683DA2133709C867859 /* Toast-Swift-Toast-Swift in Resources */ = {isa = PBXBuildFile; fileRef = 13FD39576595D8A884BF5166065C5236 /* Toast-Swift-Toast-Swift */; };
+ 883EDEE1C699497CF2A77C3B8A32A790 /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C8B238EAED0D02EE2EDA3E0AFDFCDF8 /* ConstraintMultiplierTarget.swift */; };
+ 8BABA32F7B94A25D8E9208C0A8D90B2E /* ConstraintMakerRelatable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2BE70E9856E46C9A6E829001D73B1FE /* ConstraintMakerRelatable+Extensions.swift */; };
+ 9E0045B41BFE697DB4ADE151228024D2 /* SnapKit-SnapKit_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */; };
+ A2F910D7EF13ED7B1152D76857A2E18C /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = D1AEB427BFBC9247E8F34D67090E06AB /* PrivacyInfo.xcprivacy */; };
+ A9B5C45C3C4D517B581E536DE846A078 /* Toast-Swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4921504348067847838ADB38C54450E5 /* Toast-Swift-dummy.m */; };
+ AABEF13464BA7F4621BD94736C1D057C /* ConstraintMakerPrioritizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E10D66D9E166D542F5363CBA57983A23 /* ConstraintMakerPrioritizable.swift */; };
+ AE224EDB6D044C0FE86B086E950FC2F9 /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26BC1C4EC62CF40DD4867D5F6494B154 /* Debugging.swift */; };
+ AF760C78F1C7E11BF7CB9E9B29903530 /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1A4400B9A3A9DC3FE1EF72F7CA6B991 /* ConstraintInsets.swift */; };
+ B0875E3AB8718E7DFE5C53497C02A15E /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77AA5193123194D713DDD43F98E94171 /* ConstraintLayoutSupport.swift */; };
+ B903049E7C1BED7918DAB208754107C7 /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40915436AD5B8FBD7DB97FA1842D3B04 /* ConstraintMakerFinalizable.swift */; };
+ BA2FB695DEB0D179253EEB8DFCE3578B /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E3C7DF5CC6CCB0CE492C410CBDDB120D /* SnapKit-dummy.m */; };
+ BDA5C7CC91E86448237CF40954FAC5AF /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78FDE8E8C8DD6421BFDECCB9915AB484 /* ConstraintMakerRelatable.swift */; };
+ BDB72D171DF1656ACA5C304657363957 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = B75D2A7DE83D1FF989B4A5BBD215A555 /* PrivacyInfo.xcprivacy */; };
+ BF1AE4D97E813B95C43EA4A298B973D1 /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E2A33C4CDE4D307F3152424D7645BB7 /* LayoutConstraint.swift */; };
+ C07CB3E9A4D1BF00F841E4285629A2B2 /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5355BB87DDF559F098ECAAC807E62D /* ConstraintRelatableTarget.swift */; };
+ C14F10B663FE2898EACAB90C202B3F50 /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C593C652EAFA0BB2AA7068479C66DBC0 /* ConstraintMakerEditable.swift */; };
+ C6A4302ACE006C4E2CDD481287E2916B /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = F43DDDC52C3E782E3A7F881E5705B018 /* Typealiases.swift */; };
+ C6F45595676957ADBEC18EB3F23EAEC4 /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCA06467836D57452149E83EA6567317 /* LayoutConstraintItem.swift */; };
+ CE593943A9E7CF83822CF60304BCAD43 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93A024966F310709262772160E66E975 /* ConstraintConstantTarget.swift */; };
+ D4218DA55B2BA45937589200CC0DF1FB /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C64BA714D311BBDD6C6A279ED16F129F /* ConstraintMakerExtendable.swift */; };
+ DBA4803F4765E1650B8C6841157F5D73 /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54A43E9825AD9ECCA4590612E683F877 /* ConstraintPriorityTarget.swift */; };
+ E37671A03B4C17A1CF3766A6125833BB /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C40E9BFB9B7BA77F4BE18F9B31409BC /* ConstraintDirectionalInsetTarget.swift */; };
+ E3D779DEE753C0B0D33BA8E73A980265 /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E36B2D762E145CBBBA623CCE750D6BD /* ConstraintLayoutGuide+Extensions.swift */; };
+ ECC5C2ADC2682F9171FEA22AF10DCE53 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50C2AE23F9F73FB28B96BD72CD9FE09A /* ConstraintRelation.swift */; };
+ F6F33E8B268F3D41075374D95B8088DC /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FE5DBC1178BCEAB7B54D819EAB60478 /* UILayoutSupport+Extensions.swift */; };
+ F9EBA65892D78A31C068D727D84BCB88 /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = E794AE434FC5440BBCF498C6905558F5 /* ConstraintConfig.swift */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 43B33D109C0F7519A6CFDC88D0E9B337 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4;
+ remoteInfo = SnapKit;
+ };
+ 575E021AD07D60A6FA208549C1A38D3D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = C344E85893FCDEE5B70436E0A4A3472B;
+ remoteInfo = "Toast-Swift-Toast-Swift";
+ };
+ 6A0A2A1D6A7F0F0846A6B88C2455B201 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 8A8DB685241263AFDF5E6B20FE67B93A;
+ remoteInfo = "SnapKit-SnapKit_Privacy";
+ };
+ F8D8523C2AE1FDED3168B05E99A55937 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B990BD87169C76A3ED3FE8A9258D91A3;
+ remoteInfo = "Toast-Swift";
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 036B46C39508C4873CF7B23BF546EB17 /* Toast-Swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Toast-Swift-prefix.pch"; sourceTree = "<group>"; };
+ 0870D9465A487351DAEA1766DE821061 /* ConstraintViewDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintViewDSL.swift; path = Sources/ConstraintViewDSL.swift; sourceTree = "<group>"; };
+ 0C40E9BFB9B7BA77F4BE18F9B31409BC /* ConstraintDirectionalInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsetTarget.swift; path = Sources/ConstraintDirectionalInsetTarget.swift; sourceTree = "<group>"; };
+ 13FD39576595D8A884BF5166065C5236 /* Toast-Swift-Toast-Swift */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "Toast-Swift-Toast-Swift"; path = "Toast-Swift.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 17CA2E9EA4CA92986174AE1B310D64FC /* ConstraintAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintAttributes.swift; path = Sources/ConstraintAttributes.swift; sourceTree = "<group>"; };
+ 1D4A60BEE4A7081DD9C29CCDC566B563 /* ConstraintMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMaker.swift; path = Sources/ConstraintMaker.swift; sourceTree = "<group>"; };
+ 1F667CC0E19EAF34E5A4119E2121F585 /* Pods-Example */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-Example"; path = Pods_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 243410B9535472556EA4BB6DBC133A0D /* Pods-Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Example.release.xcconfig"; sourceTree = "<group>"; };
+ 255B874D26371ED2BE6ACBDDA7546F33 /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Sources/ConstraintLayoutSupportDSL.swift; sourceTree = "<group>"; };
+ 26BC1C4EC62CF40DD4867D5F6494B154 /* Debugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debugging.swift; path = Sources/Debugging.swift; sourceTree = "<group>"; };
+ 299A2CDA7C411A3A71A3701130DF2E80 /* Toast-Swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Toast-Swift-umbrella.h"; sourceTree = "<group>"; };
+ 314E9F32B69677C623496D7652C3D3B6 /* ConstraintOffsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintOffsetTarget.swift; path = Sources/ConstraintOffsetTarget.swift; sourceTree = "<group>"; };
+ 31C1D37707DFAA5E6A164BCC07834264 /* Pods-Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Example-Info.plist"; sourceTree = "<group>"; };
+ 35C305D3797C284E6F5BAA1D3E6F9BF8 /* Pods-Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Example.modulemap"; sourceTree = "<group>"; };
+ 3B34630537EBB8DF0AFC8C1E7953E7F2 /* ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; sourceTree = "<group>"; };
+ 3C8B238EAED0D02EE2EDA3E0AFDFCDF8 /* ConstraintMultiplierTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMultiplierTarget.swift; path = Sources/ConstraintMultiplierTarget.swift; sourceTree = "<group>"; };
+ 3D30871A308E087FD2D94B682D931425 /* Toast-Swift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Toast-Swift.debug.xcconfig"; sourceTree = "<group>"; };
+ 3E2A33C4CDE4D307F3152424D7645BB7 /* LayoutConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraint.swift; path = Sources/LayoutConstraint.swift; sourceTree = "<group>"; };
+ 402AABDF3AD059B1625EDD8127D6BC78 /* ConstraintLayoutGuideDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuideDSL.swift; path = Sources/ConstraintLayoutGuideDSL.swift; sourceTree = "<group>"; };
+ 40915436AD5B8FBD7DB97FA1842D3B04 /* ConstraintMakerFinalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerFinalizable.swift; path = Sources/ConstraintMakerFinalizable.swift; sourceTree = "<group>"; };
+ 441854E35F81731E63E53DC7E4EEAD9D /* Pods-Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Example-acknowledgements.markdown"; sourceTree = "<group>"; };
+ 44E31BFCE69A3A4BEC13CE3C15C09F41 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; };
+ 4921504348067847838ADB38C54450E5 /* Toast-Swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Toast-Swift-dummy.m"; sourceTree = "<group>"; };
+ 4FE5DBC1178BCEAB7B54D819EAB60478 /* UILayoutSupport+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILayoutSupport+Extensions.swift"; path = "Sources/UILayoutSupport+Extensions.swift"; sourceTree = "<group>"; };
+ 50C2AE23F9F73FB28B96BD72CD9FE09A /* ConstraintRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelation.swift; path = Sources/ConstraintRelation.swift; sourceTree = "<group>"; };
+ 54A43E9825AD9ECCA4590612E683F877 /* ConstraintPriorityTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriorityTarget.swift; path = Sources/ConstraintPriorityTarget.swift; sourceTree = "<group>"; };
+ 568532DA15F074D0C99A5955D268DC6B /* SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapKit-Info.plist"; sourceTree = "<group>"; };
+ 58F3FC3DCFE61C0E4192C6789031D13B /* Toast-Swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Toast-Swift.modulemap"; sourceTree = "<group>"; };
+ 60CAFC0670C3DEF7A47313A54F04CB28 /* Constraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constraint.swift; path = Sources/Constraint.swift; sourceTree = "<group>"; };
+ 68B84AC6A164D8BF678F37A97E4C8AB2 /* ConstraintView+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintView+Extensions.swift"; path = "Sources/ConstraintView+Extensions.swift"; sourceTree = "<group>"; };
+ 6B02346646C5757ADA90385193489F15 /* ConstraintDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDSL.swift; path = Sources/ConstraintDSL.swift; sourceTree = "<group>"; };
+ 6C5355BB87DDF559F098ECAAC807E62D /* ConstraintRelatableTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelatableTarget.swift; path = Sources/ConstraintRelatableTarget.swift; sourceTree = "<group>"; };
+ 6D0FA88F9162D811C0FB61D5E00D7257 /* SnapKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapKit.modulemap; sourceTree = "<group>"; };
+ 6E36B2D762E145CBBBA623CCE750D6BD /* ConstraintLayoutGuide+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintLayoutGuide+Extensions.swift"; path = "Sources/ConstraintLayoutGuide+Extensions.swift"; sourceTree = "<group>"; };
+ 6F13EFA7CA9AE8FEFA13F55B11ABE237 /* Toast-Swift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Toast-Swift.release.xcconfig"; sourceTree = "<group>"; };
+ 71440BD6012F91DF466F888C97FA1263 /* SnapKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.debug.xcconfig; sourceTree = "<group>"; };
+ 745EFCBF059DFB069925E8518EBAF103 /* SnapKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-prefix.pch"; sourceTree = "<group>"; };
+ 77AA5193123194D713DDD43F98E94171 /* ConstraintLayoutSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupport.swift; path = Sources/ConstraintLayoutSupport.swift; sourceTree = "<group>"; };
+ 7825A90E082A1582EB16256B0E722B3F /* Pods-Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Example-umbrella.h"; sourceTree = "<group>"; };
+ 78FDE8E8C8DD6421BFDECCB9915AB484 /* ConstraintMakerRelatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerRelatable.swift; path = Sources/ConstraintMakerRelatable.swift; sourceTree = "<group>"; };
+ 7D5BD2925A5DA124C2B2706A3A28661A /* ConstraintDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDescription.swift; path = Sources/ConstraintDescription.swift; sourceTree = "<group>"; };
+ 8CA0EABD5D5F167CD00CC988AE6F7616 /* ConstraintView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintView.swift; path = Sources/ConstraintView.swift; sourceTree = "<group>"; };
+ 8FB92F929A3389C4951786B3A6567523 /* SnapKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.release.xcconfig; sourceTree = "<group>"; };
+ 93A024966F310709262772160E66E975 /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Sources/ConstraintConstantTarget.swift; sourceTree = "<group>"; };
+ 979486118B3E90C08386079D57962701 /* SnapKit */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapKit; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 97971E28848746AFB867C42149D07CF1 /* ConstraintLayoutGuide.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuide.swift; path = Sources/ConstraintLayoutGuide.swift; sourceTree = "<group>"; };
+ 9CEBB3D59C89F023AA9C70C8129288D8 /* SnapKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-umbrella.h"; sourceTree = "<group>"; };
+ 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
+ A1A4400B9A3A9DC3FE1EF72F7CA6B991 /* ConstraintInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsets.swift; path = Sources/ConstraintInsets.swift; sourceTree = "<group>"; };
+ AC1EC30EE7AE51EAC79A8FC8B320C6C3 /* Toast-Swift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Toast-Swift-Info.plist"; sourceTree = "<group>"; };
+ AFECBC24E09D0D25F822C27BD944AFD4 /* Pods-Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Example-frameworks.sh"; sourceTree = "<group>"; };
+ B45138496B85A072654D1D0F8EBBEDE5 /* Pods-Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Example.debug.xcconfig"; sourceTree = "<group>"; };
+ B67D1A3FBEE3E82BB567511B6E07DB91 /* ConstraintDirectionalInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsets.swift; path = Sources/ConstraintDirectionalInsets.swift; sourceTree = "<group>"; };
+ B75D2A7DE83D1FF989B4A5BBD215A555 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
+ B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "SnapKit-SnapKit_Privacy"; path = SnapKit_Privacy.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ C593C652EAFA0BB2AA7068479C66DBC0 /* ConstraintMakerEditable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerEditable.swift; path = Sources/ConstraintMakerEditable.swift; sourceTree = "<group>"; };
+ C64BA714D311BBDD6C6A279ED16F129F /* ConstraintMakerExtendable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerExtendable.swift; path = Sources/ConstraintMakerExtendable.swift; sourceTree = "<group>"; };
+ CCA06467836D57452149E83EA6567317 /* LayoutConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraintItem.swift; path = Sources/LayoutConstraintItem.swift; sourceTree = "<group>"; };
+ D1AEB427BFBC9247E8F34D67090E06AB /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Toast/Resources/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
+ D3A9FECC1FDAD9F26B079096EFC42AB3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
+ D4B00A1CF36D410F8C3C41A4E569E7D5 /* Toast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Toast.swift; path = Toast/Toast.swift; sourceTree = "<group>"; };
+ D6043471C96F93DC41F7DD1E0D7D8B35 /* Toast-Swift */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Toast-Swift"; path = Toast_Swift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ D6D7C498FA339E02BD53ECB8916CEA8E /* Pods-Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Example-dummy.m"; sourceTree = "<group>"; };
+ DD2CA5814E643359B4597F01DB63120A /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Sources/ConstraintInsetTarget.swift; sourceTree = "<group>"; };
+ E0008FD3EB68C06705912697A5E2D9FA /* ConstraintPriority.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriority.swift; path = Sources/ConstraintPriority.swift; sourceTree = "<group>"; };
+ E10D66D9E166D542F5363CBA57983A23 /* ConstraintMakerPrioritizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerPrioritizable.swift; path = Sources/ConstraintMakerPrioritizable.swift; sourceTree = "<group>"; };
+ E2BE70E9856E46C9A6E829001D73B1FE /* ConstraintMakerRelatable+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintMakerRelatable+Extensions.swift"; path = "Sources/ConstraintMakerRelatable+Extensions.swift"; sourceTree = "<group>"; };
+ E317AFA5F9A70C0F16B929AE1F7F2B27 /* ConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintItem.swift; path = Sources/ConstraintItem.swift; sourceTree = "<group>"; };
+ E3C7DF5CC6CCB0CE492C410CBDDB120D /* SnapKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapKit-dummy.m"; sourceTree = "<group>"; };
+ E794AE434FC5440BBCF498C6905558F5 /* ConstraintConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConfig.swift; path = Sources/ConstraintConfig.swift; sourceTree = "<group>"; };
+ EA21B344259B58996DB73382B1B1521F /* Pods-Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Example-acknowledgements.plist"; sourceTree = "<group>"; };
+ F43DDDC52C3E782E3A7F881E5705B018 /* Typealiases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Typealiases.swift; path = Sources/Typealiases.swift; sourceTree = "<group>"; };
+ FD2AA917A244E5E2D7F4A366F6ACAC86 /* ResourceBundle-Toast-Swift-Toast-Swift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Toast-Swift-Toast-Swift-Info.plist"; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 33428AC36668E3ED52DB70316F843FB8 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 205EB01AED14BB574DD54EAFE26E4786 /* Foundation.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 71FF632B64BDB7D626771955D502CBF1 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8237ECE64A0CBE709E4FD41623053EBD /* Foundation.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ C0A16685EF34D1A7750CD9CFFEA96E10 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ CC8DC3FF9B19DA38B5A07D38377A645F /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F151972567B4508E965D5BFCCF7174A1 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 070601D9903BE1D11DD6DD1367C3F012 /* Foundation.framework in Frameworks */,
+ 7B0BC17748C9775A8299A96D501CE5A8 /* QuartzCore.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 0492DA187742803282DC7B827669E234 /* SnapKit */ = {
+ isa = PBXGroup;
+ children = (
+ 60CAFC0670C3DEF7A47313A54F04CB28 /* Constraint.swift */,
+ 17CA2E9EA4CA92986174AE1B310D64FC /* ConstraintAttributes.swift */,
+ E794AE434FC5440BBCF498C6905558F5 /* ConstraintConfig.swift */,
+ 93A024966F310709262772160E66E975 /* ConstraintConstantTarget.swift */,
+ 7D5BD2925A5DA124C2B2706A3A28661A /* ConstraintDescription.swift */,
+ B67D1A3FBEE3E82BB567511B6E07DB91 /* ConstraintDirectionalInsets.swift */,
+ 0C40E9BFB9B7BA77F4BE18F9B31409BC /* ConstraintDirectionalInsetTarget.swift */,
+ 6B02346646C5757ADA90385193489F15 /* ConstraintDSL.swift */,
+ A1A4400B9A3A9DC3FE1EF72F7CA6B991 /* ConstraintInsets.swift */,
+ DD2CA5814E643359B4597F01DB63120A /* ConstraintInsetTarget.swift */,
+ E317AFA5F9A70C0F16B929AE1F7F2B27 /* ConstraintItem.swift */,
+ 97971E28848746AFB867C42149D07CF1 /* ConstraintLayoutGuide.swift */,
+ 6E36B2D762E145CBBBA623CCE750D6BD /* ConstraintLayoutGuide+Extensions.swift */,
+ 402AABDF3AD059B1625EDD8127D6BC78 /* ConstraintLayoutGuideDSL.swift */,
+ 77AA5193123194D713DDD43F98E94171 /* ConstraintLayoutSupport.swift */,
+ 255B874D26371ED2BE6ACBDDA7546F33 /* ConstraintLayoutSupportDSL.swift */,
+ 1D4A60BEE4A7081DD9C29CCDC566B563 /* ConstraintMaker.swift */,
+ C593C652EAFA0BB2AA7068479C66DBC0 /* ConstraintMakerEditable.swift */,
+ C64BA714D311BBDD6C6A279ED16F129F /* ConstraintMakerExtendable.swift */,
+ 40915436AD5B8FBD7DB97FA1842D3B04 /* ConstraintMakerFinalizable.swift */,
+ E10D66D9E166D542F5363CBA57983A23 /* ConstraintMakerPrioritizable.swift */,
+ 78FDE8E8C8DD6421BFDECCB9915AB484 /* ConstraintMakerRelatable.swift */,
+ E2BE70E9856E46C9A6E829001D73B1FE /* ConstraintMakerRelatable+Extensions.swift */,
+ 3C8B238EAED0D02EE2EDA3E0AFDFCDF8 /* ConstraintMultiplierTarget.swift */,
+ 314E9F32B69677C623496D7652C3D3B6 /* ConstraintOffsetTarget.swift */,
+ E0008FD3EB68C06705912697A5E2D9FA /* ConstraintPriority.swift */,
+ 54A43E9825AD9ECCA4590612E683F877 /* ConstraintPriorityTarget.swift */,
+ 6C5355BB87DDF559F098ECAAC807E62D /* ConstraintRelatableTarget.swift */,
+ 50C2AE23F9F73FB28B96BD72CD9FE09A /* ConstraintRelation.swift */,
+ 8CA0EABD5D5F167CD00CC988AE6F7616 /* ConstraintView.swift */,
+ 68B84AC6A164D8BF678F37A97E4C8AB2 /* ConstraintView+Extensions.swift */,
+ 0870D9465A487351DAEA1766DE821061 /* ConstraintViewDSL.swift */,
+ 26BC1C4EC62CF40DD4867D5F6494B154 /* Debugging.swift */,
+ 3E2A33C4CDE4D307F3152424D7645BB7 /* LayoutConstraint.swift */,
+ CCA06467836D57452149E83EA6567317 /* LayoutConstraintItem.swift */,
+ F43DDDC52C3E782E3A7F881E5705B018 /* Typealiases.swift */,
+ 4FE5DBC1178BCEAB7B54D819EAB60478 /* UILayoutSupport+Extensions.swift */,
+ F75191FC551C205DED30B321842B247E /* Resources */,
+ AB35C78249460D2BA366CE3BA67CEEDA /* Support Files */,
+ );
+ name = SnapKit;
+ path = SnapKit;
+ sourceTree = "<group>";
+ };
+ 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 7E621C5F3D3D50DF1BF57F5CC0295126 /* iOS */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+ 62E2B811AE631FE87CB02890D01418DC /* Support Files */ = {
+ isa = PBXGroup;
+ children = (
+ FD2AA917A244E5E2D7F4A366F6ACAC86 /* ResourceBundle-Toast-Swift-Toast-Swift-Info.plist */,
+ 58F3FC3DCFE61C0E4192C6789031D13B /* Toast-Swift.modulemap */,
+ 4921504348067847838ADB38C54450E5 /* Toast-Swift-dummy.m */,
+ AC1EC30EE7AE51EAC79A8FC8B320C6C3 /* Toast-Swift-Info.plist */,
+ 036B46C39508C4873CF7B23BF546EB17 /* Toast-Swift-prefix.pch */,
+ 299A2CDA7C411A3A71A3701130DF2E80 /* Toast-Swift-umbrella.h */,
+ 3D30871A308E087FD2D94B682D931425 /* Toast-Swift.debug.xcconfig */,
+ 6F13EFA7CA9AE8FEFA13F55B11ABE237 /* Toast-Swift.release.xcconfig */,
+ );
+ name = "Support Files";
+ path = "../Target Support Files/Toast-Swift";
+ sourceTree = "<group>";
+ };
+ 665548B300497F1D018D73EA842BEC32 /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 0492DA187742803282DC7B827669E234 /* SnapKit */,
+ E860DF05D28E3EBAE464FACC48DC03EB /* Toast-Swift */,
+ );
+ name = Pods;
+ sourceTree = "<group>";
+ };
+ 7E621C5F3D3D50DF1BF57F5CC0295126 /* iOS */ = {
+ isa = PBXGroup;
+ children = (
+ D3A9FECC1FDAD9F26B079096EFC42AB3 /* Foundation.framework */,
+ 44E31BFCE69A3A4BEC13CE3C15C09F41 /* QuartzCore.framework */,
+ );
+ name = iOS;
+ sourceTree = "<group>";
+ };
+ 9BDBD95ED116334D1B2835202D8D3060 /* Pods-Example */ = {
+ isa = PBXGroup;
+ children = (
+ 35C305D3797C284E6F5BAA1D3E6F9BF8 /* Pods-Example.modulemap */,
+ 441854E35F81731E63E53DC7E4EEAD9D /* Pods-Example-acknowledgements.markdown */,
+ EA21B344259B58996DB73382B1B1521F /* Pods-Example-acknowledgements.plist */,
+ D6D7C498FA339E02BD53ECB8916CEA8E /* Pods-Example-dummy.m */,
+ AFECBC24E09D0D25F822C27BD944AFD4 /* Pods-Example-frameworks.sh */,
+ 31C1D37707DFAA5E6A164BCC07834264 /* Pods-Example-Info.plist */,
+ 7825A90E082A1582EB16256B0E722B3F /* Pods-Example-umbrella.h */,
+ B45138496B85A072654D1D0F8EBBEDE5 /* Pods-Example.debug.xcconfig */,
+ 243410B9535472556EA4BB6DBC133A0D /* Pods-Example.release.xcconfig */,
+ );
+ name = "Pods-Example";
+ path = "Target Support Files/Pods-Example";
+ sourceTree = "<group>";
+ };
+ AB35C78249460D2BA366CE3BA67CEEDA /* Support Files */ = {
+ isa = PBXGroup;
+ children = (
+ 3B34630537EBB8DF0AFC8C1E7953E7F2 /* ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist */,
+ 6D0FA88F9162D811C0FB61D5E00D7257 /* SnapKit.modulemap */,
+ E3C7DF5CC6CCB0CE492C410CBDDB120D /* SnapKit-dummy.m */,
+ 568532DA15F074D0C99A5955D268DC6B /* SnapKit-Info.plist */,
+ 745EFCBF059DFB069925E8518EBAF103 /* SnapKit-prefix.pch */,
+ 9CEBB3D59C89F023AA9C70C8129288D8 /* SnapKit-umbrella.h */,
+ 71440BD6012F91DF466F888C97FA1263 /* SnapKit.debug.xcconfig */,
+ 8FB92F929A3389C4951786B3A6567523 /* SnapKit.release.xcconfig */,
+ );
+ name = "Support Files";
+ path = "../Target Support Files/SnapKit";
+ sourceTree = "<group>";
+ };
+ CE2E825F08D3AD0FD76E6D78D7512ED0 /* Targets Support Files */ = {
+ isa = PBXGroup;
+ children = (
+ 9BDBD95ED116334D1B2835202D8D3060 /* Pods-Example */,
+ );
+ name = "Targets Support Files";
+ sourceTree = "<group>";
+ };
+ CF1408CF629C7361332E53B88F7BD30C = {
+ isa = PBXGroup;
+ children = (
+ 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */,
+ 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */,
+ 665548B300497F1D018D73EA842BEC32 /* Pods */,
+ DC02FADF5C2575787E6DA2DDCCA4E07E /* Products */,
+ CE2E825F08D3AD0FD76E6D78D7512ED0 /* Targets Support Files */,
+ );
+ sourceTree = "<group>";
+ };
+ DC02FADF5C2575787E6DA2DDCCA4E07E /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 1F667CC0E19EAF34E5A4119E2121F585 /* Pods-Example */,
+ 979486118B3E90C08386079D57962701 /* SnapKit */,
+ B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */,
+ D6043471C96F93DC41F7DD1E0D7D8B35 /* Toast-Swift */,
+ 13FD39576595D8A884BF5166065C5236 /* Toast-Swift-Toast-Swift */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ E5ABF2DF4D4A9B7536793B0AC23F02CB /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ D1AEB427BFBC9247E8F34D67090E06AB /* PrivacyInfo.xcprivacy */,
+ );
+ name = Resources;
+ sourceTree = "<group>";
+ };
+ E860DF05D28E3EBAE464FACC48DC03EB /* Toast-Swift */ = {
+ isa = PBXGroup;
+ children = (
+ D4B00A1CF36D410F8C3C41A4E569E7D5 /* Toast.swift */,
+ E5ABF2DF4D4A9B7536793B0AC23F02CB /* Resources */,
+ 62E2B811AE631FE87CB02890D01418DC /* Support Files */,
+ );
+ name = "Toast-Swift";
+ path = "Toast-Swift";
+ sourceTree = "<group>";
+ };
+ F75191FC551C205DED30B321842B247E /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ B75D2A7DE83D1FF989B4A5BBD215A555 /* PrivacyInfo.xcprivacy */,
+ );
+ name = Resources;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ 05ED2C3AEB13C3FABC0739CD4C5EEA3C /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 147EE3EC632F31F312899DC5602A1B95 /* Pods-Example-umbrella.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 448E74EF9D17B3DCC5432BB6215BCAB0 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 0C7E48CC6391092D8F5B4341E1EE7485 /* Toast-Swift-umbrella.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 5B1500FE995B9224E0AF0B42CE93C03B /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 57C4F6EFB30DDD14E960AC2D6B34F904 /* SnapKit-umbrella.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ 0AEE99A309977BD12A049FF48AF9BA4B /* Pods-Example */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 4AB85B230CA513CF80A8088764DB4510 /* Build configuration list for PBXNativeTarget "Pods-Example" */;
+ buildPhases = (
+ 05ED2C3AEB13C3FABC0739CD4C5EEA3C /* Headers */,
+ D914A3D287733B748248D00BC0174574 /* Sources */,
+ 71FF632B64BDB7D626771955D502CBF1 /* Frameworks */,
+ 17489F65B27F00BE01E5EC522E98760E /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ A2B11B6B4E3A9910607A655B57E07909 /* PBXTargetDependency */,
+ 60A790EB0C7C6E82AA499A96BF19FCB1 /* PBXTargetDependency */,
+ );
+ name = "Pods-Example";
+ productName = Pods_Example;
+ productReference = 1F667CC0E19EAF34E5A4119E2121F585 /* Pods-Example */;
+ productType = "com.apple.product-type.framework";
+ };
+ 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 80CE967CAA1D35721519F892BAF7A19B /* Build configuration list for PBXNativeTarget "SnapKit" */;
+ buildPhases = (
+ 5B1500FE995B9224E0AF0B42CE93C03B /* Headers */,
+ F7AC6792C89443C7B212A06E810BAB97 /* Sources */,
+ 33428AC36668E3ED52DB70316F843FB8 /* Frameworks */,
+ 1DEDF411E550D85A1218E1655456A9CD /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 114F916F63CFB4C29948E97B142406D9 /* PBXTargetDependency */,
+ );
+ name = SnapKit;
+ productName = SnapKit;
+ productReference = 979486118B3E90C08386079D57962701 /* SnapKit */;
+ productType = "com.apple.product-type.framework";
+ };
+ 8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 66F431564E9CBAE13B7AE817EE8C82F8 /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */;
+ buildPhases = (
+ 3FA185BDF882AB0960F1A6F5BBD5E53A /* Sources */,
+ CC8DC3FF9B19DA38B5A07D38377A645F /* Frameworks */,
+ 3BB9665D9D9F6233326F70CC9117C602 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "SnapKit-SnapKit_Privacy";
+ productName = SnapKit_Privacy;
+ productReference = B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */;
+ productType = "com.apple.product-type.bundle";
+ };
+ B990BD87169C76A3ED3FE8A9258D91A3 /* Toast-Swift */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 9C146D0EDFB76FE1156D655A897B6E94 /* Build configuration list for PBXNativeTarget "Toast-Swift" */;
+ buildPhases = (
+ 448E74EF9D17B3DCC5432BB6215BCAB0 /* Headers */,
+ B4A020AF82EF829322C86201C5C31A20 /* Sources */,
+ F151972567B4508E965D5BFCCF7174A1 /* Frameworks */,
+ A694D13AD95802E0936531BC8DAEBB89 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ F25E531F2EE0FFA40ABA26AA0316E9AE /* PBXTargetDependency */,
+ );
+ name = "Toast-Swift";
+ productName = Toast_Swift;
+ productReference = D6043471C96F93DC41F7DD1E0D7D8B35 /* Toast-Swift */;
+ productType = "com.apple.product-type.framework";
+ };
+ C344E85893FCDEE5B70436E0A4A3472B /* Toast-Swift-Toast-Swift */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = A9996BEBF8EBDC1B9E57E07787F81CD6 /* Build configuration list for PBXNativeTarget "Toast-Swift-Toast-Swift" */;
+ buildPhases = (
+ 647DC35A13F976EA30AC9AFFE9869E07 /* Sources */,
+ C0A16685EF34D1A7750CD9CFFEA96E10 /* Frameworks */,
+ 06E6E0D5393FC378A09E27D62BFB01B5 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "Toast-Swift-Toast-Swift";
+ productName = "Toast-Swift";
+ productReference = 13FD39576595D8A884BF5166065C5236 /* Toast-Swift-Toast-Swift */;
+ productType = "com.apple.product-type.bundle";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ BFDFE7DC352907FC980B868725387E98 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastSwiftUpdateCheck = 1600;
+ LastUpgradeCheck = 1600;
+ };
+ buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */;
+ compatibilityVersion = "Xcode 14.0";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ Base,
+ en,
+ );
+ mainGroup = CF1408CF629C7361332E53B88F7BD30C;
+ minimizedProjectReferenceProxies = 0;
+ preferredProjectObjectVersion = 77;
+ productRefGroup = DC02FADF5C2575787E6DA2DDCCA4E07E /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 0AEE99A309977BD12A049FF48AF9BA4B /* Pods-Example */,
+ 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */,
+ 8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */,
+ B990BD87169C76A3ED3FE8A9258D91A3 /* Toast-Swift */,
+ C344E85893FCDEE5B70436E0A4A3472B /* Toast-Swift-Toast-Swift */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 06E6E0D5393FC378A09E27D62BFB01B5 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A2F910D7EF13ED7B1152D76857A2E18C /* PrivacyInfo.xcprivacy in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 17489F65B27F00BE01E5EC522E98760E /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 1DEDF411E550D85A1218E1655456A9CD /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 9E0045B41BFE697DB4ADE151228024D2 /* SnapKit-SnapKit_Privacy in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3BB9665D9D9F6233326F70CC9117C602 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BDB72D171DF1656ACA5C304657363957 /* PrivacyInfo.xcprivacy in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A694D13AD95802E0936531BC8DAEBB89 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 87E921A1D8B0C683DA2133709C867859 /* Toast-Swift-Toast-Swift in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 3FA185BDF882AB0960F1A6F5BBD5E53A /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 647DC35A13F976EA30AC9AFFE9869E07 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B4A020AF82EF829322C86201C5C31A20 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 172B6B4E5550420B8131FBD62C975821 /* Toast.swift in Sources */,
+ A9B5C45C3C4D517B581E536DE846A078 /* Toast-Swift-dummy.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ D914A3D287733B748248D00BC0174574 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 43D1DD42DA0158574948295BAE03B996 /* Pods-Example-dummy.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F7AC6792C89443C7B212A06E810BAB97 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 6E39129FC8643A70C276801FEF4C280D /* Constraint.swift in Sources */,
+ 0CA7A132ABE7018DE9295456732F38BB /* ConstraintAttributes.swift in Sources */,
+ F9EBA65892D78A31C068D727D84BCB88 /* ConstraintConfig.swift in Sources */,
+ CE593943A9E7CF83822CF60304BCAD43 /* ConstraintConstantTarget.swift in Sources */,
+ 7AF516B98D45391B909D507D0244104C /* ConstraintDescription.swift in Sources */,
+ 1194E62AA3F6F506799B1A43B16942B5 /* ConstraintDirectionalInsets.swift in Sources */,
+ E37671A03B4C17A1CF3766A6125833BB /* ConstraintDirectionalInsetTarget.swift in Sources */,
+ 868A9F524A7985BDA1EA124D9BF4CA63 /* ConstraintDSL.swift in Sources */,
+ AF760C78F1C7E11BF7CB9E9B29903530 /* ConstraintInsets.swift in Sources */,
+ 2B2EB369550CE92CEEFCBFD3D32B8A3F /* ConstraintInsetTarget.swift in Sources */,
+ 5922A6A0AE7152CF436356B3556F1835 /* ConstraintItem.swift in Sources */,
+ 59F34874DA4ABB2F5C4E09EA6865936B /* ConstraintLayoutGuide.swift in Sources */,
+ E3D779DEE753C0B0D33BA8E73A980265 /* ConstraintLayoutGuide+Extensions.swift in Sources */,
+ 3D3B646B4988314275B40E97BEB16C7F /* ConstraintLayoutGuideDSL.swift in Sources */,
+ B0875E3AB8718E7DFE5C53497C02A15E /* ConstraintLayoutSupport.swift in Sources */,
+ 064D909CD827405E8DCC309DB1B7775A /* ConstraintLayoutSupportDSL.swift in Sources */,
+ 4F4DEB687C0E4834A5B291DEE0651D6A /* ConstraintMaker.swift in Sources */,
+ C14F10B663FE2898EACAB90C202B3F50 /* ConstraintMakerEditable.swift in Sources */,
+ D4218DA55B2BA45937589200CC0DF1FB /* ConstraintMakerExtendable.swift in Sources */,
+ B903049E7C1BED7918DAB208754107C7 /* ConstraintMakerFinalizable.swift in Sources */,
+ AABEF13464BA7F4621BD94736C1D057C /* ConstraintMakerPrioritizable.swift in Sources */,
+ BDA5C7CC91E86448237CF40954FAC5AF /* ConstraintMakerRelatable.swift in Sources */,
+ 8BABA32F7B94A25D8E9208C0A8D90B2E /* ConstraintMakerRelatable+Extensions.swift in Sources */,
+ 883EDEE1C699497CF2A77C3B8A32A790 /* ConstraintMultiplierTarget.swift in Sources */,
+ 3577F172FA68CBAE47CFEE6FE25C5404 /* ConstraintOffsetTarget.swift in Sources */,
+ 09E1F569A93FAD4B9149E30B9301F44A /* ConstraintPriority.swift in Sources */,
+ DBA4803F4765E1650B8C6841157F5D73 /* ConstraintPriorityTarget.swift in Sources */,
+ C07CB3E9A4D1BF00F841E4285629A2B2 /* ConstraintRelatableTarget.swift in Sources */,
+ ECC5C2ADC2682F9171FEA22AF10DCE53 /* ConstraintRelation.swift in Sources */,
+ 86CAB01D950C8BC35EDE0BDC01A2500B /* ConstraintView.swift in Sources */,
+ 0DE5DB9C6227B3416778D8417DD95EA9 /* ConstraintView+Extensions.swift in Sources */,
+ 7D42390CDB4FA147504B03DA2A174A0C /* ConstraintViewDSL.swift in Sources */,
+ AE224EDB6D044C0FE86B086E950FC2F9 /* Debugging.swift in Sources */,
+ BF1AE4D97E813B95C43EA4A298B973D1 /* LayoutConstraint.swift in Sources */,
+ C6F45595676957ADBEC18EB3F23EAEC4 /* LayoutConstraintItem.swift in Sources */,
+ BA2FB695DEB0D179253EEB8DFCE3578B /* SnapKit-dummy.m in Sources */,
+ C6A4302ACE006C4E2CDD481287E2916B /* Typealiases.swift in Sources */,
+ F6F33E8B268F3D41075374D95B8088DC /* UILayoutSupport+Extensions.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 114F916F63CFB4C29948E97B142406D9 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = "SnapKit-SnapKit_Privacy";
+ target = 8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */;
+ targetProxy = 6A0A2A1D6A7F0F0846A6B88C2455B201 /* PBXContainerItemProxy */;
+ };
+ 60A790EB0C7C6E82AA499A96BF19FCB1 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = "Toast-Swift";
+ target = B990BD87169C76A3ED3FE8A9258D91A3 /* Toast-Swift */;
+ targetProxy = F8D8523C2AE1FDED3168B05E99A55937 /* PBXContainerItemProxy */;
+ };
+ A2B11B6B4E3A9910607A655B57E07909 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = SnapKit;
+ target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */;
+ targetProxy = 43B33D109C0F7519A6CFDC88D0E9B337 /* PBXContainerItemProxy */;
+ };
+ F25E531F2EE0FFA40ABA26AA0316E9AE /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = "Toast-Swift-Toast-Swift";
+ target = C344E85893FCDEE5B70436E0A4A3472B /* Toast-Swift-Toast-Swift */;
+ targetProxy = 575E021AD07D60A6FA208549C1A38D3D /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 2E38D8195E8CB8DAA1E3DEBA5C5F406C /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = B45138496B85A072654D1D0F8EBBEDE5 /* Pods-Example.debug.xcconfig */;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
+ CLANG_ENABLE_OBJC_WEAK = NO;
+ "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+ "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = NO;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
+ INFOPLIST_FILE = "Target Support Files/Pods-Example/Pods-Example-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ MODULEMAP_FILE = "Target Support Files/Pods-Example/Pods-Example.modulemap";
+ OTHER_LDFLAGS = "";
+ OTHER_LIBTOOLFLAGS = "";
+ PODS_ROOT = "$(SRCROOT)";
+ PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
+ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 41669B547BC8CCCEECA78F2936C01429 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 8FB92F929A3389C4951786B3A6567523 /* SnapKit.release.xcconfig */;
+ buildSettings = {
+ CODE_SIGNING_ALLOWED = NO;
+ CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SnapKit";
+ IBSC_MODULE = SnapKit;
+ INFOPLIST_FILE = "Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ PRODUCT_NAME = SnapKit_Privacy;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ WRAPPER_EXTENSION = bundle;
+ };
+ name = Release;
+ };
+ 7E48D17D0469F73801BBDAF1F20755F2 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 6F13EFA7CA9AE8FEFA13F55B11ABE237 /* Toast-Swift.release.xcconfig */;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_WEAK = NO;
+ "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+ "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = NO;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
+ GCC_PREFIX_HEADER = "Target Support Files/Toast-Swift/Toast-Swift-prefix.pch";
+ GENERATE_INFOPLIST_FILE = NO;
+ INFOPLIST_FILE = "Target Support Files/Toast-Swift/Toast-Swift-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MODULEMAP_FILE = "Target Support Files/Toast-Swift/Toast-Swift.modulemap";
+ PRODUCT_MODULE_NAME = Toast_Swift;
+ PRODUCT_NAME = Toast_Swift;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
+ SWIFT_INSTALL_OBJC_HEADER = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 8DE5143C03248BB6CD542DE3963D6F3A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "POD_CONFIGURATION_DEBUG=1",
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ STRIP_INSTALLED_PRODUCT = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ SYMROOT = "${SRCROOT}/../build";
+ };
+ name = Debug;
+ };
+ 9D0D7572FEDA4CC9E75E7387846AFE57 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 71440BD6012F91DF466F888C97FA1263 /* SnapKit.debug.xcconfig */;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_WEAK = NO;
+ "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+ "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = NO;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
+ GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch";
+ GENERATE_INFOPLIST_FILE = NO;
+ INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap";
+ PRODUCT_MODULE_NAME = SnapKit;
+ PRODUCT_NAME = SnapKit;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
+ SWIFT_INSTALL_OBJC_HEADER = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 9E406C6AAF85E580207CD97B0044DEAB /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "POD_CONFIGURATION_RELEASE=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ STRIP_INSTALLED_PRODUCT = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
+ SWIFT_VERSION = 5.0;
+ SYMROOT = "${SRCROOT}/../build";
+ };
+ name = Release;
+ };
+ ADB5712A52D00712AF3E54225E7871BA /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 71440BD6012F91DF466F888C97FA1263 /* SnapKit.debug.xcconfig */;
+ buildSettings = {
+ CODE_SIGNING_ALLOWED = NO;
+ CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SnapKit";
+ IBSC_MODULE = SnapKit;
+ INFOPLIST_FILE = "Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ PRODUCT_NAME = SnapKit_Privacy;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ WRAPPER_EXTENSION = bundle;
+ };
+ name = Debug;
+ };
+ BAD20131EC29650C6737E66854A3A9FD /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 8FB92F929A3389C4951786B3A6567523 /* SnapKit.release.xcconfig */;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_WEAK = NO;
+ "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+ "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = NO;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
+ GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch";
+ GENERATE_INFOPLIST_FILE = NO;
+ INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap";
+ PRODUCT_MODULE_NAME = SnapKit;
+ PRODUCT_NAME = SnapKit;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
+ SWIFT_INSTALL_OBJC_HEADER = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ C4FB43AE2367DAAD0704251AABDE432D /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 243410B9535472556EA4BB6DBC133A0D /* Pods-Example.release.xcconfig */;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
+ CLANG_ENABLE_OBJC_WEAK = NO;
+ "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+ "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = NO;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
+ INFOPLIST_FILE = "Target Support Files/Pods-Example/Pods-Example-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ MODULEMAP_FILE = "Target Support Files/Pods-Example/Pods-Example.modulemap";
+ OTHER_LDFLAGS = "";
+ OTHER_LIBTOOLFLAGS = "";
+ PODS_ROOT = "$(SRCROOT)";
+ PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
+ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ CCCFDF6B48013EFB53F26D660294CD6E /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 6F13EFA7CA9AE8FEFA13F55B11ABE237 /* Toast-Swift.release.xcconfig */;
+ buildSettings = {
+ CODE_SIGNING_ALLOWED = NO;
+ CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Toast-Swift";
+ IBSC_MODULE = Toast_Swift;
+ INFOPLIST_FILE = "Target Support Files/Toast-Swift/ResourceBundle-Toast-Swift-Toast-Swift-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ PRODUCT_NAME = "Toast-Swift";
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ WRAPPER_EXTENSION = bundle;
+ };
+ name = Release;
+ };
+ DD7117494DA57CB220D93C012567BF9C /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 3D30871A308E087FD2D94B682D931425 /* Toast-Swift.debug.xcconfig */;
+ buildSettings = {
+ CODE_SIGNING_ALLOWED = NO;
+ CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Toast-Swift";
+ IBSC_MODULE = Toast_Swift;
+ INFOPLIST_FILE = "Target Support Files/Toast-Swift/ResourceBundle-Toast-Swift-Toast-Swift-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ PRODUCT_NAME = "Toast-Swift";
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ WRAPPER_EXTENSION = bundle;
+ };
+ name = Debug;
+ };
+ E06F70F13B606F0979741BCAFE1F1003 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 3D30871A308E087FD2D94B682D931425 /* Toast-Swift.debug.xcconfig */;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_WEAK = NO;
+ "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+ "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = NO;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
+ GCC_PREFIX_HEADER = "Target Support Files/Toast-Swift/Toast-Swift-prefix.pch";
+ GENERATE_INFOPLIST_FILE = NO;
+ INFOPLIST_FILE = "Target Support Files/Toast-Swift/Toast-Swift-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MODULEMAP_FILE = "Target Support Files/Toast-Swift/Toast-Swift.modulemap";
+ PRODUCT_MODULE_NAME = Toast_Swift;
+ PRODUCT_NAME = Toast_Swift;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
+ SWIFT_INSTALL_OBJC_HEADER = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 8DE5143C03248BB6CD542DE3963D6F3A /* Debug */,
+ 9E406C6AAF85E580207CD97B0044DEAB /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 4AB85B230CA513CF80A8088764DB4510 /* Build configuration list for PBXNativeTarget "Pods-Example" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2E38D8195E8CB8DAA1E3DEBA5C5F406C /* Debug */,
+ C4FB43AE2367DAAD0704251AABDE432D /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 66F431564E9CBAE13B7AE817EE8C82F8 /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ ADB5712A52D00712AF3E54225E7871BA /* Debug */,
+ 41669B547BC8CCCEECA78F2936C01429 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 80CE967CAA1D35721519F892BAF7A19B /* Build configuration list for PBXNativeTarget "SnapKit" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 9D0D7572FEDA4CC9E75E7387846AFE57 /* Debug */,
+ BAD20131EC29650C6737E66854A3A9FD /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 9C146D0EDFB76FE1156D655A897B6E94 /* Build configuration list for PBXNativeTarget "Toast-Swift" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ E06F70F13B606F0979741BCAFE1F1003 /* Debug */,
+ 7E48D17D0469F73801BBDAF1F20755F2 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ A9996BEBF8EBDC1B9E57E07787F81CD6 /* Build configuration list for PBXNativeTarget "Toast-Swift-Toast-Swift" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ DD7117494DA57CB220D93C012567BF9C /* Debug */,
+ CCCFDF6B48013EFB53F26D660294CD6E /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+}
--- /dev/null
+Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
--- /dev/null
+<img src="https://snapkit.github.io/SnapKit/images/banner.jpg" alt="" />
+
+SnapKit is a DSL to make Auto Layout easy on both iOS and OS X.
+
+[](https://travis-ci.org/SnapKit/SnapKit)
+[](https://github.com/SnapKit/SnapKit)
+[](https://cocoapods.org/pods/SnapKit)
+[](https://github.com/Carthage/Carthage)
+
+#### ⚠️ **To use with Swift 4.x please ensure you are using >= 4.0.0** ⚠️
+#### ⚠️ **To use with Swift 5.x please ensure you are using >= 5.0.0** ⚠️
+
+## Contents
+
+- [Requirements](#requirements)
+- [Migration Guides](#migration-guides)
+- [Communication](#communication)
+- [Installation](#installation)
+- [Usage](#usage)
+- [Credits](#credits)
+- [License](#license)
+
+## Requirements
+
+- iOS 12.0+ / Mac OS X 10.13+ / tvOS 10.0+
+- Xcode 10.0+
+- Swift 4.0+
+
+## Migration Guides
+
+- [SnapKit 3.0 Migration Guide](Documentation/SnapKit%203.0%20Migration%20Guide.md)
+
+## Communication
+
+- If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/snapkit). (Tag 'snapkit')
+- If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/snapkit).
+- If you **found a bug**, open an issue.
+- If you **have a feature request**, open an issue.
+- If you **want to contribute**, submit a pull request.
+
+
+## Installation
+
+### CocoaPods
+
+[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command:
+
+```bash
+$ gem install cocoapods
+```
+
+> CocoaPods 1.1.0+ is required to build SnapKit 4.0.0+.
+
+To integrate SnapKit into your Xcode project using CocoaPods, specify it in your `Podfile`:
+
+```ruby
+source 'https://github.com/CocoaPods/Specs.git'
+platform :ios, '10.0'
+use_frameworks!
+
+target '<Your Target Name>' do
+ pod 'SnapKit', '~> 5.7.0'
+end
+```
+
+Then, run the following command:
+
+```bash
+$ pod install
+```
+
+### Carthage
+
+[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.
+
+You can install Carthage with [Homebrew](http://brew.sh/) using the following command:
+
+```bash
+$ brew update
+$ brew install carthage
+```
+
+To integrate SnapKit into your Xcode project using Carthage, specify it in your `Cartfile`:
+
+```ogdl
+github "SnapKit/SnapKit" ~> 5.0.0
+```
+
+Run `carthage update` to build the framework and drag the built `SnapKit.framework` into your Xcode project.
+
+### Swift Package Manager
+
+[Swift Package Manager](https://swift.org/package-manager/) is a tool for managing the distribution of Swift code. It’s integrated with the Swift build system to automate the process of downloading, compiling, and linking dependencies.
+
+> Xcode 11+ is required to build SnapKit using Swift Package Manager.
+
+To integrate SnapKit into your Xcode project using Swift Package Manager, add it to the dependencies value of your `Package.swift`:
+
+```swift
+dependencies: [
+ .package(url: "https://github.com/SnapKit/SnapKit.git", .upToNextMajor(from: "5.0.1"))
+]
+```
+
+### Manually
+
+If you prefer not to use either of the aforementioned dependency managers, you can integrate SnapKit into your project manually.
+
+---
+
+## Usage
+
+### Quick Start
+
+```swift
+import SnapKit
+
+class MyViewController: UIViewController {
+
+ lazy var box = UIView()
+
+ override func viewDidLoad() {
+ super.viewDidLoad()
+
+ self.view.addSubview(box)
+ box.backgroundColor = .green
+ box.snp.makeConstraints { (make) -> Void in
+ make.width.height.equalTo(50)
+ make.center.equalTo(self.view)
+ }
+ }
+
+}
+```
+
+### Playground
+You can try SnapKit in Playground.
+
+**Note:**
+
+> To try SnapKit in playground, open `SnapKit.xcworkspace` and build SnapKit.framework for any simulator first.
+
+### Resources
+
+- [Documentation](https://snapkit.github.io/SnapKit/docs/)
+- [F.A.Q.](https://snapkit.github.io/SnapKit/faq/)
+
+## Credits
+
+- Robert Payne ([@robertjpayne](https://twitter.com/robertjpayne))
+- Many other contributors
+
+## License
+
+SnapKit is released under the MIT license. See LICENSE for details.
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+public final class Constraint {
+
+ internal let sourceLocation: (String, UInt)
+ internal let label: String?
+
+ private let from: ConstraintItem
+ private let to: ConstraintItem
+ private let relation: ConstraintRelation
+ private let multiplier: ConstraintMultiplierTarget
+ private var constant: ConstraintConstantTarget {
+ didSet {
+ self.updateConstantAndPriorityIfNeeded()
+ }
+ }
+ private var priority: ConstraintPriorityTarget {
+ didSet {
+ self.updateConstantAndPriorityIfNeeded()
+ }
+ }
+ public var layoutConstraints: [LayoutConstraint]
+
+ public var isActive: Bool {
+ set {
+ if newValue {
+ activate()
+ }
+ else {
+ deactivate()
+ }
+ }
+
+ get {
+ for layoutConstraint in self.layoutConstraints {
+ if layoutConstraint.isActive {
+ return true
+ }
+ }
+ return false
+ }
+ }
+
+ // MARK: Initialization
+
+ internal init(from: ConstraintItem,
+ to: ConstraintItem,
+ relation: ConstraintRelation,
+ sourceLocation: (String, UInt),
+ label: String?,
+ multiplier: ConstraintMultiplierTarget,
+ constant: ConstraintConstantTarget,
+ priority: ConstraintPriorityTarget) {
+ self.from = from
+ self.to = to
+ self.relation = relation
+ self.sourceLocation = sourceLocation
+ self.label = label
+ self.multiplier = multiplier
+ self.constant = constant
+ self.priority = priority
+ self.layoutConstraints = []
+
+ // get attributes
+ let layoutFromAttributes = self.from.attributes.layoutAttributes
+ let layoutToAttributes = self.to.attributes.layoutAttributes
+
+ // get layout from
+ let layoutFrom = self.from.layoutConstraintItem!
+
+ // get relation
+ let layoutRelation = self.relation.layoutRelation
+
+ for layoutFromAttribute in layoutFromAttributes {
+ // get layout to attribute
+ let layoutToAttribute: LayoutAttribute
+ #if canImport(UIKit)
+ if layoutToAttributes.count > 0 {
+ if self.from.attributes == .edges && self.to.attributes == .margins {
+ switch layoutFromAttribute {
+ case .left:
+ layoutToAttribute = .leftMargin
+ case .right:
+ layoutToAttribute = .rightMargin
+ case .top:
+ layoutToAttribute = .topMargin
+ case .bottom:
+ layoutToAttribute = .bottomMargin
+ default:
+ fatalError()
+ }
+ } else if self.from.attributes == .margins && self.to.attributes == .edges {
+ switch layoutFromAttribute {
+ case .leftMargin:
+ layoutToAttribute = .left
+ case .rightMargin:
+ layoutToAttribute = .right
+ case .topMargin:
+ layoutToAttribute = .top
+ case .bottomMargin:
+ layoutToAttribute = .bottom
+ default:
+ fatalError()
+ }
+ } else if self.from.attributes == .directionalEdges && self.to.attributes == .directionalMargins {
+ switch layoutFromAttribute {
+ case .leading:
+ layoutToAttribute = .leadingMargin
+ case .trailing:
+ layoutToAttribute = .trailingMargin
+ case .top:
+ layoutToAttribute = .topMargin
+ case .bottom:
+ layoutToAttribute = .bottomMargin
+ default:
+ fatalError()
+ }
+ } else if self.from.attributes == .directionalMargins && self.to.attributes == .directionalEdges {
+ switch layoutFromAttribute {
+ case .leadingMargin:
+ layoutToAttribute = .leading
+ case .trailingMargin:
+ layoutToAttribute = .trailing
+ case .topMargin:
+ layoutToAttribute = .top
+ case .bottomMargin:
+ layoutToAttribute = .bottom
+ default:
+ fatalError()
+ }
+ } else if self.from.attributes == self.to.attributes {
+ layoutToAttribute = layoutFromAttribute
+ } else {
+ layoutToAttribute = layoutToAttributes[0]
+ }
+ } else {
+ if self.to.target == nil && (layoutFromAttribute == .centerX || layoutFromAttribute == .centerY) {
+ layoutToAttribute = layoutFromAttribute == .centerX ? .left : .top
+ } else {
+ layoutToAttribute = layoutFromAttribute
+ }
+ }
+ #else
+ if self.from.attributes == self.to.attributes {
+ layoutToAttribute = layoutFromAttribute
+ } else if layoutToAttributes.count > 0 {
+ layoutToAttribute = layoutToAttributes[0]
+ } else {
+ layoutToAttribute = layoutFromAttribute
+ }
+ #endif
+
+ // get layout constant
+ let layoutConstant: CGFloat = self.constant.constraintConstantTargetValueFor(layoutAttribute: layoutToAttribute)
+
+ // get layout to
+ var layoutTo: AnyObject? = self.to.target
+
+ // use superview if possible
+ if layoutTo == nil && layoutToAttribute != .width && layoutToAttribute != .height {
+ layoutTo = layoutFrom.superview
+ }
+
+ // create layout constraint
+ let layoutConstraint = LayoutConstraint(
+ item: layoutFrom,
+ attribute: layoutFromAttribute,
+ relatedBy: layoutRelation,
+ toItem: layoutTo,
+ attribute: layoutToAttribute,
+ multiplier: self.multiplier.constraintMultiplierTargetValue,
+ constant: layoutConstant
+ )
+
+ // set label
+ layoutConstraint.label = self.label
+
+ // set priority
+ layoutConstraint.priority = LayoutPriority(rawValue: self.priority.constraintPriorityTargetValue)
+
+ // set constraint
+ layoutConstraint.constraint = self
+
+ // append
+ self.layoutConstraints.append(layoutConstraint)
+ }
+ }
+
+ // MARK: Public
+
+ @available(*, deprecated, renamed:"activate()")
+ public func install() {
+ self.activate()
+ }
+
+ @available(*, deprecated, renamed:"deactivate()")
+ public func uninstall() {
+ self.deactivate()
+ }
+
+ public func activate() {
+ self.activateIfNeeded()
+ }
+
+ public func deactivate() {
+ self.deactivateIfNeeded()
+ }
+
+ @discardableResult
+ public func update(offset: ConstraintOffsetTarget) -> Constraint {
+ self.constant = offset.constraintOffsetTargetValue
+ return self
+ }
+
+ @discardableResult
+ public func update(inset: ConstraintInsetTarget) -> Constraint {
+ self.constant = inset.constraintInsetTargetValue
+ return self
+ }
+
+ #if canImport(UIKit)
+ @discardableResult
+ @available(iOS 11.0, tvOS 11.0, *)
+ public func update(inset: ConstraintDirectionalInsetTarget) -> Constraint {
+ self.constant = inset.constraintDirectionalInsetTargetValue
+ return self
+ }
+ #endif
+
+ @discardableResult
+ public func update(priority: ConstraintPriorityTarget) -> Constraint {
+ self.priority = priority.constraintPriorityTargetValue
+ return self
+ }
+
+ @discardableResult
+ public func update(priority: ConstraintPriority) -> Constraint {
+ self.priority = priority.value
+ return self
+ }
+
+ @available(*, deprecated, renamed:"update(offset:)")
+ public func updateOffset(amount: ConstraintOffsetTarget) -> Void { self.update(offset: amount) }
+
+ @available(*, deprecated, renamed:"update(inset:)")
+ public func updateInsets(amount: ConstraintInsetTarget) -> Void { self.update(inset: amount) }
+
+ @available(*, deprecated, renamed:"update(priority:)")
+ public func updatePriority(amount: ConstraintPriorityTarget) -> Void { self.update(priority: amount) }
+
+ @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.")
+ public func updatePriorityRequired() -> Void {}
+
+ @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.")
+ public func updatePriorityHigh() -> Void { fatalError("Must be implemented by Concrete subclass.") }
+
+ @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.")
+ public func updatePriorityMedium() -> Void { fatalError("Must be implemented by Concrete subclass.") }
+
+ @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.")
+ public func updatePriorityLow() -> Void { fatalError("Must be implemented by Concrete subclass.") }
+
+ // MARK: Internal
+
+ internal func updateConstantAndPriorityIfNeeded() {
+ for layoutConstraint in self.layoutConstraints {
+ let attribute = (layoutConstraint.secondAttribute == .notAnAttribute) ? layoutConstraint.firstAttribute : layoutConstraint.secondAttribute
+ layoutConstraint.constant = self.constant.constraintConstantTargetValueFor(layoutAttribute: attribute)
+
+ let requiredPriority = ConstraintPriority.required.value
+ if (layoutConstraint.priority.rawValue < requiredPriority), (self.priority.constraintPriorityTargetValue != requiredPriority) {
+ layoutConstraint.priority = LayoutPriority(rawValue: self.priority.constraintPriorityTargetValue)
+ }
+ }
+ }
+
+ internal func activateIfNeeded(updatingExisting: Bool = false) {
+ guard let item = self.from.layoutConstraintItem else {
+ print("WARNING: SnapKit failed to get from item from constraint. Activate will be a no-op.")
+ return
+ }
+ let layoutConstraints = self.layoutConstraints
+
+ if updatingExisting {
+ var existingLayoutConstraints: [LayoutConstraint] = []
+ for constraint in item.constraints {
+ existingLayoutConstraints += constraint.layoutConstraints
+ }
+
+ for layoutConstraint in layoutConstraints {
+ let existingLayoutConstraint = existingLayoutConstraints.first { $0 == layoutConstraint }
+ guard let updateLayoutConstraint = existingLayoutConstraint else {
+ fatalError("Updated constraint could not find existing matching constraint to update: \(layoutConstraint)")
+ }
+
+ let updateLayoutAttribute = (updateLayoutConstraint.secondAttribute == .notAnAttribute) ? updateLayoutConstraint.firstAttribute : updateLayoutConstraint.secondAttribute
+ updateLayoutConstraint.constant = self.constant.constraintConstantTargetValueFor(layoutAttribute: updateLayoutAttribute)
+ }
+ } else {
+ NSLayoutConstraint.activate(layoutConstraints)
+ item.add(constraints: [self])
+ }
+ }
+
+ internal func deactivateIfNeeded() {
+ guard let item = self.from.layoutConstraintItem else {
+ print("WARNING: SnapKit failed to get from item from constraint. Deactivate will be a no-op.")
+ return
+ }
+ let layoutConstraints = self.layoutConstraints
+ NSLayoutConstraint.deactivate(layoutConstraints)
+ item.remove(constraints: [self])
+ }
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+internal struct ConstraintAttributes : OptionSet, ExpressibleByIntegerLiteral {
+
+ typealias IntegerLiteralType = UInt
+
+ internal init(rawValue: UInt) {
+ self.rawValue = rawValue
+ }
+ internal init(_ rawValue: UInt) {
+ self.init(rawValue: rawValue)
+ }
+ internal init(nilLiteral: ()) {
+ self.rawValue = 0
+ }
+ internal init(integerLiteral rawValue: IntegerLiteralType) {
+ self.init(rawValue: rawValue)
+ }
+
+ internal private(set) var rawValue: UInt
+ internal static var allZeros: ConstraintAttributes { return 0 }
+ internal static func convertFromNilLiteral() -> ConstraintAttributes { return 0 }
+ internal var boolValue: Bool { return self.rawValue != 0 }
+
+ internal func toRaw() -> UInt { return self.rawValue }
+ internal static func fromRaw(_ raw: UInt) -> ConstraintAttributes? { return self.init(raw) }
+ internal static func fromMask(_ raw: UInt) -> ConstraintAttributes { return self.init(raw) }
+
+ // normal
+
+ internal static let none: ConstraintAttributes = 0
+ internal static let left: ConstraintAttributes = ConstraintAttributes(UInt(1) << 0)
+ internal static let top: ConstraintAttributes = ConstraintAttributes(UInt(1) << 1)
+ internal static let right: ConstraintAttributes = ConstraintAttributes(UInt(1) << 2)
+ internal static let bottom: ConstraintAttributes = ConstraintAttributes(UInt(1) << 3)
+ internal static let leading: ConstraintAttributes = ConstraintAttributes(UInt(1) << 4)
+ internal static let trailing: ConstraintAttributes = ConstraintAttributes(UInt(1) << 5)
+ internal static let width: ConstraintAttributes = ConstraintAttributes(UInt(1) << 6)
+ internal static let height: ConstraintAttributes = ConstraintAttributes(UInt(1) << 7)
+ internal static let centerX: ConstraintAttributes = ConstraintAttributes(UInt(1) << 8)
+ internal static let centerY: ConstraintAttributes = ConstraintAttributes(UInt(1) << 9)
+ internal static let lastBaseline: ConstraintAttributes = ConstraintAttributes(UInt(1) << 10)
+
+ @available(iOS 8.0, OSX 10.11, *)
+ internal static let firstBaseline: ConstraintAttributes = ConstraintAttributes(UInt(1) << 11)
+
+ @available(iOS 8.0, *)
+ internal static let leftMargin: ConstraintAttributes = ConstraintAttributes(UInt(1) << 12)
+
+ @available(iOS 8.0, *)
+ internal static let rightMargin: ConstraintAttributes = ConstraintAttributes(UInt(1) << 13)
+
+ @available(iOS 8.0, *)
+ internal static let topMargin: ConstraintAttributes = ConstraintAttributes(UInt(1) << 14)
+
+ @available(iOS 8.0, *)
+ internal static let bottomMargin: ConstraintAttributes = ConstraintAttributes(UInt(1) << 15)
+
+ @available(iOS 8.0, *)
+ internal static let leadingMargin: ConstraintAttributes = ConstraintAttributes(UInt(1) << 16)
+
+ @available(iOS 8.0, *)
+ internal static let trailingMargin: ConstraintAttributes = ConstraintAttributes(UInt(1) << 17)
+
+ @available(iOS 8.0, *)
+ internal static let centerXWithinMargins: ConstraintAttributes = ConstraintAttributes(UInt(1) << 18)
+
+ @available(iOS 8.0, *)
+ internal static let centerYWithinMargins: ConstraintAttributes = ConstraintAttributes(UInt(1) << 19)
+
+ // aggregates
+
+ internal static let edges: ConstraintAttributes = [.horizontalEdges, .verticalEdges]
+ internal static let horizontalEdges: ConstraintAttributes = [.left, .right]
+ internal static let verticalEdges: ConstraintAttributes = [.top, .bottom]
+ internal static let directionalEdges: ConstraintAttributes = [.directionalHorizontalEdges, .directionalVerticalEdges]
+ internal static let directionalHorizontalEdges: ConstraintAttributes = [.leading, .trailing]
+ internal static let directionalVerticalEdges: ConstraintAttributes = [.top, .bottom]
+ internal static let size: ConstraintAttributes = [.width, .height]
+ internal static let center: ConstraintAttributes = [.centerX, .centerY]
+
+ @available(iOS 8.0, *)
+ internal static let margins: ConstraintAttributes = [.leftMargin, .topMargin, .rightMargin, .bottomMargin]
+
+ @available(iOS 8.0, *)
+ internal static let directionalMargins: ConstraintAttributes = [.leadingMargin, .topMargin, .trailingMargin, .bottomMargin]
+
+ @available(iOS 8.0, *)
+ internal static let centerWithinMargins: ConstraintAttributes = [.centerXWithinMargins, .centerYWithinMargins]
+
+ internal var layoutAttributes:[LayoutAttribute] {
+ var attrs = [LayoutAttribute]()
+ if (self.contains(ConstraintAttributes.left)) {
+ attrs.append(.left)
+ }
+ if (self.contains(ConstraintAttributes.top)) {
+ attrs.append(.top)
+ }
+ if (self.contains(ConstraintAttributes.right)) {
+ attrs.append(.right)
+ }
+ if (self.contains(ConstraintAttributes.bottom)) {
+ attrs.append(.bottom)
+ }
+ if (self.contains(ConstraintAttributes.leading)) {
+ attrs.append(.leading)
+ }
+ if (self.contains(ConstraintAttributes.trailing)) {
+ attrs.append(.trailing)
+ }
+ if (self.contains(ConstraintAttributes.width)) {
+ attrs.append(.width)
+ }
+ if (self.contains(ConstraintAttributes.height)) {
+ attrs.append(.height)
+ }
+ if (self.contains(ConstraintAttributes.centerX)) {
+ attrs.append(.centerX)
+ }
+ if (self.contains(ConstraintAttributes.centerY)) {
+ attrs.append(.centerY)
+ }
+ if (self.contains(ConstraintAttributes.lastBaseline)) {
+ attrs.append(.lastBaseline)
+ }
+
+ #if canImport(UIKit)
+ if (self.contains(ConstraintAttributes.firstBaseline)) {
+ attrs.append(.firstBaseline)
+ }
+ if (self.contains(ConstraintAttributes.leftMargin)) {
+ attrs.append(.leftMargin)
+ }
+ if (self.contains(ConstraintAttributes.rightMargin)) {
+ attrs.append(.rightMargin)
+ }
+ if (self.contains(ConstraintAttributes.topMargin)) {
+ attrs.append(.topMargin)
+ }
+ if (self.contains(ConstraintAttributes.bottomMargin)) {
+ attrs.append(.bottomMargin)
+ }
+ if (self.contains(ConstraintAttributes.leadingMargin)) {
+ attrs.append(.leadingMargin)
+ }
+ if (self.contains(ConstraintAttributes.trailingMargin)) {
+ attrs.append(.trailingMargin)
+ }
+ if (self.contains(ConstraintAttributes.centerXWithinMargins)) {
+ attrs.append(.centerXWithinMargins)
+ }
+ if (self.contains(ConstraintAttributes.centerYWithinMargins)) {
+ attrs.append(.centerYWithinMargins)
+ }
+ #endif
+
+ return attrs
+ }
+}
+
+internal func + (left: ConstraintAttributes, right: ConstraintAttributes) -> ConstraintAttributes {
+ return left.union(right)
+}
+
+internal func +=(left: inout ConstraintAttributes, right: ConstraintAttributes) {
+ left.formUnion(right)
+}
+
+internal func -=(left: inout ConstraintAttributes, right: ConstraintAttributes) {
+ left.subtract(right)
+}
+
+internal func ==(left: ConstraintAttributes, right: ConstraintAttributes) -> Bool {
+ return left.rawValue == right.rawValue
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+ public typealias ConstraintInterfaceLayoutDirection = UIUserInterfaceLayoutDirection
+#else
+ import AppKit
+ public typealias ConstraintInterfaceLayoutDirection = NSUserInterfaceLayoutDirection
+#endif
+
+
+public struct ConstraintConfig {
+
+ public static var interfaceLayoutDirection: ConstraintInterfaceLayoutDirection = .leftToRight
+
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+public protocol ConstraintConstantTarget {
+}
+
+extension CGPoint: ConstraintConstantTarget {
+}
+
+extension CGSize: ConstraintConstantTarget {
+}
+
+extension ConstraintInsets: ConstraintConstantTarget {
+}
+
+#if canImport(UIKit)
+@available(iOS 11.0, tvOS 11.0, *)
+extension ConstraintDirectionalInsets: ConstraintConstantTarget {
+}
+#endif
+
+extension ConstraintConstantTarget {
+
+ internal func constraintConstantTargetValueFor(layoutAttribute: LayoutAttribute) -> CGFloat {
+ if let value = self as? CGFloat {
+ return value
+ }
+
+ if let value = self as? Float {
+ return CGFloat(value)
+ }
+
+ if let value = self as? Double {
+ return CGFloat(value)
+ }
+
+ if let value = self as? Int {
+ return CGFloat(value)
+ }
+
+ if let value = self as? UInt {
+ return CGFloat(value)
+ }
+
+ if let value = self as? CGSize {
+ if layoutAttribute == .width {
+ return value.width
+ } else if layoutAttribute == .height {
+ return value.height
+ } else {
+ return 0.0
+ }
+ }
+
+ if let value = self as? CGPoint {
+ #if canImport(UIKit)
+ switch layoutAttribute {
+ case .left, .right, .leading, .trailing, .centerX, .leftMargin, .rightMargin, .leadingMargin, .trailingMargin, .centerXWithinMargins:
+ return value.x
+ case .top, .bottom, .centerY, .topMargin, .bottomMargin, .centerYWithinMargins, .lastBaseline, .firstBaseline:
+ return value.y
+ case .width, .height, .notAnAttribute:
+ return 0.0
+ #if swift(>=5.0)
+ @unknown default:
+ return 0.0
+ #endif
+ }
+ #else
+ switch layoutAttribute {
+ case .left, .right, .leading, .trailing, .centerX:
+ return value.x
+ case .top, .bottom, .centerY, .lastBaseline, .firstBaseline:
+ return value.y
+ case .width, .height, .notAnAttribute:
+ return 0.0
+ #if swift(>=5.0)
+ @unknown default:
+ return 0.0
+ #endif
+ }
+ #endif
+ }
+
+ if let value = self as? ConstraintInsets {
+ #if canImport(UIKit)
+ switch layoutAttribute {
+ case .left, .leftMargin:
+ return value.left
+ case .top, .topMargin, .firstBaseline:
+ return value.top
+ case .right, .rightMargin:
+ return -value.right
+ case .bottom, .bottomMargin, .lastBaseline:
+ return -value.bottom
+ case .leading, .leadingMargin:
+ return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.left : value.right
+ case .trailing, .trailingMargin:
+ return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.right : -value.left
+ case .centerX, .centerXWithinMargins:
+ return (value.left - value.right) / 2
+ case .centerY, .centerYWithinMargins:
+ return (value.top - value.bottom) / 2
+ case .width:
+ return -(value.left + value.right)
+ case .height:
+ return -(value.top + value.bottom)
+ case .notAnAttribute:
+ return 0.0
+ #if swift(>=5.0)
+ @unknown default:
+ return 0.0
+ #endif
+ }
+ #else
+ switch layoutAttribute {
+ case .left:
+ return value.left
+ case .top, .firstBaseline:
+ return value.top
+ case .right:
+ return -value.right
+ case .bottom, .lastBaseline:
+ return -value.bottom
+ case .leading:
+ return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.left : value.right
+ case .trailing:
+ return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.right : -value.left
+ case .centerX:
+ return (value.left - value.right) / 2
+ case .centerY:
+ return (value.top - value.bottom) / 2
+ case .width:
+ return -(value.left + value.right)
+ case .height:
+ return -(value.top + value.bottom)
+ case .notAnAttribute:
+ return 0.0
+ #if swift(>=5.0)
+ @unknown default:
+ return 0.0
+ #endif
+ }
+ #endif
+ }
+
+ #if canImport(UIKit)
+ if #available(iOS 11.0, tvOS 11.0, *), let value = self as? ConstraintDirectionalInsets {
+ switch layoutAttribute {
+ case .left, .leftMargin:
+ return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.leading : value.trailing
+ case .top, .topMargin, .firstBaseline:
+ return value.top
+ case .right, .rightMargin:
+ return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.trailing : -value.leading
+ case .bottom, .bottomMargin, .lastBaseline:
+ return -value.bottom
+ case .leading, .leadingMargin:
+ return value.leading
+ case .trailing, .trailingMargin:
+ return -value.trailing
+ case .centerX, .centerXWithinMargins:
+ return (value.leading - value.trailing) / 2
+ case .centerY, .centerYWithinMargins:
+ return (value.top - value.bottom) / 2
+ case .width:
+ return -(value.leading + value.trailing)
+ case .height:
+ return -(value.top + value.bottom)
+ case .notAnAttribute:
+ return 0.0
+ #if swift(>=5.0)
+ @unknown default:
+ return 0.0
+ #else
+ default:
+ return 0.0
+ #endif
+ }
+ }
+ #endif
+
+ return 0.0
+ }
+
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+public protocol ConstraintDSL {
+
+ var target: AnyObject? { get }
+
+ func setLabel(_ value: String?)
+ func label() -> String?
+
+}
+extension ConstraintDSL {
+
+ public func setLabel(_ value: String?) {
+ objc_setAssociatedObject(self.target as Any, &labelKey, value, .OBJC_ASSOCIATION_COPY_NONATOMIC)
+ }
+ public func label() -> String? {
+ return objc_getAssociatedObject(self.target as Any, &labelKey) as? String
+ }
+
+}
+private var labelKey: UInt8 = 0
+
+
+public protocol ConstraintBasicAttributesDSL : ConstraintDSL {
+}
+extension ConstraintBasicAttributesDSL {
+
+ // MARK: Basics
+
+ public var left: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.left)
+ }
+
+ public var top: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.top)
+ }
+
+ public var right: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.right)
+ }
+
+ public var bottom: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottom)
+ }
+
+ public var leading: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leading)
+ }
+
+ public var trailing: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.trailing)
+ }
+
+ public var width: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.width)
+ }
+
+ public var height: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.height)
+ }
+
+ public var centerX: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerX)
+ }
+
+ public var centerY: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerY)
+ }
+
+ public var edges: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.edges)
+ }
+
+ public var directionalEdges: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalEdges)
+ }
+
+ public var horizontalEdges: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.horizontalEdges)
+ }
+
+ public var verticalEdges: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.verticalEdges)
+ }
+
+ public var directionalHorizontalEdges: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalHorizontalEdges)
+ }
+
+ public var directionalVerticalEdges: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalVerticalEdges)
+ }
+
+ public var size: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.size)
+ }
+
+ public var center: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.center)
+ }
+
+}
+
+public protocol ConstraintAttributesDSL : ConstraintBasicAttributesDSL {
+}
+extension ConstraintAttributesDSL {
+
+ // MARK: Baselines
+ @available(*, deprecated, renamed:"lastBaseline")
+ public var baseline: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.lastBaseline)
+ }
+
+ @available(iOS 8.0, OSX 10.11, *)
+ public var lastBaseline: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.lastBaseline)
+ }
+
+ @available(iOS 8.0, OSX 10.11, *)
+ public var firstBaseline: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.firstBaseline)
+ }
+
+ // MARK: Margins
+
+ @available(iOS 8.0, *)
+ public var leftMargin: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leftMargin)
+ }
+
+ @available(iOS 8.0, *)
+ public var topMargin: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.topMargin)
+ }
+
+ @available(iOS 8.0, *)
+ public var rightMargin: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.rightMargin)
+ }
+
+ @available(iOS 8.0, *)
+ public var bottomMargin: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottomMargin)
+ }
+
+ @available(iOS 8.0, *)
+ public var leadingMargin: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leadingMargin)
+ }
+
+ @available(iOS 8.0, *)
+ public var trailingMargin: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.trailingMargin)
+ }
+
+ @available(iOS 8.0, *)
+ public var centerXWithinMargins: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerXWithinMargins)
+ }
+
+ @available(iOS 8.0, *)
+ public var centerYWithinMargins: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerYWithinMargins)
+ }
+
+ @available(iOS 8.0, *)
+ public var margins: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.margins)
+ }
+
+ @available(iOS 8.0, *)
+ public var directionalMargins: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalMargins)
+ }
+
+ @available(iOS 8.0, *)
+ public var centerWithinMargins: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerWithinMargins)
+ }
+
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+public class ConstraintDescription {
+
+ internal let item: LayoutConstraintItem
+ internal var attributes: ConstraintAttributes
+ internal var relation: ConstraintRelation? = nil
+ internal var sourceLocation: (String, UInt)? = nil
+ internal var label: String? = nil
+ internal var related: ConstraintItem? = nil
+ internal var multiplier: ConstraintMultiplierTarget = 1.0
+ internal var constant: ConstraintConstantTarget = 0.0
+ internal var priority: ConstraintPriorityTarget = 1000.0
+ internal lazy var constraint: Constraint? = {
+ guard let relation = self.relation,
+ let related = self.related,
+ let sourceLocation = self.sourceLocation else {
+ return nil
+ }
+ let from = ConstraintItem(target: self.item, attributes: self.attributes)
+
+ return Constraint(
+ from: from,
+ to: related,
+ relation: relation,
+ sourceLocation: sourceLocation,
+ label: self.label,
+ multiplier: self.multiplier,
+ constant: self.constant,
+ priority: self.priority
+ )
+ }()
+
+ // MARK: Initialization
+
+ internal init(item: LayoutConstraintItem, attributes: ConstraintAttributes) {
+ self.item = item
+ self.attributes = attributes
+ }
+
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+import UIKit
+#else
+import AppKit
+#endif
+
+#if canImport(UIKit)
+public protocol ConstraintDirectionalInsetTarget: ConstraintConstantTarget {
+}
+
+@available(iOS 11.0, tvOS 11.0, *)
+extension ConstraintDirectionalInsets: ConstraintDirectionalInsetTarget {
+}
+
+extension ConstraintDirectionalInsetTarget {
+
+ @available(iOS 11.0, tvOS 11.0, *)
+ internal var constraintDirectionalInsetTargetValue: ConstraintDirectionalInsets {
+ if let amount = self as? ConstraintDirectionalInsets {
+ return amount
+ } else {
+ return ConstraintDirectionalInsets(top: 0, leading: 0, bottom: 0, trailing: 0)
+ }
+ }
+}
+#endif
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+#if canImport(UIKit)
+ @available(iOS 11.0, tvOS 11.0, *)
+ public typealias ConstraintDirectionalInsets = NSDirectionalEdgeInsets
+#endif
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+public protocol ConstraintInsetTarget: ConstraintConstantTarget {
+}
+
+extension Int: ConstraintInsetTarget {
+}
+
+extension UInt: ConstraintInsetTarget {
+}
+
+extension Float: ConstraintInsetTarget {
+}
+
+extension Double: ConstraintInsetTarget {
+}
+
+extension CGFloat: ConstraintInsetTarget {
+}
+
+extension ConstraintInsets: ConstraintInsetTarget {
+}
+
+extension ConstraintInsetTarget {
+
+ internal var constraintInsetTargetValue: ConstraintInsets {
+ if let amount = self as? ConstraintInsets {
+ return amount
+ } else if let amount = self as? Float {
+ return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount))
+ } else if let amount = self as? Double {
+ return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount))
+ } else if let amount = self as? CGFloat {
+ return ConstraintInsets(top: amount, left: amount, bottom: amount, right: amount)
+ } else if let amount = self as? Int {
+ return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount))
+ } else if let amount = self as? UInt {
+ return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount))
+ } else {
+ return ConstraintInsets(top: 0, left: 0, bottom: 0, right: 0)
+ }
+ }
+
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+#if canImport(UIKit)
+ public typealias ConstraintInsets = UIEdgeInsets
+#else
+ public typealias ConstraintInsets = NSEdgeInsets
+#endif
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+public final class ConstraintItem {
+
+ internal weak var target: AnyObject?
+ internal let attributes: ConstraintAttributes
+
+ internal init(target: AnyObject?, attributes: ConstraintAttributes) {
+ self.target = target
+ self.attributes = attributes
+ }
+
+ internal var layoutConstraintItem: LayoutConstraintItem? {
+ return self.target as? LayoutConstraintItem
+ }
+
+}
+
+public func ==(lhs: ConstraintItem, rhs: ConstraintItem) -> Bool {
+ // pointer equality
+ guard lhs !== rhs else {
+ return true
+ }
+
+ // must both have valid targets and identical attributes
+ guard let target1 = lhs.target,
+ let target2 = rhs.target,
+ target1 === target2 && lhs.attributes == rhs.attributes else {
+ return false
+ }
+
+ return true
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#endif
+
+
+@available(iOS 9.0, OSX 10.11, *)
+public extension ConstraintLayoutGuide {
+
+ var snp: ConstraintLayoutGuideDSL {
+ return ConstraintLayoutGuideDSL(guide: self)
+ }
+
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+#if canImport(UIKit)
+ @available(iOS 9.0, *)
+ public typealias ConstraintLayoutGuide = UILayoutGuide
+#else
+ @available(OSX 10.11, *)
+ public typealias ConstraintLayoutGuide = NSLayoutGuide
+#endif
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+@available(iOS 9.0, OSX 10.11, *)
+public struct ConstraintLayoutGuideDSL: ConstraintAttributesDSL {
+
+ @discardableResult
+ public func prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] {
+ return ConstraintMaker.prepareConstraints(item: self.guide, closure: closure)
+ }
+
+ public func makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
+ ConstraintMaker.makeConstraints(item: self.guide, closure: closure)
+ }
+
+ public func remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
+ ConstraintMaker.remakeConstraints(item: self.guide, closure: closure)
+ }
+
+ public func updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
+ ConstraintMaker.updateConstraints(item: self.guide, closure: closure)
+ }
+
+ public func removeConstraints() {
+ ConstraintMaker.removeConstraints(item: self.guide)
+ }
+
+ public var target: AnyObject? {
+ return self.guide
+ }
+
+ internal let guide: ConstraintLayoutGuide
+
+ internal init(guide: ConstraintLayoutGuide) {
+ self.guide = guide
+
+ }
+
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+#if canImport(UIKit)
+ @available(iOS 8.0, *)
+ public typealias ConstraintLayoutSupport = UILayoutSupport
+#else
+ public class ConstraintLayoutSupport {}
+#endif
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+@available(iOS 8.0, *)
+public struct ConstraintLayoutSupportDSL: ConstraintDSL {
+
+ public var target: AnyObject? {
+ return self.support
+ }
+
+ internal let support: ConstraintLayoutSupport
+
+ internal init(support: ConstraintLayoutSupport) {
+ self.support = support
+
+ }
+
+ public var top: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.top)
+ }
+
+ public var bottom: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottom)
+ }
+
+ public var height: ConstraintItem {
+ return ConstraintItem(target: self.target, attributes: ConstraintAttributes.height)
+ }
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+public class ConstraintMaker {
+
+ public var left: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.left)
+ }
+
+ public var top: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.top)
+ }
+
+ public var bottom: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.bottom)
+ }
+
+ public var right: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.right)
+ }
+
+ public var leading: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.leading)
+ }
+
+ public var trailing: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.trailing)
+ }
+
+ public var width: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.width)
+ }
+
+ public var height: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.height)
+ }
+
+ public var centerX: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.centerX)
+ }
+
+ public var centerY: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.centerY)
+ }
+
+ @available(*, deprecated, renamed:"lastBaseline")
+ public var baseline: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.lastBaseline)
+ }
+
+ public var lastBaseline: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.lastBaseline)
+ }
+
+ @available(iOS 8.0, OSX 10.11, *)
+ public var firstBaseline: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.firstBaseline)
+ }
+
+ @available(iOS 8.0, *)
+ public var leftMargin: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.leftMargin)
+ }
+
+ @available(iOS 8.0, *)
+ public var rightMargin: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.rightMargin)
+ }
+
+ @available(iOS 8.0, *)
+ public var topMargin: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.topMargin)
+ }
+
+ @available(iOS 8.0, *)
+ public var bottomMargin: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.bottomMargin)
+ }
+
+ @available(iOS 8.0, *)
+ public var leadingMargin: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.leadingMargin)
+ }
+
+ @available(iOS 8.0, *)
+ public var trailingMargin: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.trailingMargin)
+ }
+
+ @available(iOS 8.0, *)
+ public var centerXWithinMargins: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.centerXWithinMargins)
+ }
+
+ @available(iOS 8.0, *)
+ public var centerYWithinMargins: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.centerYWithinMargins)
+ }
+
+ public var edges: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.edges)
+ }
+ public var horizontalEdges: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.horizontalEdges)
+ }
+ public var verticalEdges: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.verticalEdges)
+ }
+ public var directionalEdges: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.directionalEdges)
+ }
+ public var directionalHorizontalEdges: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.directionalHorizontalEdges)
+ }
+ public var directionalVerticalEdges: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.directionalVerticalEdges)
+ }
+ public var size: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.size)
+ }
+ public var center: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.center)
+ }
+
+ @available(iOS 8.0, *)
+ public var margins: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.margins)
+ }
+
+ @available(iOS 8.0, *)
+ public var directionalMargins: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.directionalMargins)
+ }
+
+ @available(iOS 8.0, *)
+ public var centerWithinMargins: ConstraintMakerExtendable {
+ return self.makeExtendableWithAttributes(.centerWithinMargins)
+ }
+
+ public let item: LayoutConstraintItem
+ private var descriptions = [ConstraintDescription]()
+
+ internal init(item: LayoutConstraintItem) {
+ self.item = item
+ self.item.prepare()
+ }
+
+ internal func makeExtendableWithAttributes(_ attributes: ConstraintAttributes) -> ConstraintMakerExtendable {
+ let description = ConstraintDescription(item: self.item, attributes: attributes)
+ self.descriptions.append(description)
+ return ConstraintMakerExtendable(description)
+ }
+
+ internal static func prepareConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] {
+ let maker = ConstraintMaker(item: item)
+ closure(maker)
+ var constraints: [Constraint] = []
+ for description in maker.descriptions {
+ guard let constraint = description.constraint else {
+ continue
+ }
+ constraints.append(constraint)
+ }
+ return constraints
+ }
+
+ internal static func makeConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) {
+ let constraints = prepareConstraints(item: item, closure: closure)
+ for constraint in constraints {
+ constraint.activateIfNeeded(updatingExisting: false)
+ }
+ }
+
+ internal static func remakeConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) {
+ self.removeConstraints(item: item)
+ self.makeConstraints(item: item, closure: closure)
+ }
+
+ internal static func updateConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) {
+ guard item.constraints.count > 0 else {
+ self.makeConstraints(item: item, closure: closure)
+ return
+ }
+
+ let constraints = prepareConstraints(item: item, closure: closure)
+ for constraint in constraints {
+ constraint.activateIfNeeded(updatingExisting: true)
+ }
+ }
+
+ internal static func removeConstraints(item: LayoutConstraintItem) {
+ let constraints = item.constraints
+ for constraint in constraints {
+ constraint.deactivateIfNeeded()
+ }
+ }
+
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+public class ConstraintMakerEditable: ConstraintMakerPrioritizable {
+
+ @discardableResult
+ public func multipliedBy(_ amount: ConstraintMultiplierTarget) -> ConstraintMakerEditable {
+ self.description.multiplier = amount
+ return self
+ }
+
+ @discardableResult
+ public func dividedBy(_ amount: ConstraintMultiplierTarget) -> ConstraintMakerEditable {
+ return self.multipliedBy(1.0 / amount.constraintMultiplierTargetValue)
+ }
+
+ @discardableResult
+ public func offset(_ amount: ConstraintOffsetTarget) -> ConstraintMakerEditable {
+ self.description.constant = amount.constraintOffsetTargetValue
+ return self
+ }
+
+ @discardableResult
+ public func inset(_ amount: ConstraintInsetTarget) -> ConstraintMakerEditable {
+ self.description.constant = amount.constraintInsetTargetValue
+ return self
+ }
+
+ #if canImport(UIKit)
+ @discardableResult
+ @available(iOS 11.0, tvOS 11.0, *)
+ public func inset(_ amount: ConstraintDirectionalInsetTarget) -> ConstraintMakerEditable {
+ self.description.constant = amount.constraintDirectionalInsetTargetValue
+ return self
+ }
+ #endif
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+public class ConstraintMakerExtendable: ConstraintMakerRelatable {
+
+ public var left: ConstraintMakerExtendable {
+ self.description.attributes += .left
+ return self
+ }
+
+ public var top: ConstraintMakerExtendable {
+ self.description.attributes += .top
+ return self
+ }
+
+ public var bottom: ConstraintMakerExtendable {
+ self.description.attributes += .bottom
+ return self
+ }
+
+ public var right: ConstraintMakerExtendable {
+ self.description.attributes += .right
+ return self
+ }
+
+ public var leading: ConstraintMakerExtendable {
+ self.description.attributes += .leading
+ return self
+ }
+
+ public var trailing: ConstraintMakerExtendable {
+ self.description.attributes += .trailing
+ return self
+ }
+
+ public var width: ConstraintMakerExtendable {
+ self.description.attributes += .width
+ return self
+ }
+
+ public var height: ConstraintMakerExtendable {
+ self.description.attributes += .height
+ return self
+ }
+
+ public var centerX: ConstraintMakerExtendable {
+ self.description.attributes += .centerX
+ return self
+ }
+
+ public var centerY: ConstraintMakerExtendable {
+ self.description.attributes += .centerY
+ return self
+ }
+
+ @available(*, deprecated, renamed:"lastBaseline")
+ public var baseline: ConstraintMakerExtendable {
+ self.description.attributes += .lastBaseline
+ return self
+ }
+
+ public var lastBaseline: ConstraintMakerExtendable {
+ self.description.attributes += .lastBaseline
+ return self
+ }
+
+ @available(iOS 8.0, OSX 10.11, *)
+ public var firstBaseline: ConstraintMakerExtendable {
+ self.description.attributes += .firstBaseline
+ return self
+ }
+
+ @available(iOS 8.0, *)
+ public var leftMargin: ConstraintMakerExtendable {
+ self.description.attributes += .leftMargin
+ return self
+ }
+
+ @available(iOS 8.0, *)
+ public var rightMargin: ConstraintMakerExtendable {
+ self.description.attributes += .rightMargin
+ return self
+ }
+
+ @available(iOS 8.0, *)
+ public var topMargin: ConstraintMakerExtendable {
+ self.description.attributes += .topMargin
+ return self
+ }
+
+ @available(iOS 8.0, *)
+ public var bottomMargin: ConstraintMakerExtendable {
+ self.description.attributes += .bottomMargin
+ return self
+ }
+
+ @available(iOS 8.0, *)
+ public var leadingMargin: ConstraintMakerExtendable {
+ self.description.attributes += .leadingMargin
+ return self
+ }
+
+ @available(iOS 8.0, *)
+ public var trailingMargin: ConstraintMakerExtendable {
+ self.description.attributes += .trailingMargin
+ return self
+ }
+
+ @available(iOS 8.0, *)
+ public var centerXWithinMargins: ConstraintMakerExtendable {
+ self.description.attributes += .centerXWithinMargins
+ return self
+ }
+
+ @available(iOS 8.0, *)
+ public var centerYWithinMargins: ConstraintMakerExtendable {
+ self.description.attributes += .centerYWithinMargins
+ return self
+ }
+
+ public var edges: ConstraintMakerExtendable {
+ self.description.attributes += .edges
+ return self
+ }
+ public var horizontalEdges: ConstraintMakerExtendable {
+ self.description.attributes += .horizontalEdges
+ return self
+ }
+ public var verticalEdges: ConstraintMakerExtendable {
+ self.description.attributes += .verticalEdges
+ return self
+ }
+ public var directionalEdges: ConstraintMakerExtendable {
+ self.description.attributes += .directionalEdges
+ return self
+ }
+ public var directionalHorizontalEdges: ConstraintMakerExtendable {
+ self.description.attributes += .directionalHorizontalEdges
+ return self
+ }
+ public var directionalVerticalEdges: ConstraintMakerExtendable {
+ self.description.attributes += .directionalVerticalEdges
+ return self
+ }
+ public var size: ConstraintMakerExtendable {
+ self.description.attributes += .size
+ return self
+ }
+
+ @available(iOS 8.0, *)
+ public var margins: ConstraintMakerExtendable {
+ self.description.attributes += .margins
+ return self
+ }
+
+ @available(iOS 8.0, *)
+ public var directionalMargins: ConstraintMakerExtendable {
+ self.description.attributes += .directionalMargins
+ return self
+ }
+
+ @available(iOS 8.0, *)
+ public var centerWithinMargins: ConstraintMakerExtendable {
+ self.description.attributes += .centerWithinMargins
+ return self
+ }
+
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+public class ConstraintMakerFinalizable {
+
+ internal let description: ConstraintDescription
+
+ internal init(_ description: ConstraintDescription) {
+ self.description = description
+ }
+
+ @discardableResult
+ public func labeled(_ label: String) -> ConstraintMakerFinalizable {
+ self.description.label = label
+ return self
+ }
+
+ public var constraint: Constraint {
+ return self.description.constraint!
+ }
+
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+@available(*, deprecated, message:"Use ConstraintMakerPrioritizable instead.")
+public typealias ConstraintMakerPriortizable = ConstraintMakerPrioritizable
+
+public class ConstraintMakerPrioritizable: ConstraintMakerFinalizable {
+
+ @discardableResult
+ public func priority(_ amount: ConstraintPriority) -> ConstraintMakerFinalizable {
+ self.description.priority = amount.value
+ return self
+ }
+
+ @discardableResult
+ public func priority(_ amount: ConstraintPriorityTarget) -> ConstraintMakerFinalizable {
+ self.description.priority = amount
+ return self
+ }
+
+ @available(*, deprecated, message:"Use priority(.required) instead.")
+ @discardableResult
+ public func priorityRequired() -> ConstraintMakerFinalizable {
+ return self.priority(.required)
+ }
+
+ @available(*, deprecated, message:"Use priority(.high) instead.")
+ @discardableResult
+ public func priorityHigh() -> ConstraintMakerFinalizable {
+ return self.priority(.high)
+ }
+
+ @available(*, deprecated, message:"Use priority(.medium) instead.")
+ @discardableResult
+ public func priorityMedium() -> ConstraintMakerFinalizable {
+ return self.priority(.medium)
+ }
+
+ @available(*, deprecated, message:"Use priority(.low) instead.")
+ @discardableResult
+ public func priorityLow() -> ConstraintMakerFinalizable {
+ return self.priority(.low)
+ }
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+extension ConstraintMakerRelatable {
+
+ @discardableResult
+ public func equalToSuperview<T: ConstraintRelatableTarget>(_ closure: (ConstraintView) -> T, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable {
+ guard let other = self.description.item.superview else {
+ fatalError("Expected superview but found nil when attempting make constraint `equalToSuperview`.")
+ }
+ return self.relatedTo(closure(other), relation: .equal, file: file, line: line)
+ }
+
+ @discardableResult
+ public func lessThanOrEqualToSuperview<T: ConstraintRelatableTarget>(_ closure: (ConstraintView) -> T, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable {
+ guard let other = self.description.item.superview else {
+ fatalError("Expected superview but found nil when attempting make constraint `lessThanOrEqualToSuperview`.")
+ }
+ return self.relatedTo(closure(other), relation: .lessThanOrEqual, file: file, line: line)
+ }
+
+ @discardableResult
+ public func greaterThanOrEqualToSuperview<T: ConstraintRelatableTarget>(_ closure: (ConstraintView) -> T, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable {
+ guard let other = self.description.item.superview else {
+ fatalError("Expected superview but found nil when attempting make constraint `greaterThanOrEqualToSuperview`.")
+ }
+ return self.relatedTo(closure(other), relation: .greaterThanOrEqual, file: file, line: line)
+ }
+
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+public class ConstraintMakerRelatable {
+
+ internal let description: ConstraintDescription
+
+ internal init(_ description: ConstraintDescription) {
+ self.description = description
+ }
+
+ internal func relatedTo(_ other: ConstraintRelatableTarget, relation: ConstraintRelation, file: String, line: UInt) -> ConstraintMakerEditable {
+ let related: ConstraintItem
+ let constant: ConstraintConstantTarget
+
+ if let other = other as? ConstraintItem {
+ guard other.attributes == ConstraintAttributes.none ||
+ other.attributes.layoutAttributes.count <= 1 ||
+ other.attributes.layoutAttributes == self.description.attributes.layoutAttributes ||
+ other.attributes == .edges && self.description.attributes == .margins ||
+ other.attributes == .margins && self.description.attributes == .edges ||
+ other.attributes == .directionalEdges && self.description.attributes == .directionalMargins ||
+ other.attributes == .directionalMargins && self.description.attributes == .directionalEdges else {
+ fatalError("Cannot constraint to multiple non identical attributes. (\(file), \(line))");
+ }
+
+ related = other
+ constant = 0.0
+ } else if let other = other as? ConstraintView {
+ related = ConstraintItem(target: other, attributes: ConstraintAttributes.none)
+ constant = 0.0
+ } else if let other = other as? ConstraintConstantTarget {
+ related = ConstraintItem(target: nil, attributes: ConstraintAttributes.none)
+ constant = other
+ } else if #available(iOS 9.0, OSX 10.11, *), let other = other as? ConstraintLayoutGuide {
+ related = ConstraintItem(target: other, attributes: ConstraintAttributes.none)
+ constant = 0.0
+ } else {
+ fatalError("Invalid constraint. (\(file), \(line))")
+ }
+
+ let editable = ConstraintMakerEditable(self.description)
+ editable.description.sourceLocation = (file, line)
+ editable.description.relation = relation
+ editable.description.related = related
+ editable.description.constant = constant
+ return editable
+ }
+
+ @discardableResult
+ public func equalTo(_ other: ConstraintRelatableTarget, _ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable {
+ return self.relatedTo(other, relation: .equal, file: file, line: line)
+ }
+
+ @discardableResult
+ public func equalToSuperview(_ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable {
+ guard let other = self.description.item.superview else {
+ fatalError("Expected superview but found nil when attempting make constraint `equalToSuperview`.")
+ }
+ return self.relatedTo(other, relation: .equal, file: file, line: line)
+ }
+
+ @discardableResult
+ public func lessThanOrEqualTo(_ other: ConstraintRelatableTarget, _ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable {
+ return self.relatedTo(other, relation: .lessThanOrEqual, file: file, line: line)
+ }
+
+ @discardableResult
+ public func lessThanOrEqualToSuperview(_ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable {
+ guard let other = self.description.item.superview else {
+ fatalError("Expected superview but found nil when attempting make constraint `lessThanOrEqualToSuperview`.")
+ }
+ return self.relatedTo(other, relation: .lessThanOrEqual, file: file, line: line)
+ }
+
+ @discardableResult
+ public func greaterThanOrEqualTo(_ other: ConstraintRelatableTarget, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable {
+ return self.relatedTo(other, relation: .greaterThanOrEqual, file: file, line: line)
+ }
+
+ @discardableResult
+ public func greaterThanOrEqualToSuperview(_ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable {
+ guard let other = self.description.item.superview else {
+ fatalError("Expected superview but found nil when attempting make constraint `greaterThanOrEqualToSuperview`.")
+ }
+ return self.relatedTo(other, relation: .greaterThanOrEqual, file: file, line: line)
+ }
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+public protocol ConstraintMultiplierTarget {
+
+ var constraintMultiplierTargetValue: CGFloat { get }
+
+}
+
+extension Int: ConstraintMultiplierTarget {
+
+ public var constraintMultiplierTargetValue: CGFloat {
+ return CGFloat(self)
+ }
+
+}
+
+extension UInt: ConstraintMultiplierTarget {
+
+ public var constraintMultiplierTargetValue: CGFloat {
+ return CGFloat(self)
+ }
+
+}
+
+extension Float: ConstraintMultiplierTarget {
+
+ public var constraintMultiplierTargetValue: CGFloat {
+ return CGFloat(self)
+ }
+
+}
+
+extension Double: ConstraintMultiplierTarget {
+
+ public var constraintMultiplierTargetValue: CGFloat {
+ return CGFloat(self)
+ }
+
+}
+
+extension CGFloat: ConstraintMultiplierTarget {
+
+ public var constraintMultiplierTargetValue: CGFloat {
+ return self
+ }
+
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+public protocol ConstraintOffsetTarget: ConstraintConstantTarget {
+}
+
+extension Int: ConstraintOffsetTarget {
+}
+
+extension UInt: ConstraintOffsetTarget {
+}
+
+extension Float: ConstraintOffsetTarget {
+}
+
+extension Double: ConstraintOffsetTarget {
+}
+
+extension CGFloat: ConstraintOffsetTarget {
+}
+
+extension ConstraintOffsetTarget {
+
+ internal var constraintOffsetTargetValue: CGFloat {
+ let offset: CGFloat
+ if let amount = self as? Float {
+ offset = CGFloat(amount)
+ } else if let amount = self as? Double {
+ offset = CGFloat(amount)
+ } else if let amount = self as? CGFloat {
+ offset = CGFloat(amount)
+ } else if let amount = self as? Int {
+ offset = CGFloat(amount)
+ } else if let amount = self as? UInt {
+ offset = CGFloat(amount)
+ } else {
+ offset = 0.0
+ }
+ return offset
+ }
+
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+public struct ConstraintPriority : ExpressibleByFloatLiteral, Equatable, Strideable {
+ public typealias FloatLiteralType = Float
+
+ public let value: Float
+
+ public init(floatLiteral value: Float) {
+ self.value = value
+ }
+
+ public init(_ value: Float) {
+ self.value = value
+ }
+
+ public static var required: ConstraintPriority {
+ return 1000.0
+ }
+
+ public static var high: ConstraintPriority {
+ return 750.0
+ }
+
+ public static var medium: ConstraintPriority {
+ #if os(OSX)
+ return 501.0
+ #else
+ return 500.0
+ #endif
+
+ }
+
+ public static var low: ConstraintPriority {
+ return 250.0
+ }
+
+ public static func ==(lhs: ConstraintPriority, rhs: ConstraintPriority) -> Bool {
+ return lhs.value == rhs.value
+ }
+
+ // MARK: Strideable
+
+ public func advanced(by n: FloatLiteralType) -> ConstraintPriority {
+ return ConstraintPriority(floatLiteral: value + n)
+ }
+
+ public func distance(to other: ConstraintPriority) -> FloatLiteralType {
+ return other.value - value
+ }
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+public protocol ConstraintPriorityTarget {
+
+ var constraintPriorityTargetValue: Float { get }
+
+}
+
+extension Int: ConstraintPriorityTarget {
+
+ public var constraintPriorityTargetValue: Float {
+ return Float(self)
+ }
+
+}
+
+extension UInt: ConstraintPriorityTarget {
+
+ public var constraintPriorityTargetValue: Float {
+ return Float(self)
+ }
+
+}
+
+extension Float: ConstraintPriorityTarget {
+
+ public var constraintPriorityTargetValue: Float {
+ return self
+ }
+
+}
+
+extension Double: ConstraintPriorityTarget {
+
+ public var constraintPriorityTargetValue: Float {
+ return Float(self)
+ }
+
+}
+
+extension CGFloat: ConstraintPriorityTarget {
+
+ public var constraintPriorityTargetValue: Float {
+ return Float(self)
+ }
+
+}
+
+#if canImport(UIKit)
+extension UILayoutPriority: ConstraintPriorityTarget {
+
+ public var constraintPriorityTargetValue: Float {
+ return self.rawValue
+ }
+
+}
+#endif
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+public protocol ConstraintRelatableTarget {
+}
+
+extension Int: ConstraintRelatableTarget {
+}
+
+extension UInt: ConstraintRelatableTarget {
+}
+
+extension Float: ConstraintRelatableTarget {
+}
+
+extension Double: ConstraintRelatableTarget {
+}
+
+extension CGFloat: ConstraintRelatableTarget {
+}
+
+extension CGSize: ConstraintRelatableTarget {
+}
+
+extension CGPoint: ConstraintRelatableTarget {
+}
+
+extension ConstraintInsets: ConstraintRelatableTarget {
+}
+
+#if canImport(UIKit)
+@available(iOS 11.0, tvOS 11.0, *)
+extension ConstraintDirectionalInsets: ConstraintRelatableTarget {
+}
+#endif
+
+extension ConstraintItem: ConstraintRelatableTarget {
+}
+
+extension ConstraintView: ConstraintRelatableTarget {
+}
+
+@available(iOS 9.0, OSX 10.11, *)
+extension ConstraintLayoutGuide: ConstraintRelatableTarget {
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+internal enum ConstraintRelation : Int {
+ case equal = 1
+ case lessThanOrEqual
+ case greaterThanOrEqual
+
+ internal var layoutRelation: LayoutRelation {
+ get {
+ switch(self) {
+ case .equal:
+ return .equal
+ case .lessThanOrEqual:
+ return .lessThanOrEqual
+ case .greaterThanOrEqual:
+ return .greaterThanOrEqual
+ }
+ }
+ }
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+public extension ConstraintView {
+
+ @available(*, deprecated, renamed:"snp.left")
+ var snp_left: ConstraintItem { return self.snp.left }
+
+ @available(*, deprecated, renamed:"snp.top")
+ var snp_top: ConstraintItem { return self.snp.top }
+
+ @available(*, deprecated, renamed:"snp.right")
+ var snp_right: ConstraintItem { return self.snp.right }
+
+ @available(*, deprecated, renamed:"snp.bottom")
+ var snp_bottom: ConstraintItem { return self.snp.bottom }
+
+ @available(*, deprecated, renamed:"snp.leading")
+ var snp_leading: ConstraintItem { return self.snp.leading }
+
+ @available(*, deprecated, renamed:"snp.trailing")
+ var snp_trailing: ConstraintItem { return self.snp.trailing }
+
+ @available(*, deprecated, renamed:"snp.width")
+ var snp_width: ConstraintItem { return self.snp.width }
+
+ @available(*, deprecated, renamed:"snp.height")
+ var snp_height: ConstraintItem { return self.snp.height }
+
+ @available(*, deprecated, renamed:"snp.centerX")
+ var snp_centerX: ConstraintItem { return self.snp.centerX }
+
+ @available(*, deprecated, renamed:"snp.centerY")
+ var snp_centerY: ConstraintItem { return self.snp.centerY }
+
+ @available(*, deprecated, renamed:"snp.baseline")
+ var snp_baseline: ConstraintItem { return self.snp.baseline }
+
+ @available(*, deprecated, renamed:"snp.lastBaseline")
+ @available(iOS 8.0, OSX 10.11, *)
+ var snp_lastBaseline: ConstraintItem { return self.snp.lastBaseline }
+
+ @available(iOS, deprecated, renamed:"snp.firstBaseline")
+ @available(iOS 8.0, OSX 10.11, *)
+ var snp_firstBaseline: ConstraintItem { return self.snp.firstBaseline }
+
+ @available(iOS, deprecated, renamed:"snp.leftMargin")
+ @available(iOS 8.0, *)
+ var snp_leftMargin: ConstraintItem { return self.snp.leftMargin }
+
+ @available(iOS, deprecated, renamed:"snp.topMargin")
+ @available(iOS 8.0, *)
+ var snp_topMargin: ConstraintItem { return self.snp.topMargin }
+
+ @available(iOS, deprecated, renamed:"snp.rightMargin")
+ @available(iOS 8.0, *)
+ var snp_rightMargin: ConstraintItem { return self.snp.rightMargin }
+
+ @available(iOS, deprecated, renamed:"snp.bottomMargin")
+ @available(iOS 8.0, *)
+ var snp_bottomMargin: ConstraintItem { return self.snp.bottomMargin }
+
+ @available(iOS, deprecated, renamed:"snp.leadingMargin")
+ @available(iOS 8.0, *)
+ var snp_leadingMargin: ConstraintItem { return self.snp.leadingMargin }
+
+ @available(iOS, deprecated, renamed:"snp.trailingMargin")
+ @available(iOS 8.0, *)
+ var snp_trailingMargin: ConstraintItem { return self.snp.trailingMargin }
+
+ @available(iOS, deprecated, renamed:"snp.centerXWithinMargins")
+ @available(iOS 8.0, *)
+ var snp_centerXWithinMargins: ConstraintItem { return self.snp.centerXWithinMargins }
+
+ @available(iOS, deprecated, renamed:"snp.centerYWithinMargins")
+ @available(iOS 8.0, *)
+ var snp_centerYWithinMargins: ConstraintItem { return self.snp.centerYWithinMargins }
+
+ @available(*, deprecated, renamed:"snp.edges")
+ var snp_edges: ConstraintItem { return self.snp.edges }
+
+ @available(*, deprecated, renamed:"snp.size")
+ var snp_size: ConstraintItem { return self.snp.size }
+
+ @available(*, deprecated, renamed:"snp.center")
+ var snp_center: ConstraintItem { return self.snp.center }
+
+ @available(iOS, deprecated, renamed:"snp.margins")
+ @available(iOS 8.0, *)
+ var snp_margins: ConstraintItem { return self.snp.margins }
+
+ @available(iOS, deprecated, renamed:"snp.centerWithinMargins")
+ @available(iOS 8.0, *)
+ var snp_centerWithinMargins: ConstraintItem { return self.snp.centerWithinMargins }
+
+ @available(*, deprecated, renamed:"snp.prepareConstraints(_:)")
+ func snp_prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] {
+ return self.snp.prepareConstraints(closure)
+ }
+
+ @available(*, deprecated, renamed:"snp.makeConstraints(_:)")
+ func snp_makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
+ self.snp.makeConstraints(closure)
+ }
+
+ @available(*, deprecated, renamed:"snp.remakeConstraints(_:)")
+ func snp_remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
+ self.snp.remakeConstraints(closure)
+ }
+
+ @available(*, deprecated, renamed:"snp.updateConstraints(_:)")
+ func snp_updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
+ self.snp.updateConstraints(closure)
+ }
+
+ @available(*, deprecated, renamed:"snp.removeConstraints()")
+ func snp_removeConstraints() {
+ self.snp.removeConstraints()
+ }
+
+ var snp: ConstraintViewDSL {
+ return ConstraintViewDSL(view: self)
+ }
+
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+#if canImport(UIKit)
+ public typealias ConstraintView = UIView
+#else
+ public typealias ConstraintView = NSView
+#endif
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+public struct ConstraintViewDSL: ConstraintAttributesDSL {
+
+ @discardableResult
+ public func prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] {
+ return ConstraintMaker.prepareConstraints(item: self.view, closure: closure)
+ }
+
+ public func makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
+ ConstraintMaker.makeConstraints(item: self.view, closure: closure)
+ }
+
+ public func remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
+ ConstraintMaker.remakeConstraints(item: self.view, closure: closure)
+ }
+
+ public func updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
+ ConstraintMaker.updateConstraints(item: self.view, closure: closure)
+ }
+
+ public func removeConstraints() {
+ ConstraintMaker.removeConstraints(item: self.view)
+ }
+
+ public var contentHuggingHorizontalPriority: Float {
+ get {
+ return self.view.contentHuggingPriority(for: .horizontal).rawValue
+ }
+ nonmutating set {
+ self.view.setContentHuggingPriority(LayoutPriority(rawValue: newValue), for: .horizontal)
+ }
+ }
+
+ public var contentHuggingVerticalPriority: Float {
+ get {
+ return self.view.contentHuggingPriority(for: .vertical).rawValue
+ }
+ nonmutating set {
+ self.view.setContentHuggingPriority(LayoutPriority(rawValue: newValue), for: .vertical)
+ }
+ }
+
+ public var contentCompressionResistanceHorizontalPriority: Float {
+ get {
+ return self.view.contentCompressionResistancePriority(for: .horizontal).rawValue
+ }
+ nonmutating set {
+ self.view.setContentCompressionResistancePriority(LayoutPriority(rawValue: newValue), for: .horizontal)
+ }
+ }
+
+ public var contentCompressionResistanceVerticalPriority: Float {
+ get {
+ return self.view.contentCompressionResistancePriority(for: .vertical).rawValue
+ }
+ nonmutating set {
+ self.view.setContentCompressionResistancePriority(LayoutPriority(rawValue: newValue), for: .vertical)
+ }
+ }
+
+ public var target: AnyObject? {
+ return self.view
+ }
+
+ internal let view: ConstraintView
+
+ internal init(view: ConstraintView) {
+ self.view = view
+
+ }
+
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+public extension LayoutConstraint {
+
+ override var description: String {
+ var description = "<"
+
+ description += descriptionForObject(self)
+
+ if let firstItem = conditionalOptional(from: self.firstItem) {
+ description += " \(descriptionForObject(firstItem))"
+ }
+
+ if self.firstAttribute != .notAnAttribute {
+ description += ".\(descriptionForAttribute(self.firstAttribute))"
+ }
+
+ description += " \(descriptionForRelation(self.relation))"
+
+ if let secondItem = self.secondItem {
+ description += " \(descriptionForObject(secondItem))"
+ }
+
+ if self.secondAttribute != .notAnAttribute {
+ description += ".\(descriptionForAttribute(self.secondAttribute))"
+ }
+
+ if self.multiplier != 1.0 {
+ description += " * \(self.multiplier)"
+ }
+
+ if self.secondAttribute == .notAnAttribute {
+ description += " \(self.constant)"
+ } else {
+ if self.constant > 0.0 {
+ description += " + \(self.constant)"
+ } else if self.constant < 0.0 {
+ description += " - \(abs(self.constant))"
+ }
+ }
+
+ if self.priority.rawValue != 1000.0 {
+ description += " ^\(self.priority)"
+ }
+
+ description += ">"
+
+ return description
+ }
+
+}
+
+private func descriptionForRelation(_ relation: LayoutRelation) -> String {
+ switch relation {
+ case .equal: return "=="
+ case .greaterThanOrEqual: return ">="
+ case .lessThanOrEqual: return "<="
+ #if swift(>=5.0)
+ @unknown default: return "unknown"
+ #endif
+ }
+}
+
+private func descriptionForAttribute(_ attribute: LayoutAttribute) -> String {
+ #if canImport(UIKit)
+ switch attribute {
+ case .notAnAttribute: return "notAnAttribute"
+ case .top: return "top"
+ case .left: return "left"
+ case .bottom: return "bottom"
+ case .right: return "right"
+ case .leading: return "leading"
+ case .trailing: return "trailing"
+ case .width: return "width"
+ case .height: return "height"
+ case .centerX: return "centerX"
+ case .centerY: return "centerY"
+ case .lastBaseline: return "lastBaseline"
+ case .firstBaseline: return "firstBaseline"
+ case .topMargin: return "topMargin"
+ case .leftMargin: return "leftMargin"
+ case .bottomMargin: return "bottomMargin"
+ case .rightMargin: return "rightMargin"
+ case .leadingMargin: return "leadingMargin"
+ case .trailingMargin: return "trailingMargin"
+ case .centerXWithinMargins: return "centerXWithinMargins"
+ case .centerYWithinMargins: return "centerYWithinMargins"
+ #if swift(>=5.0)
+ @unknown default: return "unknown"
+ #endif
+ }
+ #else
+ switch attribute {
+ case .notAnAttribute: return "notAnAttribute"
+ case .top: return "top"
+ case .left: return "left"
+ case .bottom: return "bottom"
+ case .right: return "right"
+ case .leading: return "leading"
+ case .trailing: return "trailing"
+ case .width: return "width"
+ case .height: return "height"
+ case .centerX: return "centerX"
+ case .centerY: return "centerY"
+ case .lastBaseline: return "lastBaseline"
+ case .firstBaseline: return "firstBaseline"
+ #if swift(>=5.0)
+ @unknown default: return "unknown"
+ #endif
+ }
+ #endif
+}
+
+private func conditionalOptional<T>(from object: Optional<T>) -> Optional<T> {
+ return object
+}
+
+private func conditionalOptional<T>(from object: T) -> Optional<T> {
+ return Optional.some(object)
+}
+
+private func descriptionForObject(_ object: AnyObject) -> String {
+ let pointerDescription = String(format: "%p", UInt(bitPattern: ObjectIdentifier(object)))
+ var desc = ""
+
+ desc += type(of: object).description()
+
+ if let object = object as? ConstraintView {
+ desc += ":\(object.snp.label() ?? pointerDescription)"
+ } else if let object = object as? LayoutConstraint {
+ desc += ":\(object.label ?? pointerDescription)"
+ } else {
+ desc += ":\(pointerDescription)"
+ }
+
+ if let object = object as? LayoutConstraint, let file = object.constraint?.sourceLocation.0, let line = object.constraint?.sourceLocation.1 {
+ desc += "@\((file as NSString).lastPathComponent)#\(line)"
+ }
+
+ desc += ""
+ return desc
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+public class LayoutConstraint : NSLayoutConstraint {
+
+ public var label: String? {
+ get {
+ return self.identifier
+ }
+ set {
+ self.identifier = newValue
+ }
+ }
+
+ internal weak var constraint: Constraint? = nil
+
+}
+
+internal func ==(lhs: LayoutConstraint, rhs: LayoutConstraint) -> Bool {
+ // If firstItem or secondItem on either constraint has a dangling pointer
+ // this comparison can cause a crash. The solution for this is to ensure
+ // your layout code hold strong references to things like Views, LayoutGuides
+ // and LayoutAnchors as SnapKit will not keep strong references to any of these.
+ guard lhs.firstAttribute == rhs.firstAttribute &&
+ lhs.secondAttribute == rhs.secondAttribute &&
+ lhs.relation == rhs.relation &&
+ lhs.priority == rhs.priority &&
+ lhs.multiplier == rhs.multiplier &&
+ lhs.secondItem === rhs.secondItem &&
+ lhs.firstItem === rhs.firstItem else {
+ return false
+ }
+ return true
+}
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#else
+ import AppKit
+#endif
+
+
+public protocol LayoutConstraintItem: AnyObject {
+}
+
+@available(iOS 9.0, OSX 10.11, *)
+extension ConstraintLayoutGuide : LayoutConstraintItem {
+}
+
+extension ConstraintView : LayoutConstraintItem {
+}
+
+
+extension LayoutConstraintItem {
+
+ internal func prepare() {
+ if let view = self as? ConstraintView {
+ view.translatesAutoresizingMaskIntoConstraints = false
+ }
+ }
+
+ internal var superview: ConstraintView? {
+ if let view = self as? ConstraintView {
+ return view.superview
+ }
+
+ if #available(iOS 9.0, OSX 10.11, *), let guide = self as? ConstraintLayoutGuide {
+ return guide.owningView
+ }
+
+ return nil
+ }
+ internal var constraints: [Constraint] {
+ return self.constraintsSet.allObjects as! [Constraint]
+ }
+
+ internal func add(constraints: [Constraint]) {
+ let constraintsSet = self.constraintsSet
+ for constraint in constraints {
+ constraintsSet.add(constraint)
+ }
+ }
+
+ internal func remove(constraints: [Constraint]) {
+ let constraintsSet = self.constraintsSet
+ for constraint in constraints {
+ constraintsSet.remove(constraint)
+ }
+ }
+
+ private var constraintsSet: NSMutableSet {
+ let constraintsSet: NSMutableSet
+
+ if let existing = objc_getAssociatedObject(self, &constraintsKey) as? NSMutableSet {
+ constraintsSet = existing
+ } else {
+ constraintsSet = NSMutableSet()
+ objc_setAssociatedObject(self, &constraintsKey, constraintsSet, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
+ }
+ return constraintsSet
+
+ }
+
+}
+private var constraintsKey: UInt8 = 0
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>NSPrivacyTracking</key>
+ <false/>
+ <key>NSPrivacyAccessedAPITypes</key>
+ <array/>
+ <key>NSPrivacyCollectedDataTypes</key>
+ <array/>
+ <key>NSPrivacyTrackingDomains</key>
+ <array/>
+</dict>
+</plist>
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+import Foundation
+
+#if canImport(UIKit)
+ import UIKit
+#if swift(>=4.2)
+ typealias LayoutRelation = NSLayoutConstraint.Relation
+ typealias LayoutAttribute = NSLayoutConstraint.Attribute
+#else
+ typealias LayoutRelation = NSLayoutRelation
+ typealias LayoutAttribute = NSLayoutAttribute
+#endif
+ typealias LayoutPriority = UILayoutPriority
+#else
+ import AppKit
+ typealias LayoutRelation = NSLayoutConstraint.Relation
+ typealias LayoutAttribute = NSLayoutConstraint.Attribute
+ typealias LayoutPriority = NSLayoutConstraint.Priority
+#endif
+
--- /dev/null
+//
+// SnapKit
+//
+// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if canImport(UIKit)
+ import UIKit
+#endif
+
+
+@available(iOS 8.0, *)
+public extension ConstraintLayoutSupport {
+
+ var snp: ConstraintLayoutSupportDSL {
+ return ConstraintLayoutSupportDSL(support: self)
+ }
+
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIdentifier</key>
+ <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundlePackageType</key>
+ <string>FMWK</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0.0</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>${CURRENT_PROJECT_VERSION}</string>
+ <key>NSPrincipalClass</key>
+ <string></string>
+</dict>
+</plist>
--- /dev/null
+# Acknowledgements
+This application makes use of the following third party libraries:
+
+## SnapKit
+
+Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+## Toast-Swift
+
+Copyright (c) 2015-2024 Charles Scalesse.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Generated by CocoaPods - https://cocoapods.org
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>PreferenceSpecifiers</key>
+ <array>
+ <dict>
+ <key>FooterText</key>
+ <string>This application makes use of the following third party libraries:</string>
+ <key>Title</key>
+ <string>Acknowledgements</string>
+ <key>Type</key>
+ <string>PSGroupSpecifier</string>
+ </dict>
+ <dict>
+ <key>FooterText</key>
+ <string>Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+</string>
+ <key>License</key>
+ <string>MIT</string>
+ <key>Title</key>
+ <string>SnapKit</string>
+ <key>Type</key>
+ <string>PSGroupSpecifier</string>
+ </dict>
+ <dict>
+ <key>FooterText</key>
+ <string>Copyright (c) 2015-2024 Charles Scalesse.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+</string>
+ <key>License</key>
+ <string>MIT</string>
+ <key>Title</key>
+ <string>Toast-Swift</string>
+ <key>Type</key>
+ <string>PSGroupSpecifier</string>
+ </dict>
+ <dict>
+ <key>FooterText</key>
+ <string>Generated by CocoaPods - https://cocoapods.org</string>
+ <key>Title</key>
+ <string></string>
+ <key>Type</key>
+ <string>PSGroupSpecifier</string>
+ </dict>
+ </array>
+ <key>StringsTable</key>
+ <string>Acknowledgements</string>
+ <key>Title</key>
+ <string>Acknowledgements</string>
+</dict>
+</plist>
--- /dev/null
+#import <Foundation/Foundation.h>
+@interface PodsDummy_Pods_Example : NSObject
+@end
+@implementation PodsDummy_Pods_Example
+@end
--- /dev/null
+${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks.sh
+${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework
+${BUILT_PRODUCTS_DIR}/Toast-Swift/Toast_Swift.framework
\ No newline at end of file
--- /dev/null
+${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework
+${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Toast_Swift.framework
\ No newline at end of file
--- /dev/null
+${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks.sh
+${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework
+${BUILT_PRODUCTS_DIR}/Toast-Swift/Toast_Swift.framework
\ No newline at end of file
--- /dev/null
+${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework
+${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Toast_Swift.framework
\ No newline at end of file
--- /dev/null
+#!/bin/sh
+set -e
+set -u
+set -o pipefail
+
+function on_error {
+ echo "$(realpath -mq "${0}"):$1: error: Unexpected failure"
+}
+trap 'on_error $LINENO' ERR
+
+if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then
+ # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy
+ # frameworks to, so exit 0 (signalling the script phase was successful).
+ exit 0
+fi
+
+echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
+mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
+
+COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}"
+SWIFT_STDLIB_PATH="${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}"
+BCSYMBOLMAP_DIR="BCSymbolMaps"
+
+
+# This protects against multiple targets copying the same framework dependency at the same time. The solution
+# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
+RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
+
+# Copies and strips a vendored framework
+install_framework()
+{
+ if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then
+ local source="${BUILT_PRODUCTS_DIR}/$1"
+ elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then
+ local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")"
+ elif [ -r "$1" ]; then
+ local source="$1"
+ fi
+
+ local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
+
+ if [ -L "${source}" ]; then
+ echo "Symlinked..."
+ source="$(readlink -f "${source}")"
+ fi
+
+ if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then
+ # Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied
+ find "${source}/${BCSYMBOLMAP_DIR}" -name "*.bcsymbolmap"|while read f; do
+ echo "Installing $f"
+ install_bcsymbolmap "$f" "$destination"
+ rm "$f"
+ done
+ rmdir "${source}/${BCSYMBOLMAP_DIR}"
+ fi
+
+ # Use filter instead of exclude so missing patterns don't throw errors.
+ echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\""
+ rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}"
+
+ local basename
+ basename="$(basename -s .framework "$1")"
+ binary="${destination}/${basename}.framework/${basename}"
+
+ if ! [ -r "$binary" ]; then
+ binary="${destination}/${basename}"
+ elif [ -L "${binary}" ]; then
+ echo "Destination binary is symlinked..."
+ dirname="$(dirname "${binary}")"
+ binary="${dirname}/$(readlink "${binary}")"
+ fi
+
+ # Strip invalid architectures so "fat" simulator / device frameworks work on device
+ if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then
+ strip_invalid_archs "$binary"
+ fi
+
+ # Resign the code if required by the build settings to avoid unstable apps
+ code_sign_if_enabled "${destination}/$(basename "$1")"
+
+ # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
+ if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then
+ local swift_runtime_libs
+ swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u)
+ for lib in $swift_runtime_libs; do
+ echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
+ rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
+ code_sign_if_enabled "${destination}/${lib}"
+ done
+ fi
+}
+# Copies and strips a vendored dSYM
+install_dsym() {
+ local source="$1"
+ warn_missing_arch=${2:-true}
+ if [ -r "$source" ]; then
+ # Copy the dSYM into the targets temp dir.
+ echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\""
+ rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}"
+
+ local basename
+ basename="$(basename -s .dSYM "$source")"
+ binary_name="$(ls "$source/Contents/Resources/DWARF")"
+ binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}"
+
+ # Strip invalid architectures from the dSYM.
+ if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then
+ strip_invalid_archs "$binary" "$warn_missing_arch"
+ fi
+ if [[ $STRIP_BINARY_RETVAL == 0 ]]; then
+ # Move the stripped file into its final destination.
+ echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\""
+ rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}"
+ else
+ # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing.
+ mkdir -p "${DWARF_DSYM_FOLDER_PATH}"
+ touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM"
+ fi
+ fi
+}
+
+# Used as a return value for each invocation of `strip_invalid_archs` function.
+STRIP_BINARY_RETVAL=0
+
+# Strip invalid architectures
+strip_invalid_archs() {
+ binary="$1"
+ warn_missing_arch=${2:-true}
+ # Get architectures for current target binary
+ binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)"
+ # Intersect them with the architectures we are building for
+ intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)"
+ # If there are no archs supported by this binary then warn the user
+ if [[ -z "$intersected_archs" ]]; then
+ if [[ "$warn_missing_arch" == "true" ]]; then
+ echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)."
+ fi
+ STRIP_BINARY_RETVAL=1
+ return
+ fi
+ stripped=""
+ for arch in $binary_archs; do
+ if ! [[ "${ARCHS}" == *"$arch"* ]]; then
+ # Strip non-valid architectures in-place
+ lipo -remove "$arch" -output "$binary" "$binary"
+ stripped="$stripped $arch"
+ fi
+ done
+ if [[ "$stripped" ]]; then
+ echo "Stripped $binary of architectures:$stripped"
+ fi
+ STRIP_BINARY_RETVAL=0
+}
+
+# Copies the bcsymbolmap files of a vendored framework
+install_bcsymbolmap() {
+ local bcsymbolmap_path="$1"
+ local destination="${BUILT_PRODUCTS_DIR}"
+ echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}""
+ rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"
+}
+
+# Signs a framework with the provided identity
+code_sign_if_enabled() {
+ if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then
+ # Use the current code_sign_identity
+ echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
+ local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'"
+
+ if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
+ code_sign_cmd="$code_sign_cmd &"
+ fi
+ echo "$code_sign_cmd"
+ eval "$code_sign_cmd"
+ fi
+}
+
+if [[ "$CONFIGURATION" == "Debug" ]]; then
+ install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework"
+ install_framework "${BUILT_PRODUCTS_DIR}/Toast-Swift/Toast_Swift.framework"
+fi
+if [[ "$CONFIGURATION" == "Release" ]]; then
+ install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework"
+ install_framework "${BUILT_PRODUCTS_DIR}/Toast-Swift/Toast_Swift.framework"
+fi
+if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
+ wait
+fi
--- /dev/null
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+
+
+FOUNDATION_EXPORT double Pods_ExampleVersionNumber;
+FOUNDATION_EXPORT const unsigned char Pods_ExampleVersionString[];
+
--- /dev/null
+ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift"
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift/Toast_Swift.framework/Headers"
+LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
+LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
+OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -framework "QuartzCore" -framework "SnapKit" -framework "Toast_Swift"
+OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift"
+OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_PODFILE_DIR_PATH = ${SRCROOT}/..
+PODS_ROOT = ${SRCROOT}/../Pods
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
--- /dev/null
+framework module Pods_Example {
+ umbrella header "Pods-Example-umbrella.h"
+
+ export *
+ module * { export * }
+}
--- /dev/null
+ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift"
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift/Toast_Swift.framework/Headers"
+LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
+LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
+OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -framework "QuartzCore" -framework "SnapKit" -framework "Toast_Swift"
+OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift"
+OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_PODFILE_DIR_PATH = ${SRCROOT}/..
+PODS_ROOT = ${SRCROOT}/../Pods
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
+ <key>CFBundleIdentifier</key>
+ <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundlePackageType</key>
+ <string>BNDL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>5.7.1</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1</string>
+ <key>NSPrincipalClass</key>
+ <string></string>
+</dict>
+</plist>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIdentifier</key>
+ <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundlePackageType</key>
+ <string>FMWK</string>
+ <key>CFBundleShortVersionString</key>
+ <string>5.7.1</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>${CURRENT_PROJECT_VERSION}</string>
+ <key>NSPrincipalClass</key>
+ <string></string>
+</dict>
+</plist>
--- /dev/null
+#import <Foundation/Foundation.h>
+@interface PodsDummy_SnapKit : NSObject
+@end
+@implementation PodsDummy_SnapKit
+@end
--- /dev/null
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+
--- /dev/null
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+
+
+FOUNDATION_EXPORT double SnapKitVersionNumber;
+FOUNDATION_EXPORT const unsigned char SnapKitVersionString[];
+
--- /dev/null
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
+OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics"
+OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
--- /dev/null
+framework module SnapKit {
+ umbrella header "SnapKit-umbrella.h"
+
+ export *
+ module * { export * }
+}
--- /dev/null
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
+OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics"
+OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
+ <key>CFBundleIdentifier</key>
+ <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundlePackageType</key>
+ <string>BNDL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>5.1.1</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1</string>
+ <key>NSPrincipalClass</key>
+ <string></string>
+</dict>
+</plist>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIdentifier</key>
+ <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundlePackageType</key>
+ <string>FMWK</string>
+ <key>CFBundleShortVersionString</key>
+ <string>5.1.1</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>${CURRENT_PROJECT_VERSION}</string>
+ <key>NSPrincipalClass</key>
+ <string></string>
+</dict>
+</plist>
--- /dev/null
+#import <Foundation/Foundation.h>
+@interface PodsDummy_Toast_Swift : NSObject
+@end
+@implementation PodsDummy_Toast_Swift
+@end
--- /dev/null
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+
--- /dev/null
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+
+
+FOUNDATION_EXPORT double Toast_SwiftVersionNumber;
+FOUNDATION_EXPORT const unsigned char Toast_SwiftVersionString[];
+
--- /dev/null
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
+OTHER_LDFLAGS = $(inherited) -framework "QuartzCore"
+OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/Toast-Swift
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
--- /dev/null
+framework module Toast_Swift {
+ umbrella header "Toast-Swift-umbrella.h"
+
+ export *
+ module * { export * }
+}
--- /dev/null
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
+OTHER_LDFLAGS = $(inherited) -framework "QuartzCore"
+OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/Toast-Swift
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
--- /dev/null
+Copyright (c) 2015-2024 Charles Scalesse.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--- /dev/null
+Toast-Swift
+=============
+
+[](http://cocoadocs.org/docsets/Toast-Swift)
+[](https://github.com/Carthage/Carthage)
+
+Toast-Swift is a Swift extension that adds toast notifications to the `UIView` object class. It is intended to be simple, lightweight, and easy to use. Most toast notifications can be triggered with a single line of code.
+
+**Toast-Swift is a native Swift port of [Toast for iOS](https://github.com/scalessec/Toast "Toast for iOS").**
+
+Screenshots
+---------
+
+
+
+Basic Examples
+---------
+```swift
+// basic usage
+self.view.makeToast("This is a piece of toast")
+
+// toast with a specific duration and position
+self.view.makeToast("This is a piece of toast", duration: 3.0, position: .top)
+
+// toast presented with multiple options and with a completion closure
+self.view.makeToast("This is a piece of toast", duration: 2.0, point: CGPoint(x: 110.0, y: 110.0), title: "Toast Title", image: UIImage(named: "toast.png")) { didTap in
+ if didTap {
+ print("completion from tap")
+ } else {
+ print("completion without tap")
+ }
+}
+
+// display toast with an activity spinner
+self.view.makeToastActivity(.center)
+
+// display any view as toast
+self.view.showToast(myView)
+
+// immediately hides all toast views in self.view
+self.view.hideAllToasts()
+```
+
+But wait, there's more!
+---------
+```swift
+// create a new style
+var style = ToastStyle()
+
+// this is just one of many style options
+style.messageColor = .blue
+
+// present the toast with the new style
+self.view.makeToast("This is a piece of toast", duration: 3.0, position: .bottom, style: style)
+
+// or perhaps you want to use this style for all toasts going forward?
+// just set the shared style and there's no need to provide the style again
+ToastManager.shared.style = style
+self.view.makeToast("This is a piece of toast") // now uses the shared style
+
+// toggle "tap to dismiss" functionality
+ToastManager.shared.isTapToDismissEnabled = true
+
+// toggle queueing behavior
+ToastManager.shared.isQueueEnabled = true
+```
+
+See the demo project for more examples.
+
+
+Setup Instructions
+------------------
+
+[CocoaPods](http://cocoapods.org)
+------------------
+
+To integrate Toast-Swift into your Xcode project using CocoaPods, specify it in your `Podfile`:
+
+```ruby
+pod 'Toast-Swift', '~> 5.1.0'
+```
+
+and in your code add `import Toast_Swift`.
+
+[Carthage](https://github.com/Carthage/Carthage)
+------------------
+
+To integrate Toast-Swift into your Xcode project using Carthage, specify it in your `Cartfile`:
+
+```ogdl
+github "scalessec/Toast-Swift" ~> 5.1.0
+```
+
+Run `carthage update` to build the framework and drag the built `ToastSwiftFramework.framework` into your Xcode project.
+
+and in your code add `import ToastSwiftFramework`.
+
+[Swift Package Manager](https://swift.org/package-manager/)
+------------------
+
+When using Xcode 11 or later, you can install `Toast` by going to your Project settings > `Swift Packages` and add the repository by providing the GitHub URL. Alternatively, you can go to `File` > `Swift Packages` > `Add Package Dependencies...`
+
+Manually
+------------------
+
+1. Add `Toast.swift` to your project.
+2. Grab yourself a cold 🍺.
+
+Compatibility
+------------------
+* Version `5.x.x` requires Swift 5 and Xcode 10.2 or later.
+* Version `4.x.x` requires Swift 4.2 and Xcode 10.
+* Version `3.x.x` requires Swift 4 and Xcode 9.
+* Version `2.x.x` requires Swift 3 and Xcode 8.
+* Version `1.4.x` requires Swift 2.2 and Xcode 7.3.
+* Version `1.0.0` can be used with Swift 2.1 and earlier versions of Xcode.
+
+Privacy
+-----------
+Toast-Swift does not collect any data. A [privacy manifest](Toast/Resources/PrivacyInfo.xcprivacy) is provided with the library. See [Apple's documentation](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files) for related details.
+
+MIT License
+-----------
+ Copyright (c) 2015-2024 Charles Scalesse.
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>NSPrivacyTracking</key>
+ <false/>
+ <key>NSPrivacyCollectedDataTypes</key>
+ <array/>
+ <key>NSPrivacyTrackingDomains</key>
+ <array/>
+ <key>NSPrivacyAccessedAPITypes</key>
+ <array/>
+</dict>
+</plist>
\ No newline at end of file
--- /dev/null
+//
+// Toast.swift
+// Toast-Swift
+//
+// Copyright (c) 2015-2024 Charles Scalesse.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+import UIKit
+import ObjectiveC
+
+/**
+ Toast is a Swift extension that adds toast notifications to the `UIView` object class.
+ It is intended to be simple, lightweight, and easy to use. Most toast notifications
+ can be triggered with a single line of code.
+
+ The `makeToast` methods create a new view and then display it as toast.
+
+ The `showToast` methods display any view as toast.
+
+ */
+public extension UIView {
+
+ /**
+ Keys used for associated objects.
+ */
+ private struct ToastKeys {
+ static var timer = malloc(1)
+ static var duration = malloc(1)
+ static var point = malloc(1)
+ static var completion = malloc(1)
+ static var activeToasts = malloc(1)
+ static var activityView = malloc(1)
+ static var queue = malloc(1)
+ }
+
+ /**
+ Swift closures can't be directly associated with objects via the
+ Objective-C runtime, so the (ugly) solution is to wrap them in a
+ class that can be used with associated objects.
+ */
+ private class ToastCompletionWrapper {
+ let completion: ((Bool) -> Void)?
+
+ init(_ completion: ((Bool) -> Void)?) {
+ self.completion = completion
+ }
+ }
+
+ private enum ToastError: Error {
+ case missingParameters
+ }
+
+ private var activeToasts: NSMutableArray {
+ get {
+ if let activeToasts = objc_getAssociatedObject(self, &ToastKeys.activeToasts) as? NSMutableArray {
+ return activeToasts
+ } else {
+ let activeToasts = NSMutableArray()
+ objc_setAssociatedObject(self, &ToastKeys.activeToasts, activeToasts, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
+ return activeToasts
+ }
+ }
+ }
+
+ private var queue: NSMutableArray {
+ get {
+ if let queue = objc_getAssociatedObject(self, &ToastKeys.queue) as? NSMutableArray {
+ return queue
+ } else {
+ let queue = NSMutableArray()
+ objc_setAssociatedObject(self, &ToastKeys.queue, queue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
+ return queue
+ }
+ }
+ }
+
+ // MARK: - Make Toast Methods
+
+ /**
+ Creates and presents a new toast view.
+
+ @param message The message to be displayed
+ @param duration The toast duration
+ @param position The toast's position
+ @param title The title
+ @param image The image
+ @param style The style. The shared style will be used when nil
+ @param completion The completion closure, executed after the toast view disappears.
+ didTap will be `true` if the toast view was dismissed from a tap.
+ */
+ func makeToast(_ message: String?, duration: TimeInterval = ToastManager.shared.duration, position: ToastPosition = ToastManager.shared.position, title: String? = nil, image: UIImage? = nil, style: ToastStyle = ToastManager.shared.style, completion: ((_ didTap: Bool) -> Void)? = nil) {
+ do {
+ let toast = try toastViewForMessage(message, title: title, image: image, style: style)
+ showToast(toast, duration: duration, position: position, completion: completion)
+ } catch ToastError.missingParameters {
+ print("Error: message, title, and image are all nil")
+ } catch {}
+ }
+
+ /**
+ Creates a new toast view and presents it at a given center point.
+
+ @param message The message to be displayed
+ @param duration The toast duration
+ @param point The toast's center point
+ @param title The title
+ @param image The image
+ @param style The style. The shared style will be used when nil
+ @param completion The completion closure, executed after the toast view disappears.
+ didTap will be `true` if the toast view was dismissed from a tap.
+ */
+ func makeToast(_ message: String?, duration: TimeInterval = ToastManager.shared.duration, point: CGPoint, title: String?, image: UIImage?, style: ToastStyle = ToastManager.shared.style, completion: ((_ didTap: Bool) -> Void)?) {
+ do {
+ let toast = try toastViewForMessage(message, title: title, image: image, style: style)
+ showToast(toast, duration: duration, point: point, completion: completion)
+ } catch ToastError.missingParameters {
+ print("Error: message, title, and image cannot all be nil")
+ } catch {}
+ }
+
+ // MARK: - Show Toast Methods
+
+ /**
+ Displays any view as toast at a provided position and duration. The completion closure
+ executes when the toast view completes. `didTap` will be `true` if the toast view was
+ dismissed from a tap.
+
+ @param toast The view to be displayed as toast
+ @param duration The notification duration
+ @param position The toast's position
+ @param completion The completion block, executed after the toast view disappears.
+ didTap will be `true` if the toast view was dismissed from a tap.
+ */
+ func showToast(_ toast: UIView, duration: TimeInterval = ToastManager.shared.duration, position: ToastPosition = ToastManager.shared.position, completion: ((_ didTap: Bool) -> Void)? = nil) {
+ let point = position.centerPoint(forToast: toast, inSuperview: self)
+ showToast(toast, duration: duration, point: point, completion: completion)
+ }
+
+ /**
+ Displays any view as toast at a provided center point and duration. The completion closure
+ executes when the toast view completes. `didTap` will be `true` if the toast view was
+ dismissed from a tap.
+
+ @param toast The view to be displayed as toast
+ @param duration The notification duration
+ @param point The toast's center point
+ @param completion The completion block, executed after the toast view disappears.
+ didTap will be `true` if the toast view was dismissed from a tap.
+ */
+ func showToast(_ toast: UIView, duration: TimeInterval = ToastManager.shared.duration, point: CGPoint, completion: ((_ didTap: Bool) -> Void)? = nil) {
+ objc_setAssociatedObject(toast, &ToastKeys.completion, ToastCompletionWrapper(completion), .OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+
+ if ToastManager.shared.isQueueEnabled, activeToasts.count > 0 {
+ objc_setAssociatedObject(toast, &ToastKeys.duration, NSNumber(value: duration), .OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+ objc_setAssociatedObject(toast, &ToastKeys.point, NSValue(cgPoint: point), .OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+
+ queue.add(toast)
+ } else {
+ showToast(toast, duration: duration, point: point)
+ }
+ }
+
+ // MARK: - Hide Toast Methods
+
+ /**
+ Hides the active toast. If there are multiple toasts active in a view, this method
+ hides the oldest toast (the first of the toasts to have been presented).
+
+ @see `hideAllToasts()` to remove all active toasts from a view.
+
+ @warning This method has no effect on activity toasts. Use `hideToastActivity` to
+ hide activity toasts.
+
+ */
+ func hideToast() {
+ guard let activeToast = activeToasts.firstObject as? UIView else { return }
+ hideToast(activeToast)
+ }
+
+ /**
+ Hides an active toast.
+
+ @param toast The active toast view to dismiss. Any toast that is currently being displayed
+ on the screen is considered active.
+
+ @warning this does not clear a toast view that is currently waiting in the queue.
+ */
+ func hideToast(_ toast: UIView) {
+ guard activeToasts.contains(toast) else { return }
+ hideToast(toast, fromTap: false)
+ }
+
+ /**
+ Hides all toast views.
+
+ @param includeActivity If `true`, toast activity will also be hidden. Default is `false`.
+ @param clearQueue If `true`, removes all toast views from the queue. Default is `true`.
+ */
+ func hideAllToasts(includeActivity: Bool = false, clearQueue: Bool = true) {
+ if clearQueue {
+ clearToastQueue()
+ }
+
+ activeToasts.compactMap { $0 as? UIView }
+ .forEach { hideToast($0) }
+
+ if includeActivity {
+ hideToastActivity()
+ }
+ }
+
+ /**
+ Removes all toast views from the queue. This has no effect on toast views that are
+ active. Use `hideAllToasts(clearQueue:)` to hide the active toasts views and clear
+ the queue.
+ */
+ func clearToastQueue() {
+ queue.removeAllObjects()
+ }
+
+ // MARK: - Activity Methods
+
+ /**
+ Creates and displays a new toast activity indicator view at a specified position.
+
+ @warning Only one toast activity indicator view can be presented per superview. Subsequent
+ calls to `makeToastActivity(position:)` will be ignored until `hideToastActivity()` is called.
+
+ @warning `makeToastActivity(position:)` works independently of the `showToast` methods. Toast
+ activity views can be presented and dismissed while toast views are being displayed.
+ `makeToastActivity(position:)` has no effect on the queueing behavior of the `showToast` methods.
+
+ @param position The toast's position
+ */
+ func makeToastActivity(_ position: ToastPosition) {
+ // sanity
+ guard objc_getAssociatedObject(self, &ToastKeys.activityView) as? UIView == nil else { return }
+
+ let toast = createToastActivityView()
+ let point = position.centerPoint(forToast: toast, inSuperview: self)
+ makeToastActivity(toast, point: point)
+ }
+
+ /**
+ Creates and displays a new toast activity indicator view at a specified position.
+
+ @warning Only one toast activity indicator view can be presented per superview. Subsequent
+ calls to `makeToastActivity(position:)` will be ignored until `hideToastActivity()` is called.
+
+ @warning `makeToastActivity(position:)` works independently of the `showToast` methods. Toast
+ activity views can be presented and dismissed while toast views are being displayed.
+ `makeToastActivity(position:)` has no effect on the queueing behavior of the `showToast` methods.
+
+ @param point The toast's center point
+ */
+ func makeToastActivity(_ point: CGPoint) {
+ // sanity
+ guard objc_getAssociatedObject(self, &ToastKeys.activityView) as? UIView == nil else { return }
+
+ let toast = createToastActivityView()
+ makeToastActivity(toast, point: point)
+ }
+
+ /**
+ Dismisses the active toast activity indicator view.
+ */
+ func hideToastActivity() {
+ if let toast = objc_getAssociatedObject(self, &ToastKeys.activityView) as? UIView {
+ UIView.animate(withDuration: ToastManager.shared.style.fadeDuration, delay: 0.0, options: [.curveEaseIn, .beginFromCurrentState], animations: {
+ toast.alpha = 0.0
+ }) { _ in
+ toast.removeFromSuperview()
+ objc_setAssociatedObject(self, &ToastKeys.activityView, nil, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
+ }
+ }
+ }
+
+ // MARK: - Helper Methods
+
+ /**
+ Returns `true` if a toast view or toast activity view is actively being displayed.
+ */
+ func isShowingToast() -> Bool {
+ return activeToasts.count > 0 || objc_getAssociatedObject(self, &ToastKeys.activityView) != nil
+ }
+
+ // MARK: - Private Activity Methods
+
+ private func makeToastActivity(_ toast: UIView, point: CGPoint) {
+ toast.alpha = 0.0
+ toast.center = point
+
+ objc_setAssociatedObject(self, &ToastKeys.activityView, toast, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
+
+ self.addSubview(toast)
+
+ UIView.animate(withDuration: ToastManager.shared.style.fadeDuration, delay: 0.0, options: .curveEaseOut, animations: {
+ toast.alpha = 1.0
+ })
+ }
+
+ private func createToastActivityView() -> UIView {
+ let style = ToastManager.shared.style
+
+ let activityView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: style.activitySize.width, height: style.activitySize.height))
+ activityView.backgroundColor = style.activityBackgroundColor
+ activityView.autoresizingMask = [.flexibleLeftMargin, .flexibleRightMargin, .flexibleTopMargin, .flexibleBottomMargin]
+ activityView.layer.cornerRadius = style.cornerRadius
+
+ if style.displayShadow {
+ activityView.layer.shadowColor = style.shadowColor.cgColor
+ activityView.layer.shadowOpacity = style.shadowOpacity
+ activityView.layer.shadowRadius = style.shadowRadius
+ activityView.layer.shadowOffset = style.shadowOffset
+ }
+
+ let activityIndicatorView = UIActivityIndicatorView(style: .whiteLarge)
+ activityIndicatorView.center = CGPoint(x: activityView.bounds.size.width / 2.0, y: activityView.bounds.size.height / 2.0)
+ activityView.addSubview(activityIndicatorView)
+ activityIndicatorView.color = style.activityIndicatorColor
+ activityIndicatorView.startAnimating()
+
+ return activityView
+ }
+
+ // MARK: - Private Show/Hide Methods
+
+ private func showToast(_ toast: UIView, duration: TimeInterval, point: CGPoint) {
+ toast.center = point
+ toast.alpha = 0.0
+
+ if ToastManager.shared.isTapToDismissEnabled {
+ let recognizer = UITapGestureRecognizer(target: self, action: #selector(UIView.handleToastTapped(_:)))
+ toast.addGestureRecognizer(recognizer)
+ toast.isUserInteractionEnabled = true
+ toast.isExclusiveTouch = true
+ }
+
+ activeToasts.add(toast)
+ self.addSubview(toast)
+
+ let timer = Timer(timeInterval: duration, target: self, selector: #selector(UIView.toastTimerDidFinish(_:)), userInfo: toast, repeats: false)
+ objc_setAssociatedObject(toast, &ToastKeys.timer, timer, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
+
+ UIView.animate(withDuration: ToastManager.shared.style.fadeDuration, delay: 0.0, options: [.curveEaseOut, .allowUserInteraction], animations: {
+ toast.alpha = 1.0
+ }) { _ in
+ guard let timer = objc_getAssociatedObject(toast, &ToastKeys.timer) as? Timer else { return }
+ RunLoop.main.add(timer, forMode: .common)
+ }
+
+ UIAccessibility.post(notification: .screenChanged, argument: toast)
+ }
+
+ private func hideToast(_ toast: UIView, fromTap: Bool) {
+ if let timer = objc_getAssociatedObject(toast, &ToastKeys.timer) as? Timer {
+ timer.invalidate()
+ }
+
+ UIView.animate(withDuration: ToastManager.shared.style.fadeDuration, delay: 0.0, options: [.curveEaseIn, .beginFromCurrentState], animations: {
+ toast.alpha = 0.0
+ }) { _ in
+ toast.removeFromSuperview()
+ self.activeToasts.remove(toast)
+
+ if let wrapper = objc_getAssociatedObject(toast, &ToastKeys.completion) as? ToastCompletionWrapper, let completion = wrapper.completion {
+ completion(fromTap)
+ }
+
+ if let nextToast = self.queue.firstObject as? UIView, let duration = objc_getAssociatedObject(nextToast, &ToastKeys.duration) as? NSNumber, let point = objc_getAssociatedObject(nextToast, &ToastKeys.point) as? NSValue {
+ self.queue.removeObject(at: 0)
+ self.showToast(nextToast, duration: duration.doubleValue, point: point.cgPointValue)
+ }
+ }
+ }
+
+ // MARK: - Events
+
+ @objc
+ private func handleToastTapped(_ recognizer: UITapGestureRecognizer) {
+ guard let toast = recognizer.view else { return }
+ hideToast(toast, fromTap: true)
+ }
+
+ @objc
+ private func toastTimerDidFinish(_ timer: Timer) {
+ guard let toast = timer.userInfo as? UIView else { return }
+ hideToast(toast)
+ }
+
+ // MARK: - Toast Construction
+
+ /**
+ Creates a new toast view with any combination of message, title, and image.
+ The look and feel is configured via the style. Unlike the `makeToast` methods,
+ this method does not present the toast view automatically. One of the `showToast`
+ methods must be used to present the resulting view.
+
+ @warning if message, title, and image are all nil, this method will throw
+ `ToastError.missingParameters`
+
+ @param message The message to be displayed
+ @param title The title
+ @param image The image
+ @param style The style. The shared style will be used when nil
+ @throws `ToastError.missingParameters` when message, title, and image are all nil
+ @return The newly created toast view
+ */
+ func toastViewForMessage(_ message: String?, title: String?, image: UIImage?, style: ToastStyle) throws -> UIView {
+ // sanity
+ guard message != nil || title != nil || image != nil else {
+ throw ToastError.missingParameters
+ }
+
+ var messageLabel: UILabel?
+ var titleLabel: UILabel?
+ var imageView: UIImageView?
+
+ let wrapperView = UIView()
+ wrapperView.backgroundColor = style.backgroundColor
+ wrapperView.autoresizingMask = [.flexibleLeftMargin, .flexibleRightMargin, .flexibleTopMargin, .flexibleBottomMargin]
+ wrapperView.layer.cornerRadius = style.cornerRadius
+
+ if style.displayShadow {
+ wrapperView.layer.shadowColor = style.shadowColor.cgColor
+ wrapperView.layer.shadowOpacity = style.shadowOpacity
+ wrapperView.layer.shadowRadius = style.shadowRadius
+ wrapperView.layer.shadowOffset = style.shadowOffset
+ }
+
+ if let image = image {
+ imageView = UIImageView(image: image)
+ imageView?.contentMode = .scaleAspectFit
+ imageView?.frame = CGRect(x: style.horizontalPadding, y: style.verticalPadding, width: style.imageSize.width, height: style.imageSize.height)
+ }
+
+ var imageRect = CGRect.zero
+
+ if let imageView = imageView {
+ imageRect.origin.x = style.horizontalPadding
+ imageRect.origin.y = style.verticalPadding
+ imageRect.size.width = imageView.bounds.size.width
+ imageRect.size.height = imageView.bounds.size.height
+ }
+
+ if let title = title {
+ titleLabel = UILabel()
+ titleLabel?.numberOfLines = style.titleNumberOfLines
+ titleLabel?.font = style.titleFont
+ titleLabel?.textAlignment = style.titleAlignment
+ titleLabel?.lineBreakMode = .byTruncatingTail
+ titleLabel?.textColor = style.titleColor
+ titleLabel?.backgroundColor = UIColor.clear
+ titleLabel?.text = title;
+
+ let maxTitleSize = CGSize(width: (self.bounds.size.width * style.maxWidthPercentage) - imageRect.size.width, height: self.bounds.size.height * style.maxHeightPercentage)
+ let titleSize = titleLabel?.sizeThatFits(maxTitleSize)
+ if let titleSize = titleSize {
+ titleLabel?.frame = CGRect(x: 0.0, y: 0.0, width: titleSize.width, height: titleSize.height)
+ }
+ }
+
+ if let message = message {
+ messageLabel = UILabel()
+ messageLabel?.text = message
+ messageLabel?.numberOfLines = style.messageNumberOfLines
+ messageLabel?.font = style.messageFont
+ messageLabel?.textAlignment = style.messageAlignment
+ messageLabel?.lineBreakMode = .byTruncatingTail;
+ messageLabel?.textColor = style.messageColor
+ messageLabel?.backgroundColor = UIColor.clear
+
+ let maxMessageSize = CGSize(width: (self.bounds.size.width * style.maxWidthPercentage) - imageRect.size.width, height: self.bounds.size.height * style.maxHeightPercentage)
+ let messageSize = messageLabel?.sizeThatFits(maxMessageSize)
+ if let messageSize = messageSize {
+ let actualWidth = min(messageSize.width, maxMessageSize.width)
+ let actualHeight = min(messageSize.height, maxMessageSize.height)
+ messageLabel?.frame = CGRect(x: 0.0, y: 0.0, width: actualWidth, height: actualHeight)
+ }
+ }
+
+ var titleRect = CGRect.zero
+
+ if let titleLabel = titleLabel {
+ titleRect.origin.x = imageRect.origin.x + imageRect.size.width + style.horizontalPadding
+ titleRect.origin.y = style.verticalPadding
+ titleRect.size.width = titleLabel.bounds.size.width
+ titleRect.size.height = titleLabel.bounds.size.height
+ }
+
+ var messageRect = CGRect.zero
+
+ if let messageLabel = messageLabel {
+ messageRect.origin.x = imageRect.origin.x + imageRect.size.width + style.horizontalPadding
+ messageRect.origin.y = titleRect.origin.y + titleRect.size.height + style.verticalPadding
+ messageRect.size.width = messageLabel.bounds.size.width
+ messageRect.size.height = messageLabel.bounds.size.height
+ }
+
+ let longerWidth = max(titleRect.size.width, messageRect.size.width)
+ let longerX = max(titleRect.origin.x, messageRect.origin.x)
+ let wrapperWidth = max((imageRect.size.width + (style.horizontalPadding * 2.0)), (longerX + longerWidth + style.horizontalPadding))
+
+ let textMaxY = messageRect.size.height <= 0.0 && titleRect.size.height > 0.0 ? titleRect.maxY : messageRect.maxY
+ let wrapperHeight = max((textMaxY + style.verticalPadding), (imageRect.size.height + (style.verticalPadding * 2.0)))
+
+ wrapperView.frame = CGRect(x: 0.0, y: 0.0, width: wrapperWidth, height: wrapperHeight)
+
+ if let titleLabel = titleLabel {
+ titleRect.size.width = longerWidth
+ titleLabel.frame = titleRect
+ wrapperView.addSubview(titleLabel)
+ }
+
+ if let messageLabel = messageLabel {
+ messageRect.size.width = longerWidth
+ messageLabel.frame = messageRect
+ wrapperView.addSubview(messageLabel)
+ }
+
+ if let imageView = imageView {
+ wrapperView.addSubview(imageView)
+ }
+
+ return wrapperView
+ }
+
+}
+
+// MARK: - Toast Style
+
+/**
+ `ToastStyle` instances define the look and feel for toast views created via the
+ `makeToast` methods as well for toast views created directly with
+ `toastViewForMessage(message:title:image:style:)`.
+
+ @warning `ToastStyle` offers relatively simple styling options for the default
+ toast view. If you require a toast view with more complex UI, it probably makes more
+ sense to create your own custom UIView subclass and present it with the `showToast`
+ methods.
+*/
+public struct ToastStyle {
+
+ public init() {}
+
+ /**
+ The background color. Default is `.black` at 80% opacity.
+ */
+ public var backgroundColor: UIColor = UIColor.black.withAlphaComponent(0.8)
+
+ /**
+ The title color. Default is `UIColor.whiteColor()`.
+ */
+ public var titleColor: UIColor = .white
+
+ /**
+ The message color. Default is `.white`.
+ */
+ public var messageColor: UIColor = .white
+
+ /**
+ A percentage value from 0.0 to 1.0, representing the maximum width of the toast
+ view relative to it's superview. Default is 0.8 (80% of the superview's width).
+ */
+ public var maxWidthPercentage: CGFloat = 0.8 {
+ didSet {
+ maxWidthPercentage = max(min(maxWidthPercentage, 1.0), 0.0)
+ }
+ }
+
+ /**
+ A percentage value from 0.0 to 1.0, representing the maximum height of the toast
+ view relative to it's superview. Default is 0.8 (80% of the superview's height).
+ */
+ public var maxHeightPercentage: CGFloat = 0.8 {
+ didSet {
+ maxHeightPercentage = max(min(maxHeightPercentage, 1.0), 0.0)
+ }
+ }
+
+ /**
+ The spacing from the horizontal edge of the toast view to the content. When an image
+ is present, this is also used as the padding between the image and the text.
+ Default is 10.0.
+
+ */
+ public var horizontalPadding: CGFloat = 10.0
+
+ /**
+ The spacing from the vertical edge of the toast view to the content. When a title
+ is present, this is also used as the padding between the title and the message.
+ Default is 10.0. On iOS11+, this value is added added to the `safeAreaInset.top`
+ and `safeAreaInsets.bottom`.
+ */
+ public var verticalPadding: CGFloat = 10.0
+
+ /**
+ The corner radius. Default is 10.0.
+ */
+ public var cornerRadius: CGFloat = 10.0;
+
+ /**
+ The title font. Default is `.boldSystemFont(16.0)`.
+ */
+ public var titleFont: UIFont = .boldSystemFont(ofSize: 16.0)
+
+ /**
+ The message font. Default is `.systemFont(ofSize: 16.0)`.
+ */
+ public var messageFont: UIFont = .systemFont(ofSize: 16.0)
+
+ /**
+ The title text alignment. Default is `NSTextAlignment.Left`.
+ */
+ public var titleAlignment: NSTextAlignment = .left
+
+ /**
+ The message text alignment. Default is `NSTextAlignment.Left`.
+ */
+ public var messageAlignment: NSTextAlignment = .left
+
+ /**
+ The maximum number of lines for the title. The default is 0 (no limit).
+ */
+ public var titleNumberOfLines = 0
+
+ /**
+ The maximum number of lines for the message. The default is 0 (no limit).
+ */
+ public var messageNumberOfLines = 0
+
+ /**
+ Enable or disable a shadow on the toast view. Default is `false`.
+ */
+ public var displayShadow = false
+
+ /**
+ The shadow color. Default is `.black`.
+ */
+ public var shadowColor: UIColor = .black
+
+ /**
+ A value from 0.0 to 1.0, representing the opacity of the shadow.
+ Default is 0.8 (80% opacity).
+ */
+ public var shadowOpacity: Float = 0.8 {
+ didSet {
+ shadowOpacity = max(min(shadowOpacity, 1.0), 0.0)
+ }
+ }
+
+ /**
+ The shadow radius. Default is 6.0.
+ */
+ public var shadowRadius: CGFloat = 6.0
+
+ /**
+ The shadow offset. The default is 4 x 4.
+ */
+ public var shadowOffset = CGSize(width: 4.0, height: 4.0)
+
+ /**
+ The image size. The default is 80 x 80.
+ */
+ public var imageSize = CGSize(width: 80.0, height: 80.0)
+
+ /**
+ The size of the toast activity view when `makeToastActivity(position:)` is called.
+ Default is 100 x 100.
+ */
+ public var activitySize = CGSize(width: 100.0, height: 100.0)
+
+ /**
+ The fade in/out animation duration. Default is 0.2.
+ */
+ public var fadeDuration: TimeInterval = 0.2
+
+ /**
+ Activity indicator color. Default is `.white`.
+ */
+ public var activityIndicatorColor: UIColor = .white
+
+ /**
+ Activity background color. Default is `.black` at 80% opacity.
+ */
+ public var activityBackgroundColor: UIColor = UIColor.black.withAlphaComponent(0.8)
+
+}
+
+// MARK: - Toast Manager
+
+/**
+ `ToastManager` provides general configuration options for all toast
+ notifications. Backed by a singleton instance.
+*/
+public class ToastManager {
+
+ /**
+ The `ToastManager` singleton instance.
+
+ */
+ public static let shared = ToastManager()
+
+ /**
+ The shared style. Used whenever toastViewForMessage(message:title:image:style:) is called
+ with with a nil style.
+
+ */
+ public var style = ToastStyle()
+
+ /**
+ Enables or disables tap to dismiss on toast views. Default is `true`.
+
+ */
+ public var isTapToDismissEnabled = true
+
+ /**
+ Enables or disables queueing behavior for toast views. When `true`,
+ toast views will appear one after the other. When `false`, multiple toast
+ views will appear at the same time (potentially overlapping depending
+ on their positions). This has no effect on the toast activity view,
+ which operates independently of normal toast views. Default is `false`.
+
+ */
+ public var isQueueEnabled = false
+
+ /**
+ The default duration. Used for the `makeToast` and
+ `showToast` methods that don't require an explicit duration.
+ Default is 3.0.
+
+ */
+ public var duration: TimeInterval = 3.0
+
+ /**
+ Sets the default position. Used for the `makeToast` and
+ `showToast` methods that don't require an explicit position.
+ Default is `ToastPosition.Bottom`.
+
+ */
+ public var position: ToastPosition = .bottom
+
+}
+
+// MARK: - ToastPosition
+
+public enum ToastPosition {
+ case top
+ case center
+ case bottom
+
+ fileprivate func centerPoint(forToast toast: UIView, inSuperview superview: UIView) -> CGPoint {
+ let topPadding: CGFloat = ToastManager.shared.style.verticalPadding + superview.csSafeAreaInsets.top
+ let bottomPadding: CGFloat = ToastManager.shared.style.verticalPadding + superview.csSafeAreaInsets.bottom
+
+ switch self {
+ case .top:
+ return CGPoint(x: superview.bounds.size.width / 2.0, y: (toast.frame.size.height / 2.0) + topPadding)
+ case .center:
+ return CGPoint(x: superview.bounds.size.width / 2.0, y: superview.bounds.size.height / 2.0)
+ case .bottom:
+ return CGPoint(x: superview.bounds.size.width / 2.0, y: (superview.bounds.size.height - (toast.frame.size.height / 2.0)) - bottomPadding)
+ }
+ }
+}
+
+// MARK: - Private UIView Extensions
+
+private extension UIView {
+
+ var csSafeAreaInsets: UIEdgeInsets {
+ if #available(iOS 11.0, *) {
+ return self.safeAreaInsets
+ } else {
+ return .zero
+ }
+ }
+
+}
--- /dev/null
+# source 'https://kkgithub.com/CocoaPods/Specs.git'
+source "https://gitee.com/mirrors/CocoaPods-Specs.git"
+platform :ios, '13.0'
+use_frameworks!
+
+
+workspace 'HsFileAgentSdk'
+project 'Example/Example.xcodeproj'
+target 'Example' do
+ pod 'SnapKit', '~> 5.7.0'
+ pod 'Toast-Swift'
+
+end
--- /dev/null
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 56;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 18C6B40F2D2292630094EC31 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18C6B40E2D2292630094EC31 /* AppDelegate.swift */; };
+ 18C6B4112D2292630094EC31 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18C6B4102D2292630094EC31 /* SceneDelegate.swift */; };
+ 18C6B4132D2292630094EC31 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18C6B4122D2292630094EC31 /* ViewController.swift */; };
+ 18C6B4162D2292630094EC31 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 18C6B4142D2292630094EC31 /* Main.storyboard */; };
+ 18C6B4182D2292660094EC31 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 18C6B4172D2292660094EC31 /* Assets.xcassets */; };
+ 18C6B41B2D2292660094EC31 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 18C6B4192D2292660094EC31 /* LaunchScreen.storyboard */; };
+ 18C6B4242D2292D00094EC31 /* HsFileAgentSdk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18C6B4232D2292D00094EC31 /* HsFileAgentSdk.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 18C6B40B2D2292630094EC31 /* Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Demo.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 18C6B40E2D2292630094EC31 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
+ 18C6B4102D2292630094EC31 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
+ 18C6B4122D2292630094EC31 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
+ 18C6B4152D2292630094EC31 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
+ 18C6B4172D2292660094EC31 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
+ 18C6B41A2D2292660094EC31 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
+ 18C6B41C2D2292660094EC31 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+ 18C6B4232D2292D00094EC31 /* HsFileAgentSdk.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = HsFileAgentSdk.framework; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 18C6B4082D2292630094EC31 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 18C6B4242D2292D00094EC31 /* HsFileAgentSdk.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 18C6B4022D2292630094EC31 = {
+ isa = PBXGroup;
+ children = (
+ 18C6B4232D2292D00094EC31 /* HsFileAgentSdk.framework */,
+ 18C6B40D2D2292630094EC31 /* Demo */,
+ 18C6B40C2D2292630094EC31 /* Products */,
+ );
+ sourceTree = "<group>";
+ };
+ 18C6B40C2D2292630094EC31 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 18C6B40B2D2292630094EC31 /* Demo.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 18C6B40D2D2292630094EC31 /* Demo */ = {
+ isa = PBXGroup;
+ children = (
+ 18C6B40E2D2292630094EC31 /* AppDelegate.swift */,
+ 18C6B4102D2292630094EC31 /* SceneDelegate.swift */,
+ 18C6B4122D2292630094EC31 /* ViewController.swift */,
+ 18C6B4142D2292630094EC31 /* Main.storyboard */,
+ 18C6B4172D2292660094EC31 /* Assets.xcassets */,
+ 18C6B4192D2292660094EC31 /* LaunchScreen.storyboard */,
+ 18C6B41C2D2292660094EC31 /* Info.plist */,
+ );
+ path = Demo;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 18C6B40A2D2292630094EC31 /* Demo */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 18C6B41F2D2292660094EC31 /* Build configuration list for PBXNativeTarget "Demo" */;
+ buildPhases = (
+ 18C6B4072D2292630094EC31 /* Sources */,
+ 18C6B4082D2292630094EC31 /* Frameworks */,
+ 18C6B4092D2292630094EC31 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Demo;
+ productName = Demo;
+ productReference = 18C6B40B2D2292630094EC31 /* Demo.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 18C6B4032D2292630094EC31 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = 1;
+ LastSwiftUpdateCheck = 1520;
+ LastUpgradeCheck = 1520;
+ TargetAttributes = {
+ 18C6B40A2D2292630094EC31 = {
+ CreatedOnToolsVersion = 15.2;
+ };
+ };
+ };
+ buildConfigurationList = 18C6B4062D2292630094EC31 /* Build configuration list for PBXProject "Demo" */;
+ compatibilityVersion = "Xcode 14.0";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 18C6B4022D2292630094EC31;
+ productRefGroup = 18C6B40C2D2292630094EC31 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 18C6B40A2D2292630094EC31 /* Demo */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 18C6B4092D2292630094EC31 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 18C6B41B2D2292660094EC31 /* LaunchScreen.storyboard in Resources */,
+ 18C6B4182D2292660094EC31 /* Assets.xcassets in Resources */,
+ 18C6B4162D2292630094EC31 /* Main.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 18C6B4072D2292630094EC31 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 18C6B4132D2292630094EC31 /* ViewController.swift in Sources */,
+ 18C6B40F2D2292630094EC31 /* AppDelegate.swift in Sources */,
+ 18C6B4112D2292630094EC31 /* SceneDelegate.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 18C6B4142D2292630094EC31 /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 18C6B4152D2292630094EC31 /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "<group>";
+ };
+ 18C6B4192D2292660094EC31 /* LaunchScreen.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 18C6B41A2D2292660094EC31 /* Base */,
+ );
+ name = LaunchScreen.storyboard;
+ sourceTree = "<group>";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 18C6B41D2D2292660094EC31 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 17.2;
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ };
+ name = Debug;
+ };
+ 18C6B41E2D2292660094EC31 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 17.2;
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
+ SDKROOT = iphoneos;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 18C6B4202D2292660094EC31 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = M33X987285;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)",
+ );
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = Demo/Info.plist;
+ INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
+ INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
+ INFOPLIST_KEY_UIMainStoryboardFile = Main;
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = sort.Demo;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 18C6B4212D2292660094EC31 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = M33X987285;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)",
+ );
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = Demo/Info.plist;
+ INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
+ INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
+ INFOPLIST_KEY_UIMainStoryboardFile = Main;
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = sort.Demo;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 18C6B4062D2292630094EC31 /* Build configuration list for PBXProject "Demo" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 18C6B41D2D2292660094EC31 /* Debug */,
+ 18C6B41E2D2292660094EC31 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 18C6B41F2D2292660094EC31 /* Build configuration list for PBXNativeTarget "Demo" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 18C6B4202D2292660094EC31 /* Debug */,
+ 18C6B4212D2292660094EC31 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 18C6B4032D2292630094EC31 /* Project object */;
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+ version = "1.0">
+ <FileRef
+ location = "self:">
+ </FileRef>
+</Workspace>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>IDEDidComputeMac32BitWarning</key>
+ <true/>
+</dict>
+</plist>
--- /dev/null
+//
+// AppDelegate.swift
+// Demo
+//
+// Created by incar on 2024/12/30.
+//
+
+import UIKit
+
+@main
+class AppDelegate: UIResponder, UIApplicationDelegate {
+
+
+
+ func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
+ // Override point for customization after application launch.
+ return true
+ }
+
+ // MARK: UISceneSession Lifecycle
+
+ func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
+ // Called when a new scene session is being created.
+ // Use this method to select a configuration to create the new scene with.
+ return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
+ }
+
+ func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
+ // Called when the user discards a scene session.
+ // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
+ // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
+ }
+
+
+}
+
--- /dev/null
+{
+ "colors" : [
+ {
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
--- /dev/null
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
--- /dev/null
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
+ <dependencies>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
+ <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+ <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+ </dependencies>
+ <scenes>
+ <!--View Controller-->
+ <scene sceneID="EHf-IW-A2E">
+ <objects>
+ <viewController id="01J-lp-oVM" sceneMemberID="viewController">
+ <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
+ <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
+ </view>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="53" y="375"/>
+ </scene>
+ </scenes>
+</document>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
+ <dependencies>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
+ <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+ <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+ </dependencies>
+ <scenes>
+ <!--View Controller-->
+ <scene sceneID="tne-QT-ifu">
+ <objects>
+ <viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="target" sceneMemberID="viewController">
+ <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
+ <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
+ </view>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
+ </objects>
+ </scene>
+ </scenes>
+</document>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>UIApplicationSceneManifest</key>
+ <dict>
+ <key>UIApplicationSupportsMultipleScenes</key>
+ <false/>
+ <key>UISceneConfigurations</key>
+ <dict>
+ <key>UIWindowSceneSessionRoleApplication</key>
+ <array>
+ <dict>
+ <key>UISceneConfigurationName</key>
+ <string>Default Configuration</string>
+ <key>UISceneDelegateClassName</key>
+ <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
+ <key>UISceneStoryboardFile</key>
+ <string>Main</string>
+ </dict>
+ </array>
+ </dict>
+ </dict>
+</dict>
+</plist>
--- /dev/null
+//
+// SceneDelegate.swift
+// Demo
+//
+// Created by incar on 2024/12/30.
+//
+
+import UIKit
+
+class SceneDelegate: UIResponder, UIWindowSceneDelegate {
+
+ var window: UIWindow?
+
+
+ func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
+ // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
+ // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
+ // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
+ guard let _ = (scene as? UIWindowScene) else { return }
+ }
+
+ func sceneDidDisconnect(_ scene: UIScene) {
+ // Called as the scene is being released by the system.
+ // This occurs shortly after the scene enters the background, or when its session is discarded.
+ // Release any resources associated with this scene that can be re-created the next time the scene connects.
+ // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).
+ }
+
+ func sceneDidBecomeActive(_ scene: UIScene) {
+ // Called when the scene has moved from an inactive state to an active state.
+ // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
+ }
+
+ func sceneWillResignActive(_ scene: UIScene) {
+ // Called when the scene will move from an active state to an inactive state.
+ // This may occur due to temporary interruptions (ex. an incoming phone call).
+ }
+
+ func sceneWillEnterForeground(_ scene: UIScene) {
+ // Called as the scene transitions from the background to the foreground.
+ // Use this method to undo the changes made on entering the background.
+ }
+
+ func sceneDidEnterBackground(_ scene: UIScene) {
+ // Called as the scene transitions from the foreground to the background.
+ // Use this method to save data, release shared resources, and store enough scene-specific state information
+ // to restore the scene back to its current state.
+ }
+
+
+}
+
--- /dev/null
+//
+// ViewController.swift
+// Demo
+//
+// Created by incar on 2024/12/30.
+//
+
+
+import UIKit
+import HsFileAgentSdk
+
+class ViewController: UIViewController {
+
+ override func viewDidLoad() {
+ super.viewDidLoad()
+ // Do any additional setup after loading the view.
+
+ view.backgroundColor = .red
+ }
+
+ override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
+ Test.add()
+ }
+}
+
+
--- /dev/null
+#if 0
+#elif defined(__arm64__) && __arm64__
+// Generated by Apple Swift version 5.9.2 (swiftlang-5.9.2.2.56 clang-1500.1.0.2.5)
+#ifndef HSFILEAGENTSDK_SWIFT_H
+#define HSFILEAGENTSDK_SWIFT_H
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wgcc-compat"
+
+#if !defined(__has_include)
+# define __has_include(x) 0
+#endif
+#if !defined(__has_attribute)
+# define __has_attribute(x) 0
+#endif
+#if !defined(__has_feature)
+# define __has_feature(x) 0
+#endif
+#if !defined(__has_warning)
+# define __has_warning(x) 0
+#endif
+
+#if __has_include(<swift/objc-prologue.h>)
+# include <swift/objc-prologue.h>
+#endif
+
+#pragma clang diagnostic ignored "-Wauto-import"
+#if defined(__OBJC__)
+#include <Foundation/Foundation.h>
+#endif
+#if defined(__cplusplus)
+#include <cstdint>
+#include <cstddef>
+#include <cstdbool>
+#include <cstring>
+#include <stdlib.h>
+#include <new>
+#include <type_traits>
+#else
+#include <stdint.h>
+#include <stddef.h>
+#include <stdbool.h>
+#include <string.h>
+#endif
+#if defined(__cplusplus)
+#if defined(__arm64e__) && __has_include(<ptrauth.h>)
+# include <ptrauth.h>
+#else
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wreserved-macro-identifier"
+# ifndef __ptrauth_swift_value_witness_function_pointer
+# define __ptrauth_swift_value_witness_function_pointer(x)
+# endif
+# ifndef __ptrauth_swift_class_method_pointer
+# define __ptrauth_swift_class_method_pointer(x)
+# endif
+#pragma clang diagnostic pop
+#endif
+#endif
+
+#if !defined(SWIFT_TYPEDEFS)
+# define SWIFT_TYPEDEFS 1
+# if __has_include(<uchar.h>)
+# include <uchar.h>
+# elif !defined(__cplusplus)
+typedef uint_least16_t char16_t;
+typedef uint_least32_t char32_t;
+# endif
+typedef float swift_float2 __attribute__((__ext_vector_type__(2)));
+typedef float swift_float3 __attribute__((__ext_vector_type__(3)));
+typedef float swift_float4 __attribute__((__ext_vector_type__(4)));
+typedef double swift_double2 __attribute__((__ext_vector_type__(2)));
+typedef double swift_double3 __attribute__((__ext_vector_type__(3)));
+typedef double swift_double4 __attribute__((__ext_vector_type__(4)));
+typedef int swift_int2 __attribute__((__ext_vector_type__(2)));
+typedef int swift_int3 __attribute__((__ext_vector_type__(3)));
+typedef int swift_int4 __attribute__((__ext_vector_type__(4)));
+typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2)));
+typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3)));
+typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4)));
+#endif
+
+#if !defined(SWIFT_PASTE)
+# define SWIFT_PASTE_HELPER(x, y) x##y
+# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
+#endif
+#if !defined(SWIFT_METATYPE)
+# define SWIFT_METATYPE(X) Class
+#endif
+#if !defined(SWIFT_CLASS_PROPERTY)
+# if __has_feature(objc_class_property)
+# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
+# else
+# define SWIFT_CLASS_PROPERTY(...)
+# endif
+#endif
+#if !defined(SWIFT_RUNTIME_NAME)
+# if __has_attribute(objc_runtime_name)
+# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
+# else
+# define SWIFT_RUNTIME_NAME(X)
+# endif
+#endif
+#if !defined(SWIFT_COMPILE_NAME)
+# if __has_attribute(swift_name)
+# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
+# else
+# define SWIFT_COMPILE_NAME(X)
+# endif
+#endif
+#if !defined(SWIFT_METHOD_FAMILY)
+# if __has_attribute(objc_method_family)
+# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
+# else
+# define SWIFT_METHOD_FAMILY(X)
+# endif
+#endif
+#if !defined(SWIFT_NOESCAPE)
+# if __has_attribute(noescape)
+# define SWIFT_NOESCAPE __attribute__((noescape))
+# else
+# define SWIFT_NOESCAPE
+# endif
+#endif
+#if !defined(SWIFT_RELEASES_ARGUMENT)
+# if __has_attribute(ns_consumed)
+# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
+# else
+# define SWIFT_RELEASES_ARGUMENT
+# endif
+#endif
+#if !defined(SWIFT_WARN_UNUSED_RESULT)
+# if __has_attribute(warn_unused_result)
+# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
+# else
+# define SWIFT_WARN_UNUSED_RESULT
+# endif
+#endif
+#if !defined(SWIFT_NORETURN)
+# if __has_attribute(noreturn)
+# define SWIFT_NORETURN __attribute__((noreturn))
+# else
+# define SWIFT_NORETURN
+# endif
+#endif
+#if !defined(SWIFT_CLASS_EXTRA)
+# define SWIFT_CLASS_EXTRA
+#endif
+#if !defined(SWIFT_PROTOCOL_EXTRA)
+# define SWIFT_PROTOCOL_EXTRA
+#endif
+#if !defined(SWIFT_ENUM_EXTRA)
+# define SWIFT_ENUM_EXTRA
+#endif
+#if !defined(SWIFT_CLASS)
+# if __has_attribute(objc_subclassing_restricted)
+# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
+# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
+# else
+# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
+# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
+# endif
+#endif
+#if !defined(SWIFT_RESILIENT_CLASS)
+# if __has_attribute(objc_class_stub)
+# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))
+# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)
+# else
+# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)
+# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
+# endif
+#endif
+#if !defined(SWIFT_PROTOCOL)
+# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
+# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
+#endif
+#if !defined(SWIFT_EXTENSION)
+# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
+#endif
+#if !defined(OBJC_DESIGNATED_INITIALIZER)
+# if __has_attribute(objc_designated_initializer)
+# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
+# else
+# define OBJC_DESIGNATED_INITIALIZER
+# endif
+#endif
+#if !defined(SWIFT_ENUM_ATTR)
+# if __has_attribute(enum_extensibility)
+# define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
+# else
+# define SWIFT_ENUM_ATTR(_extensibility)
+# endif
+#endif
+#if !defined(SWIFT_ENUM)
+# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
+# if __has_feature(generalized_swift_name)
+# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
+# else
+# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
+# endif
+#endif
+#if !defined(SWIFT_UNAVAILABLE)
+# define SWIFT_UNAVAILABLE __attribute__((unavailable))
+#endif
+#if !defined(SWIFT_UNAVAILABLE_MSG)
+# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
+#endif
+#if !defined(SWIFT_AVAILABILITY)
+# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
+#endif
+#if !defined(SWIFT_WEAK_IMPORT)
+# define SWIFT_WEAK_IMPORT __attribute__((weak_import))
+#endif
+#if !defined(SWIFT_DEPRECATED)
+# define SWIFT_DEPRECATED __attribute__((deprecated))
+#endif
+#if !defined(SWIFT_DEPRECATED_MSG)
+# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
+#endif
+#if !defined(SWIFT_DEPRECATED_OBJC)
+# if __has_feature(attribute_diagnose_if_objc)
+# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
+# else
+# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
+# endif
+#endif
+#if defined(__OBJC__)
+#if !defined(IBSegueAction)
+# define IBSegueAction
+#endif
+#endif
+#if !defined(SWIFT_EXTERN)
+# if defined(__cplusplus)
+# define SWIFT_EXTERN extern "C"
+# else
+# define SWIFT_EXTERN extern
+# endif
+#endif
+#if !defined(SWIFT_CALL)
+# define SWIFT_CALL __attribute__((swiftcall))
+#endif
+#if !defined(SWIFT_INDIRECT_RESULT)
+# define SWIFT_INDIRECT_RESULT __attribute__((swift_indirect_result))
+#endif
+#if !defined(SWIFT_CONTEXT)
+# define SWIFT_CONTEXT __attribute__((swift_context))
+#endif
+#if !defined(SWIFT_ERROR_RESULT)
+# define SWIFT_ERROR_RESULT __attribute__((swift_error_result))
+#endif
+#if defined(__cplusplus)
+# define SWIFT_NOEXCEPT noexcept
+#else
+# define SWIFT_NOEXCEPT
+#endif
+#if !defined(SWIFT_C_INLINE_THUNK)
+# if __has_attribute(always_inline)
+# if __has_attribute(nodebug)
+# define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline)) __attribute__((nodebug))
+# else
+# define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline))
+# endif
+# else
+# define SWIFT_C_INLINE_THUNK inline
+# endif
+#endif
+#if defined(_WIN32)
+#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
+# define SWIFT_IMPORT_STDLIB_SYMBOL __declspec(dllimport)
+#endif
+#else
+#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
+# define SWIFT_IMPORT_STDLIB_SYMBOL
+#endif
+#endif
+#if defined(__OBJC__)
+#if __has_feature(objc_modules)
+#if __has_warning("-Watimport-in-framework-header")
+#pragma clang diagnostic ignored "-Watimport-in-framework-header"
+#endif
+#endif
+
+#endif
+#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
+#pragma clang diagnostic ignored "-Wduplicate-method-arg"
+#if __has_warning("-Wpragma-clang-attribute")
+# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
+#endif
+#pragma clang diagnostic ignored "-Wunknown-pragmas"
+#pragma clang diagnostic ignored "-Wnullability"
+#pragma clang diagnostic ignored "-Wdollar-in-identifier-extension"
+
+#if __has_attribute(external_source_symbol)
+# pragma push_macro("any")
+# undef any
+# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="HsFileAgentSdk",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
+# pragma pop_macro("any")
+#endif
+
+#if defined(__OBJC__)
+#endif
+#if __has_attribute(external_source_symbol)
+# pragma clang attribute pop
+#endif
+#if defined(__cplusplus)
+#endif
+#pragma clang diagnostic pop
+#endif
+
+#else
+#error unsupported Swift architecture
+#endif
--- /dev/null
+//
+// HsFileAgentSdk.h
+// HsFileAgentSdk
+//
+// Created by incar on 2024/12/30.
+//
+
+#import <Foundation/Foundation.h>
+
+//! Project version number for HsFileAgentSdk.
+FOUNDATION_EXPORT double HsFileAgentSdkVersionNumber;
+
+//! Project version string for HsFileAgentSdk.
+FOUNDATION_EXPORT const unsigned char HsFileAgentSdkVersionString[];
+
+// In this header, you should import all the public headers of your framework using statements like #import <HsFileAgentSdk/PublicHeader.h>
+
+
--- /dev/null
+{
+ "ABIRoot": {
+ "kind": "Root",
+ "name": "TopLevel",
+ "printedName": "TopLevel",
+ "children": [
+ {
+ "kind": "Import",
+ "name": "Foundation",
+ "printedName": "Foundation",
+ "declKind": "Import",
+ "moduleName": "HsFileAgentSdk",
+ "declAttributes": [
+ "RawDocComment"
+ ]
+ },
+ {
+ "kind": "TypeDecl",
+ "name": "Test",
+ "printedName": "Test",
+ "children": [
+ {
+ "kind": "Function",
+ "name": "add",
+ "printedName": "add()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "s:14HsFileAgentSdk4TestC3addyyFZ",
+ "mangledName": "$s14HsFileAgentSdk4TestC3addyyFZ",
+ "moduleName": "HsFileAgentSdk",
+ "static": true,
+ "declAttributes": [
+ "Final",
+ "AccessControl"
+ ],
+ "funcSelfKind": "NonMutating"
+ }
+ ],
+ "declKind": "Class",
+ "usr": "s:14HsFileAgentSdk4TestC",
+ "mangledName": "$s14HsFileAgentSdk4TestC",
+ "moduleName": "HsFileAgentSdk",
+ "declAttributes": [
+ "AccessControl"
+ ],
+ "hasMissingDesignatedInitializers": true
+ }
+ ],
+ "json_format_version": 8
+ },
+ "ConstValues": [
+ {
+ "filePath": "\/Users\/apple\/Desktop\/code\/HsFileAgentSdk_iOS\/HsFileAgentSdk_iOS\/code2\/HsFileAgentSdk\/HsFileAgentSdk\/Test.swift",
+ "kind": "StringLiteral",
+ "offset": 163,
+ "length": 16,
+ "value": "\"11111111111111\""
+ }
+ ]
+}
\ No newline at end of file
--- /dev/null
+// swift-interface-format-version: 1.0
+// swift-compiler-version: Apple Swift version 5.9.2 (swiftlang-5.9.2.2.56 clang-1500.1.0.2.5)
+// swift-module-flags: -target arm64-apple-ios13.0 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -module-name HsFileAgentSdk
+// swift-module-flags-ignorable: -enable-bare-slash-regex
+import Foundation
+@_exported import HsFileAgentSdk
+import Swift
+import _Concurrency
+import _StringProcessing
+import _SwiftConcurrencyShims
+@_hasMissingDesignatedInitializers public class Test {
+ public static func add()
+ @objc deinit
+}
--- /dev/null
+// swift-interface-format-version: 1.0
+// swift-compiler-version: Apple Swift version 5.9.2 (swiftlang-5.9.2.2.56 clang-1500.1.0.2.5)
+// swift-module-flags: -target arm64-apple-ios13.0 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -module-name HsFileAgentSdk
+// swift-module-flags-ignorable: -enable-bare-slash-regex
+import Foundation
+@_exported import HsFileAgentSdk
+import Swift
+import _Concurrency
+import _StringProcessing
+import _SwiftConcurrencyShims
+@_hasMissingDesignatedInitializers public class Test {
+ public static func add()
+ @objc deinit
+}
--- /dev/null
+framework module HsFileAgentSdk {
+ umbrella header "HsFileAgentSdk.h"
+ export *
+
+ module * { export * }
+}
+
+module HsFileAgentSdk.Swift {
+ header "HsFileAgentSdk-Swift.h"
+ requires objc
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>files</key>
+ <dict>
+ <key>Headers/HsFileAgentSdk-Swift.h</key>
+ <data>
+ ucCk4Ao655BGmy9dg231q/pEtKg=
+ </data>
+ <key>Headers/HsFileAgentSdk.h</key>
+ <data>
+ sgPV5bIGXxa6YeKrdV3MlKDIYh0=
+ </data>
+ <key>Info.plist</key>
+ <data>
+ MtSrNXPRQ4GD5sZI9fXmXqy8LhM=
+ </data>
+ <key>Modules/HsFileAgentSdk.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo</key>
+ <data>
+ FNwqD4nJl6kfHauZynqvrwJp7dM=
+ </data>
+ <key>Modules/HsFileAgentSdk.swiftmodule/arm64-apple-ios.abi.json</key>
+ <data>
+ BG0IecHYsLxmT1sPKhOhGEtAcaA=
+ </data>
+ <key>Modules/HsFileAgentSdk.swiftmodule/arm64-apple-ios.private.swiftinterface</key>
+ <data>
+ hAzljrOfRWInDa9JhyZei0qsLMc=
+ </data>
+ <key>Modules/HsFileAgentSdk.swiftmodule/arm64-apple-ios.swiftdoc</key>
+ <data>
+ KUAu76jFgh8u3T9q8z2CkJcKiMg=
+ </data>
+ <key>Modules/HsFileAgentSdk.swiftmodule/arm64-apple-ios.swiftinterface</key>
+ <data>
+ hAzljrOfRWInDa9JhyZei0qsLMc=
+ </data>
+ <key>Modules/HsFileAgentSdk.swiftmodule/arm64-apple-ios.swiftmodule</key>
+ <data>
+ ZXwwEyS1kb0z/NcyXfLc2Tw58JE=
+ </data>
+ <key>Modules/module.modulemap</key>
+ <data>
+ SiigSBPv7Co7zziN0t+Tk0D3Df0=
+ </data>
+ </dict>
+ <key>files2</key>
+ <dict>
+ <key>Headers/HsFileAgentSdk-Swift.h</key>
+ <dict>
+ <key>hash</key>
+ <data>
+ ucCk4Ao655BGmy9dg231q/pEtKg=
+ </data>
+ <key>hash2</key>
+ <data>
+ 1e6DecGGgJ69G33ypqpj7xn20D0qLinFqgRl09hSd78=
+ </data>
+ </dict>
+ <key>Headers/HsFileAgentSdk.h</key>
+ <dict>
+ <key>hash</key>
+ <data>
+ sgPV5bIGXxa6YeKrdV3MlKDIYh0=
+ </data>
+ <key>hash2</key>
+ <data>
+ /RV8HijaAGpl4Dh/D6oSU56Llsvt3BigfRkPdmBPp4s=
+ </data>
+ </dict>
+ <key>Modules/HsFileAgentSdk.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo</key>
+ <dict>
+ <key>hash</key>
+ <data>
+ FNwqD4nJl6kfHauZynqvrwJp7dM=
+ </data>
+ <key>hash2</key>
+ <data>
+ mEWOIchCIVObfLwDDzQ71kNeziBtu5nhMkRhUR/s8QY=
+ </data>
+ </dict>
+ <key>Modules/HsFileAgentSdk.swiftmodule/arm64-apple-ios.abi.json</key>
+ <dict>
+ <key>hash</key>
+ <data>
+ BG0IecHYsLxmT1sPKhOhGEtAcaA=
+ </data>
+ <key>hash2</key>
+ <data>
+ GU30Lt47M328A+3NHTnTAvU/jodZyChsAQXR103D2co=
+ </data>
+ </dict>
+ <key>Modules/HsFileAgentSdk.swiftmodule/arm64-apple-ios.private.swiftinterface</key>
+ <dict>
+ <key>hash</key>
+ <data>
+ hAzljrOfRWInDa9JhyZei0qsLMc=
+ </data>
+ <key>hash2</key>
+ <data>
+ RHVugzlTUARhX/jiZW18ilKmM2Kn0mBWhEt3MpwbTr8=
+ </data>
+ </dict>
+ <key>Modules/HsFileAgentSdk.swiftmodule/arm64-apple-ios.swiftdoc</key>
+ <dict>
+ <key>hash</key>
+ <data>
+ KUAu76jFgh8u3T9q8z2CkJcKiMg=
+ </data>
+ <key>hash2</key>
+ <data>
+ e4Z3hdqEHKRnD2USLHx3EEjRQMqoLjJ9fgphrmUk1Ak=
+ </data>
+ </dict>
+ <key>Modules/HsFileAgentSdk.swiftmodule/arm64-apple-ios.swiftinterface</key>
+ <dict>
+ <key>hash</key>
+ <data>
+ hAzljrOfRWInDa9JhyZei0qsLMc=
+ </data>
+ <key>hash2</key>
+ <data>
+ RHVugzlTUARhX/jiZW18ilKmM2Kn0mBWhEt3MpwbTr8=
+ </data>
+ </dict>
+ <key>Modules/HsFileAgentSdk.swiftmodule/arm64-apple-ios.swiftmodule</key>
+ <dict>
+ <key>hash</key>
+ <data>
+ ZXwwEyS1kb0z/NcyXfLc2Tw58JE=
+ </data>
+ <key>hash2</key>
+ <data>
+ WyMkjmdF0/sns/+WAWR919PbPdFnEfolL30ajTlPdd0=
+ </data>
+ </dict>
+ <key>Modules/module.modulemap</key>
+ <dict>
+ <key>hash</key>
+ <data>
+ SiigSBPv7Co7zziN0t+Tk0D3Df0=
+ </data>
+ <key>hash2</key>
+ <data>
+ m6I+khGglBz/UZ/7NPxZajgSOxW4btqEd5VoGlcynSY=
+ </data>
+ </dict>
+ </dict>
+ <key>rules</key>
+ <dict>
+ <key>^.*</key>
+ <true/>
+ <key>^.*\.lproj/</key>
+ <dict>
+ <key>optional</key>
+ <true/>
+ <key>weight</key>
+ <real>1000</real>
+ </dict>
+ <key>^.*\.lproj/locversion.plist$</key>
+ <dict>
+ <key>omit</key>
+ <true/>
+ <key>weight</key>
+ <real>1100</real>
+ </dict>
+ <key>^Base\.lproj/</key>
+ <dict>
+ <key>weight</key>
+ <real>1010</real>
+ </dict>
+ <key>^version.plist$</key>
+ <true/>
+ </dict>
+ <key>rules2</key>
+ <dict>
+ <key>.*\.dSYM($|/)</key>
+ <dict>
+ <key>weight</key>
+ <real>11</real>
+ </dict>
+ <key>^(.*/)?\.DS_Store$</key>
+ <dict>
+ <key>omit</key>
+ <true/>
+ <key>weight</key>
+ <real>2000</real>
+ </dict>
+ <key>^.*</key>
+ <true/>
+ <key>^.*\.lproj/</key>
+ <dict>
+ <key>optional</key>
+ <true/>
+ <key>weight</key>
+ <real>1000</real>
+ </dict>
+ <key>^.*\.lproj/locversion.plist$</key>
+ <dict>
+ <key>omit</key>
+ <true/>
+ <key>weight</key>
+ <real>1100</real>
+ </dict>
+ <key>^Base\.lproj/</key>
+ <dict>
+ <key>weight</key>
+ <real>1010</real>
+ </dict>
+ <key>^Info\.plist$</key>
+ <dict>
+ <key>omit</key>
+ <true/>
+ <key>weight</key>
+ <real>20</real>
+ </dict>
+ <key>^PkgInfo$</key>
+ <dict>
+ <key>omit</key>
+ <true/>
+ <key>weight</key>
+ <real>20</real>
+ </dict>
+ <key>^embedded\.provisionprofile$</key>
+ <dict>
+ <key>weight</key>
+ <real>20</real>
+ </dict>
+ <key>^version\.plist$</key>
+ <dict>
+ <key>weight</key>
+ <real>20</real>
+ </dict>
+ </dict>
+</dict>
+</plist>
};
8A1DFF4E2B9EB4F800B735FF = {
CreatedOnToolsVersion = 15.0;
+ LastSwiftMigration = 1520;
};
};
};
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SWIFT_EMIT_LOC_STRINGS = YES;
- SWIFT_VERSION = 4.2;
+ SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
};
name = Debug;
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SWIFT_EMIT_LOC_STRINGS = YES;
- SWIFT_VERSION = 4.2;
+ SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
};
name = Release;